主从复制
主从复制的三个阶段
- 建立连接:slave向master发起连接
- 数据同步:master向slave同步数据
- 命令传播:master后面收到的数据,也同步给slave, 这是一个反复过程。
建立连接
slave向master发起连接,master响应
slave保存master ip port, 并创建socket
master响应 -> 验证授权 -> 保存slave端口号
数据同步
- slave发送psync2指令发起同步
- master 执行bgsave,第一个slave连接时,会创建命令缓冲区
- master生成rdb文件后,通过socket发给salve
- slave接受RDB文件,清空数据,执行RDB文件恢复过程
- master发送缓冲区信息
- slave 执行bgrewriteaof, 恢复数据,
命令传播阶段
master状态被修改时,导致的主从数据不一致,需要主从状态同步到一致。
- 复制缓冲区 + 偏移量offset
哨兵模式
redis-sentinel :对集群进行监控,出现故障时, 通过投票选举新的master将所有的slave连接到新的master
哨兵的工作原理
监控
- 获取各个Sentinel的状态,是否在线
- 获取master的状态和属性
- 获取所有slave的状态和属性
- 各个sentinel之间形成一个小网络,互相发送消息
通知
sentinel获取到某个阶段的状态信息都会通知其他的sentinel
故障转移
- sentinel向master发送指令,master没有响应,多次尝试未果,标记master为SRI_S_DOWN,主观下线
- 告诉其他sentinel, 其他sentinel也向这个master发送指令
- 一半以上的sentinel认为master挂了,标记SRI_O_DOWN,客观下线
- sentinel投票,选出一个新的master, 考虑因素包括在线的、响应快的、优先级等;
- 向新的master发送指令slaveof no one, 向其他slave发送slave 新master-ip 新master-port