开发者学堂课程【Redis 入门到精通(进阶篇):主从复制工作流程】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/765/detail/13457
主从复制工作流程
目录
一,心跳机制
二,心跳阶段注意事项
三,主从复制工作流程(完整)
本章主要讲解心跳机制以及再次详细讲解主从复制完整的工作流程。
一,心跳机制
1.进入命令传播阶段候,master 与 slave 间需要进行信息交换,使用心跳机制进行维护,实现双方连接保持在线
2.master 心跳:
(1).指令:PING
(2).周期:由repl-ping-slave-period 决定,默认10秒
(3).作用:判断 slave 是否在线
(4).查询:INFOreplication 获取 slave 最后一次连接时间间隔,lag项维持在0或1视为正常
以下为在 info 中查到的运行结果的代码,可供参考:
keyspace_hits:2
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:118
migrate cached sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
# Replication role:master
connected _slaves:1
slave0:ip=127.0.0.1.port=6380.state=online offser-4004,1ag=1 master_replid:5e4796996346598c6f3f4742efe609039
6f016 master_replid2:00000000000000000000000000000000000000
master_rep1_offset:4018
second_rep1_offset:-1
repl_backlog_active:1
repl_back1og_size:1048576
repl_back1og first byte_offset:1
repl_back1og histlen:4018
# CPU
used_cpu_sys:2.11
used_cpu_user:1.32
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
# Cluster
cluster_enabled:0
# Keyspace
db0:keys=2 expires=0,avg_tt1=0
1270.0.1:6379>
3.slave 心跳任务
(1).指令:REPLCONF ACK{offset)
(2).周期:1秒
(3)作用:
①.汇报 slave 自己的复制偏移量,获取最新的数据变更指令
②.判断 master 是否在线
二,心跳阶段注意事项
1.当 slave 多数掉线,或延迟过高时,master 为保障数据稳定性,将拒绝所有信息同步操作。
min-slaves-to-write 2
min-slaves-max-lag8
Slave 数量少于2个,或者所有 slave 的延迟都大于等于10秒时,强制关闭 master 写功能,停止数据。
2.Slave 数量由 slave 发送 REPLCONFACK 命令做确认
3.Slave 延迟3.由 slave 发送 REPLCONFACK 命令做确认
三,主从复制工作流程(完整)
以下为数字大小作为流程的顺序
1.master 方面流程
(1).发送命令:ping
(2).接收命令,判定 offset 是否在复制缓冲区中
(3).①如果不在缓冲区,执行全量复制
②如果在缓冲区,且 offset 与 offset 相同,忽略
③如果在缓冲区,且 offset 与 offset 不相同
发送 +CONTINUE offset
通过 socket 发送复制缓冲区中 offset 到 offset 的数据
2.slave 方面流程
(1).发送命令:replconfack offset
(4).收到+CONTINUE 保存
master 的 offset
接收信息后,执行 bgrewriteaof,恢复数据。
注意:master 部分的如果不在缓冲区,执行全量复制为全量复制。Slave 部分的发送命令与收到+CONTINUE 保存master的offset,接收信息后,执行 bgrewriteaof,恢复数据部分为命令传播阶段。