Rdis主从复制
多台服务器连接方案
提供数据房:master
- 主服务器,主节点,主库
- 主客户端
接收数据方:salve
- 从服务器,从节点,从库
- 从客户端
需要解决的问题:
- 数据同步
主从复制
主从复制即将master中的数据及时,有效的复制到slave中
特征:一个master可以拥有多个slave,一个slave只对应一个master
职责:
- master
- 写数据
- 执行写操作时,将出现变化的数据自动同步到slave
- 读数据(可忽略)
- slave
- 读数据
- 写数据(禁止)
主从复制过程大体可分为3个阶段
- 建立连接阶段
- 数据同步阶段
- 命令传播阶段
阶段一:建立连接阶段工作流程
- 设置master的地址和端口,保存master信息
- 建立socket连接
- 发送ping命令(定时器任务)
方法一:在master节点的配置文件内添加slave的IP与端口
slaveof 127.0.0.1 6379
方法二:启动服务器参数(命令行)
slaveof ip port
从客户端断开与master连接
slaveof no one
授权访问
master设置密码
方法一:master配置文件设置密码,在配置文件里添加
requirepass <password>
方法二:master客户端发送命令设置密码(命令行)
config set requirepass <password>
master设置了密码,slave要使用master的 密码进行连接
方法一:slave的配置文件中,写上master的密码
masterauth <password>
方法二:slave客户端发送命令设置密码
auth <password>
阶段二:数据同步阶段工作流程
- 在salve初次连接master后,复制master中的所有数据到slave
- 将slave的数据库状态更新成master当前的数据库状态
步骤1:请求同步数据
步骤2:创建RDB同步数据
步骤3:恢复RDB同步数据
步骤4:请求部分同步数据
数据同步master注意事项:
- 如果master数据量大,数据同步阶段应避开流量高分期,避免造成master阻塞
- master复制缓存区大小设定不合理,会导致数据溢出。如果进行全量复制,时间过长,进行部分数据复制的时候发现已经存在丢失的情况,必须进行第二次全量复制,致使slave陷入死循环
//同步数据块的大小,默认是1mb repl-backlog-size 1mb
- master单机内存占用主机内存的比例不应过大,建议使用50%-70%的内存,留下30%-50%的内存执行bgsave命令和创建复制缓冲区
数据同步slave注意事项:
- 为避免slave进行全量复制,部分复制时服务器响应阻塞或数据不同步,建议关闭此期间的对外服务
slave-serve-stale-data yes|no
- 数据同步阶段,master发送给slave信息可以理解master是slave的一个客户端,主动向slave发送命令
- 多个slave同时对master请求数据同步,要错开
复制缓冲区
概念:复制缓冲区,又名复制积压缓存区,是一个先进县出的队列,用于存储服务器执行过的命令,每次传播命令,,master都会将传播的命令记录下来,并存储在复制缓冲区
复制缓冲区默认存储空间是1M,由于存储空间大小是固定的,当入队元素的数量大于队列大小的时候,最先入队的数据会被挤出去
心跳机制
进入命令传播阶段时,master与slave间需要进行信息交换,使用心跳机制进行维护,实现双方连接保存在线
master心跳:
- 指令:PING
- 周期:由repl-ping-slave-period决定,默认10s
- 作用:判断slave是否在线
slave心跳任务:
- 指令:REPLCONF ACK【offset】
- 周期:1s
- 作用:请求master的数据,查看master是否在线
心跳阶段注意事项
- 当slave多数掉线,或延迟过高时,master位保障数据稳定性,将拒绝所有信息同步操作
min-slaves-to-write 2 min-slaves-max-lag 8
- slave数量小于2个,或所有slave的延迟都大于10s时。强制关闭master写功能,停止数据同步
- slave数量由slave发送REPLCONF ACK命令确认
- slave延迟由slave发送REPLCONF ACK命令做确认
继续阅读

我的微信
这是我的微信扫一扫
评论