Redis篇1-高可用之-哨兵

184 阅读2分钟

Redis里面引入了哨兵,主要是为了提高集群的高可用,容错和监控机制,下面我们看看哨兵的作用吧

1.sentinal中文是哨兵,哨兵是redis集群中很重要的角色 主要功能如下:

  • 集群监控,监控redis的master和slave是否工作正常
  • 消息通知:如果有个节点挂了,可以通知管理员
  • 故障转移:如果master挂了,会自动转移到slave node
  • 配置中心:如果故障转移发生了,通知client新的master地址

哨兵本身也是分布式的,可以作为一个集群去运行 1)故障转移的时候判断一个节点master node宕机了,需要大部分哨兵统一,涉及到选举 2)即使部分节点挂了,哨兵集群还是能够运行

2.哨兵必须至少三个实例保证健壮性

必须大于n/2 + 1哨兵同意,才能故障转移,所以必须是至少三个

3.哨兵复制过程导致数据丢失问题

4.哨兵脑裂数据丢失问题

脑裂就是说master node突然脱离正常网络,不能和其他机器通信了,但是他没有挂,这时候setinal集群就会选举新的master将其他slave选举为master,这时候集群中就有两个master了,这就是所谓的脑裂。这时候虽然slave选举为了master,但是client可能没来得及切换,还往老的master写数据,当老的master连接上集群后,回作为一个新slave那么它的数据就会被清空,从新的master同步数据,数据就丢失了。

5.解决复制丢失数据和脑裂问题 解决上面问题需要开启参数:

min-slaves-to-write 1
min-slaves-max-log 10

1)减少min-slaves-max-lag这个配置:一旦slave和ack时间延迟了,就认为master宕机后,损失数据过多,拒绝写请求,最大限度减少master未同步到slave的数据范围。
2)如果一个master出现了脑裂,跟其他slave丢了连接,那么上面配置确保如果不能继续给指定数量的slave发送数据,而且slave超过10s没有给自己ack,那么就拒绝写请求,这样脑裂的master就不会写数据,也不会丢失,上面配置了10s,最多丢失10s数据。