Redis 主从复制、哨兵机制关键参数与命令

建立主从连接

【命令】replicaof <服务器 A 的 IP 地址> <服务器 A 的 Redis 端口号>

形成主服务器节点和从服务器节点的关系,也可以让从节点成为二级主节点分摊压力。

【命令】psync

进行数据同步命令,会携带 runID 和 offset。

从节点建立主从关系或断开重连后自动发出,主节点会做出回应。

【命令】folk()

创建子进程。

【命令】bgsave

主节点节点异步持久化,生成RDB文件。

主节点通过folk()创建子进程来生成RGB文件发送给从节点,从节点利用RDB文件内的全量数据日志完成首次数据同步。

【参数】runID

主服务器的 runID。每个 Redis 服务器在启动时都会自动生产一个随机的 ID 来唯一标识自己。

【参数】offset

表示复制的进度,第一次同步时,其值为 -1。从节点断线重连增量同步时值不为-1。

在从节点向主节点发送的psync命令中带有runID和offset两个参数。


主从数据复制

Buffer 缓冲区

【结构】replication buffer

第一次同步期间的新数据,命令传播即连接中的新数据,重连后增量数据都会存在 buffer 中,每个节点都分配一个,从节点收到 buffer 中的数据后就执行来实现主从一致。

当 replication buffer 满了,会导致连接断开,删除缓存,从节点重新连接,重新开始全量复制

【结构】repl backlog buffer

增量同步,环形缓冲区,主节点记录近期的数据,(从节点重连后差距会放入replication buffer增量同步),一个主节点一个

当 repl backlog buffer 满了,因为是环形结构,会直接覆盖起始位置数据

【参数】repl-backlog-size

repl backlog buffer大小。

【参数】master_repl_offset

主节点接收写命令的进度信息。

【参数】slave_repl_offset

从节点复制写命令的进度信息。

replication offset = master_repl_offset - slave_repl_offset,能得到从节点和主节点间的复制进度差值。


主从数据安全

防止主节点失联的数据丢失

主节点失联被哨兵发现后,会推举新的主节点,但这过程中如果客户端还在给原主节点写入数据,原主节点会被降级为从节点并删除数据。

【参数】min-slaves-to-write x

主节点必须要有至少 x 个从节点连接,如果小于这个数,主节点会禁止写数据。


防止异步复制数据丢失

【参数】min-slaves-max-lag x

主从数据复制和同步的延迟不能超过 x 秒,如果主从同步的延迟超过 x 秒,主节点会禁止写数据。


哨兵机制

建立哨兵集群

【命令】redis-sentinel <.conf>

启动Sentinel哨兵

【配置】sentinel monitor <master-name> <ip> <redis-port> <quorum>

conf配置文件中设置哨兵所在集群的主节点、主节点IP、主节点端口、阈值quorum。哨兵通过主节点接入集群后通过主节点自带的__sentinel__:hello发布订阅频道发现其他哨兵并相互通信。

【命令】INFO

哨兵接入集群后向主节点发送INFO命令,主节点将从节点信息发送给哨兵,这样哨兵可以获取集群中所有主从节点的信息。

正常情况哨兵每隔10s发送一次INFO命令来检测集群的情况,当选举新的主节点后关键时期会每隔1s秒监控集群的情况。


节点下线

【命令】PING

哨兵会每隔1s给节点发送PING命令,主节点收到后会发生PONG,若主从节点超过规定时限未返回消息,哨兵判定节点主观下线

所谓主观,是指节点下线可能只是单个哨兵节点观测到的偶然现象,并不能确定节点是否故障。

【参数】down-after-milliseconds

规定时限,conf中设置

【参数】quorum

判定节点客观下线的阈值。 

所谓客观,当哨兵集群中多个哨兵(达到quorum阈值)认为节点确实下线,称为客观下线。


哨兵leader

如果是主节点下线,就必须进行主从切换,选出新的主节点。负责主持主从切换的哨兵,称为leader,相当于国家元首与政府首脑的关系。

【命令】is-master-down-by-addr

发现主节点主观下线的哨兵会发送该命令通知其他哨兵,让他们判断主节点是否的确下线,如果其他节点赞成下线的票数超过quorum阈值,该哨兵成为leader,负责主持主从切换相关事宜。

可能同时有多个哨兵发现主节点下线,此时就看谁手速快,其他节点只会投一次票,收到一次投票请求后就会拒绝再次投票。

每个leader候选哨兵都会先给自己一票,在哨兵实例也可能故障时,设置哨兵数量和quorum阈值就比较关键了。


主从故障转移

【参数】slave-priority

配置项,设置从节点的优先级。主节点下线,哨兵leader会在剩下的活从节点中选出新的主节点。依次考虑从节点的优先级slave-priority(越高)、复制进度slave_repl_offset(越接近master_repl_offset)、runID(越小)。

【命令】SLAVEOF no one

哨兵leader向选中的从节点发生该命令,提请他成为新的主节点,并每隔1s发送一次INFO命令检测集群的情况,确保该节点已顺利成为新的主节点。

【命令】SLAVEOF

哨兵leader勒令原属已下线的主节点的从节点重新成为新主节点的从节点。

哨兵会继续监视原主节点,待其重新上线后发送该命令使其成为新主节点的从节点。

主从切换过程中的重要事件信息会以发布订阅的模型同步给客户端,客户端可以时刻关注这些动态并及时变更读写节点的IP和端口

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值