Contents

数据库-redis-小林coding-高可用篇

本系列笔记为作者在跟随小林coding学习的时候做的笔记。感谢小林大大。

主从复制是怎么实现

全量复制、基于长连接的命令传播、增量复制

第一次同步

replicaof命令:

1
2
# 服务器 B 执行这条命令
replicaof <服务器 A 的 IP 地址> <服务器 A 的 Redis 端口号>
https://cdn.xiaolincoding.com//mysql/other/ea4f7e86baf2435af3999e5cd38b6a26.png

第一阶段:建立链接、协商同步:

通过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地址和信息

步骤四:将旧主节点变为从节点

监视旧主节点,上线后转换为从节点

 |