redis主从复制原理
2021-02-06 11:36:56 4 举报
redis主从原理
作者其他创作
大纲/内容
slave redis192.168.1.20:6380
yes
redis192.168.1.20:6380
2):+FULLRESYNC {runId} {offet}
new master redis192.168.1.30:6379
slave6380
salve redis192.168.1.21:6380
slaveof 192.168.1.10 6379
master
1:+FULLRESYNC 从节点将触发全量复制流程
复制偏移量维护
redis192.168.1.30:6379
读取失败
断开重连
client2
master redis192.168.1.10:6379
运维tips计算出master_repl_offset-slave_repl_offset字节量,如果主从直接的复制偏移量相差较大.可能是网络或命令阻塞等原因引起
2:+CONTINUE从节点将触发部分复制流程
no
数据同步
8) loadRDB加载文件.对于较大文件这一步将比较耗时
9)bgrewriteaof立刻对aof进行重写
完成
ping命令每隔10秒发送
发送ping
client1
每隔1秒轮询重试
salve redis(宕机)192.168.1.20:6380
1.断开主从复制关系
全量同步和部分同步
读取为空
是否开启AOF?
monitor监听
写入key=hello
1)保持主节点信息
salve offet
复制过程
复制积压缓存区
累加从偏移量(slave_repl_offset)
传播命令
3:ERR说明主节点版本低于2.8不支持psync.需要发送旧版本的sync命令触发
3.删除从节点当前所有数据
发现偏移量延迟过大通知
执行命令slaveof 192.168.1.30:6379
psync {runId} {offet}
4)权限验证
主节点会持续把命令发送给从节点.保证数据一致性
转移
复制积压缓存区(1MB)repl-backlog-buffer主从中断也能保持主节点响应写命令
解决方案tips:客户端开发一个monitor监听器.监控主从节点如果master_repl_offset 和slave_repl_offset偏移量比较大例如超过10M时候通知客户端client2读取master或者别的slave节点
可用从节点列表
6) send buffer将复制过程中缓存数据发送给slave
psync运行流程
3)保存主节点的rundId和offet
解决方案tips:对于从节点的故障问题,需要在客户端维护可用从节点列表,当从节点故障时立刻切换到其他从节点或主节点上。这个过程类似上文提到的针对延迟过高的监控处理,需要开发人员改造客户端类库。建议tips:使用Redis做读写分离存在一定的成本。Redis本身的性能非常高,开发人员在使用额外的从节点提升读性能之前,尽量在主节点上做充分优化,比如解决慢查询,持久化阻塞,合理应用数据结构等,当主节点优化空间不大时再考虑扩展。建议大家在做读写分离之前,可以考虑使用RedisCluster等分布式解决方案,这样不止扩展了读性能还可以扩展写性能和可支撑数据规模,并且一致性和故障转移也可以得到保证,对于客户端的维护逻辑也相对容易。
2.与新主节点建立复制关系
主从同步问题
断开复制
6)命令继续复制
4) psync {runId} {offet}
4) 从节点触发全量复制.主节点执行bgsave保存RDB文件
获取主从节点偏移数据
slaveof 192.168.1.30:6379
继续复制流程
redis192.168.1.10:6379
5):+CONTINUE从节点将触发部分复制流程
连接成功
读取key=hello
slave
由于网络阻塞同步延迟
link_ok
部分复制过程
返回pong?
建立复制
7) flush old data清空旧数据
通过slaveof命令实现主从切换执行salveof {newmasterHost} {newMasterPort}
3)发送ping命令
2)主从建立socket连接
从节点使用psync命令部分复制和全量复制的功能:参数含义如下:rundId:从节点所复制主节点运行idoffet:当前从节点已复制的数据偏移量
复制命令psync进行数据同步
5)同步数据集
主从心跳检测
复制积压缓存区(1MB)FIFO队列.用于复制丢失数据补救
从节点故障问题
从节点发送PING命令流程
建立socket192.168.1.30:24555
断开连接
主从延迟问题
4.对新主节点进行复制操作
1) psync {runId} {offet}
replconf ack {offet}从节点每隔1秒发送一次给主节点上报当前复制偏移量
建立24555的套接口.专门用于接收主节点的发送复制命令
配置文件添加slaveof {masterHost} {masterPort}
2)主节点依旧保持写命令数据到缓冲区
1) 主从节点出现中断。连接丢失
累加主偏移量(master_repl_offset)
全量复制流程
6) 主节点根据偏移量把复制积压缓存区的数据发送给从节点
从节点与主节点建立连接流程
salve redis192.168.1.20:6380
3) Conneting to mater
5)send RDB大文件需要调整复制总时间repl-time(默认60秒)
0 条评论
回复 删除
下一页