数据库-redis-小林coding-高可用篇
Contents
本系列笔记为作者在跟随小林coding学习的时候做的笔记。感谢小林大大。
主从复制是怎么实现
全量复制、基于长连接的命令传播、增量复制
第一次同步
replicaof命令:
|
|
第一阶段:建立链接、协商同步:
通过psync命令获取主服务器的 runID 和复制进度 offset
第二阶段分为:
- 主服务器生成 RDB 文件;
- 主服务器发送 RDB 文件给从服务器;
- 「从服务器」加载 RDB 文件;
在此期间将写操作命令写入到 replication buffer 缓冲区
第三阶段:发送replication buffer 缓冲区的写操作
命令传播
完成第一次同步后,维护一个TCP长连接,通过这个连接将写操作命令传播给从服务器。称为基于长连接的命令传播
分摊主服务器的压力
从服务器可以有自己的从服务器
增量复制
网络出问题后又恢复时
psync传输主服务器ID和offset继续同步写命令
哨兵
实现主从节点故障转移
判断主节点故障
每隔1秒给所有主从节点发送ping命令,没有在down-after-milliseconds参数规定的时间内响应则标记为主观下线
哨兵集群(最少需要三台机器来部署哨兵集群)减少误判的情况
当某个哨兵主观下线主节点时,会向其他哨兵询问主节点是否下线,当收到quorum个主观下线结果时,将主节点标记为客观下线。quorum参数通常是哨兵个数除以2加1
主从故障转移的过程
当主节点客观下线时就需要在从节点中选出一个新的主节点,这个过程由一个leader来执行。
标记主节点客观下线的哨兵作为leader候选者,询问其他哨兵是否赞成我作为leader,每个哨兵只能投一次票,拿到Max(半数+1,quorum)的赞成票则得知自己为leader
步骤一:选出新主节点
从节点中选一个节点转换为新主节点
步骤二:将从节点指向新主节点
让其他从节点修改复制目标为新主节点
步骤三:通知客户的主节点已更换
通过发布者订阅者机制通知客户端新主节点的ip地址和信息
步骤四:将旧主节点变为从节点
监视旧主节点,上线后转换为从节点