主从复制
主从链(拓扑结构、主负责写,从负责读)
画了两张图来帮助理解
复制模式
-
全量复制:Master 全部同步到 Slave
-
部分复制:(只复制增量 主服务器有8个数据,从服务器有3个数据,只把那5个复制过来)Slave 数据丢失进行备份
问题点
-
同步故障
-
复制数据延迟(不一致)
-
读取过期数据(Slave 不能删除数据)
-
从节点故障
-
主节点故障
-
-
配置不一致
-
maxmemory 不一致:丢失数据
-
优化参数不一致:内存不一致.
-
-
避免全量复制
-
选择小主节点(分片)、低峰期间操作.
-
如果节点运行 id 不匹配(如主节点重启、运行 id 发送变化),此时要执行全量复制,应该配合哨兵和集群解决.
-
主从复制挤压缓冲区不足产生的问题(网络中断,部分复制无法满足),可增大复制缓冲区( rel_backlog_size 参数).
-
-
复制风暴
哨兵机制
拓扑图(来自网络)
一主二从三哨兵 每一个哨兵都监控着除了自己以外的所有节点
节点下线
-
主观下线
-
即 Sentinel 节点对 Redis 节点失败的偏见,超出超时时间认为 Master 已经宕机。
-
Sentinel 集群的每一个 Sentinel 节点会定时对 Redis 集群的所有节点发心跳包检测节点是否正常。如果一个节点在
down-after-milliseconds
时间内没有回复 Sentinel 节点的心跳包,则该 Redis 节点被该 Sentinel 节点主观下线。
-
举个例子:一个烧饼监控着主节点,但是他们之间的网络可能不太好,所以发生了超时,所以这个哨兵就认为这个主节点下线了;第二点很容易理解了,可以理解为redis的ping-pong,你没回应,我就认为你下线了。
-
客观下线
-
所有 Sentinel 节点对 Redis 节点失败要达成共识,即超过 quorum(这是个参数,可以理解为超过总数的一半?) 个统一。
-
当节点被一个 Sentinel 节点记为主观下线时,并不意味着该节点肯定故障了,还需要 Sentinel 集群的其他 Sentinel 节点共同判断为主观下线才行。
-
该 Sentinel 节点会询问其它 Sentinel 节点,如果 Sentinel 集群中超过 quorum 数量的 Sentinel 节点认为该 Redis 节点主观下线,则该 Redis 客观下线。
-
主观下线是一个哨兵节点认为你下线了,客观下线是所有节点都认为你下线了!!!之所以这样做是为了放在网络波动导致节点下线问题
Leader选举(这个leader哨兵的作用只是用来选出新的Redis Master,选出来以后就恢复平齐地位,原来的master节点恢复正常以后成为新的master的slava)
-
选举出一个 Sentinel 作为 Leader:集群中至少有三个 Sentinel 节点,但只有其中一个节点可完成故障转移.通过以下命令可以进行失败判定或领导者选举。
-
选举流程
-
每个主观下线的 Sentinel 节点向其他 Sentinel 节点发送命令,要求设置它为领导者.
-
收到命令的 Sentinel 节点如果没有同意通过其他 Sentinel 节点发送的命令,则同意该请求,否则拒绝。(只同意第一个)
-
如果该 Sentinel 节点发现自己的票数已经超过 Sentinel 集合半数且超过 quorum(一个参数),则它成为领导者。
-
如果此过程有多个 Sentinel 节点成为领导者,则等待一段时间再重新进行选举。
-