Redis 主从复制

news/2024/11/9 0:43:43/

一、主从复制

1.简介

  • 主从库之间采用读写分离的方式
  • 读操作: 主库、从库都可以处理
  • 写操作:首先写到主库执行,然后再将主库同步给从库。
  • 实现读写分离,性能扩展
  • 容灾快速恢复

2 主从复制步骤

  • 创建一个目录 ,root下创建一个myredis的目录 
mkdir myredis//创建目录
cd myredis //进行目录
cp /opt/reids-6.2.6/redis.conf redis_1.conf //cp 源文件 目标文件
ls
  • 关闭aof
  • 使用vi编辑三个conf文件,redis_6379.conf,redis_6380.conf,redis_6381.conf做为一主二从配置
include redis_1.conf
pidfile /var/run/reids_6379.pid
port 6379
dbfilename dump6379.rdb
  • 分别启动三个服务
[root@localhost myredis]# redis-server redis_6379.conf
[root@localhost myredis]# redis-server redis_6380.conf
[root@localhost myredis]# redis-server redis_6381.conf
[root@localhost myredis]# ps -ef|grep redis
root 7289 1 0 17:35 ? 00:00:00 redis-server 127.0.0.1:6379
root 7296 1 0 17:35 ? 00:00:00 redis-server 127.0.0.1:6380
root 7302 1 0 17:35 ? 00:00:00 redis-server 127.0.0.1:6381
root 7316 6663 0 17:35 pts/0 00:00:00 grep --color=auto redis
  • 在三个客户端,模拟分别连接到不同服务器
redis-cli -p 端口号
redis-cli -p 6379
redis-cli -p 6380
redis-cli -p 6381
  • 查看服务器状态
info replication
  • 63806381上调用replicaof ,将其从属于6379
replicaof 127.0.0.1 6379
  • 在主库上可以写入数据,从库不能写入数据
  • 主库和从库都可以读数据

3.服务器宕机演示

3.1从服务器宕机

  • 6381上调用shutdown
  • 在主服务器上写入数据
  • 6381重新连上时,仍然可以接收到主服务器的数据

3.2主服务器宕机

  • 6379服务器调用shutdown
  • 在从服务器上仍然可以读取数据
  • 从服务器显示主服务器的状态为down
  • 当主服务器重新启动,从服务器显示主服务器的状态是up

4.主从同步原理

  • 第一阶段,主从建立连接,协商同步。从库和主库建立连接,告诉主库即将进行同步操作。主库需要确认并回复,主从就可以开始进行同步处理了。
  • 从库向主库发送一个psync指令,包含两个参数。一个是主库的runID,另一个是复制进offset
    • runID是每个redis实例启动时生成的一个随机ID,唯一标识。第一次复制时,从库不知道主库的runid,所以设为一个"?"
    • offset-1表示第一次复制
  • 主库收到指令后,会发送给从库fullresync指令去响应,带着主库的runid,还有目前复制度offset从库会记录下这两个参数。fullresync表示全量复制。主库把所有内容都复制给从库
  • 第二阶段,主库将所有数据发送给从库进行同步。从库收到rdb文件后,在本地把原有的数据清除,同步从主库接收到的rdb文件 。
  • 如果在主库把数据同步给从库的过程中,主库还在写入数据,为了保证主从数据的一致性,主库会在内存中给一块空间replication buffer,专门记录rdb文件生成后收到的所有写入操作
  • 第三阶段,主库把第二阶段执行过程中新收到的操作,再发送给从库,从库再加载执行这些操作,就实现同步处理了。

5.--从模式

  • 采用主--从模式,将主库生成和传输rdb文件的压力,以级联方式分散到从库上。

6.网络连接异常情况  

  • redis2.8之前,如果网络异常,再次连接后,需要做全量复制
  • redis2.8之后,采用增量复制方式。repl_backlog_buffer缓冲区。当主从网络断开后,主库把收到写入操作,写入replication buffer,同时,也写入到repl_backlog_buffer缓冲区.
  • 这个缓冲区,是一个环形缓冲区,主库会记录自己写到的位置,从库会记录自己读到的位置

  • repl_backlog_size参数
  • 缓冲空间大小=主库写入速度 * 操作大小-主从库网络传输速度 * 操作大小
  • repl_backlog_size=缓冲空间大小*2
  • 2000 * 2-1000 * 2=2000 2M 4M

 


http://www.ppmy.cn/news/53038.html

相关文章

销量破亿,董洁直播间凭何出圈?

近期,“没有五位数走不出”的董洁直播间火了…… 纵观这几年各大平台直播带货,火已不是什么新鲜事,而为何董洁的直播能火上热搜呢?本期,千瓜将解析董洁直播,同品牌方聊聊小红书直播的那些事儿。董洁「种草式…

RSA加解密三方调用

RSA三方调用 github项目demo 整体项目结构 ├─ExposedInterface 服务提供方的单独接口依赖包(里面只有实体和暴露接口) 根据服务提供者每次打包release 正式版本包 │ ├─src │ │ ├─main │ │ │ ├─java │ │ │ │ └─com │ │ │ │ └…

【Python】【进阶篇】7、Django模板系统

目录 7、Django模板系统1. Django的模板系统2. 模板系统的应用1) 模板传参2) render方法 7、Django模板系统 本节我们继续使用《Django视图函数》一节中的“Hello_my_django”函数来完成相关知识的讲解。 from django.http import HttpResponse def Hello_my_django(request)…

【mmdeploy】【TODO】使用mmdeploy将mmdetection模型转tensorrt

mmdetection转换 文章目录 mmdetection转换mmdetection 自带转换ONNX——无法测试使用mmdeploy(0.6.0)使用mmdeploy转onnx使用mmdeploy直接转tensorRT调试记录 先上结论:作者最后是转tensorrt的小图才成功的,大图一直不行。文章仅作者自我记录使用&#…

四、MyBatis获取参数值的两种方式(重点)

文章目录 四、MyBatis获取参数值的两种方式(重点)4.1 单个字面量类型的参数4.2 多个字面量类型的参数4.3 map集合类型的参数4.4 实体类类型的参数4.5 使用Param标识参数 四、MyBatis获取参数值的两种方式(重点) MyBatis获取参数值…

【无标题】c++异常机制的一些总结以及思考

在谈及c处理异常机制的方法之前我们不妨来回顾一下c语言是如何应对这块的。 终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。 返回错误码,缺陷:需要程序员自己去查找对应的…

Java API操作Jenkins和自定义Java构建镜像

文章目录 1、Java操作Jenkins1.1、Jenkins API支持格式json和xml1.2、Java API操作 2、自定义Java构建镜像 1、Java操作Jenkins 1.1、Jenkins API支持格式json和xml # json格式,{host}/api/json http://192.168.245.139:8080/api/json # 视图接口,json…

2023软件测试工具大全(自动化、接口、性能、安全、测试管理)

目录 前言 一、自动化测试工具 Selenium Appium TestComplete 二、接口测试工具 Postman SoapUI JMeter 三、性能测试工具 LoadRunner JMeter Gatling 四、安全测试工具 Burp Suite OWASP ZAP Nmap 五、测试管理工具 TestRail JIRA TestLink 总结 前言 …