Redis 缓存之五

哨兵的介绍

  1. 主要功能

    (1)集群监控,负责监控Redis master和slave进程是否运行正常node

    (2)消息通知,若是某一个Redis出现故障,那么哨兵将负责发送消息做为报警通知管理员网络

    (3)故障转移,若是某一个Redis实例出现故障,会自动转移到slave node上(故障转移时,判断一个master node是否宕机了,须要大部分的哨兵赞成才行,应为哨兵也是分布式的)异步

    (4)配置中心,若是故障转移发生了,通知client客户端新的master地址,哨兵自己也是分布式的,做为一个哨兵集群去运行,互相协同工)分布式

  2. 哨兵的核心知识

    (1)哨兵须要最少3个实例,来保证本身的健壮性测试

    (2)哨兵+Redis的主从部署结构,是不能保证数据零丢失的,只能保证Redis集群的高可用性code

    (3)对于哨兵+Redis的主从部署结构,尽可能在生产和测试环境都作足充分的测试才行进程

  3. 为何哨兵必须晒2个节点以上才能正常工做

    若是哨兵只有一个,此时就没有majority来容许故障转移了部署

哨兵切换致使数据丢失

(1)异步复制致使数据丢失同步

异步复制致使数据丢失的缘由是master——》slave的复制是异步的,因此有可能有一部分数据尚未来得及复制到slave,master就已经宕机了,此时这些数据就会丢失。

(2) 脑裂致使的数据丢失it

也就是说,某一个master所在的机器忽然断开了网络链接,根其余的slave机器链接不上,可是实际上这时候master还活着,可是哨兵认为master已经宕机了,而后开始选举,将其余的slave选举为master,这个时候集群里就会有两个master,可是client可能尚未切换到新的master,还继续写向旧的master的数据可能也会丢失,所以旧的master再次回复的时候,会被做为一个新的slave挂在到新的master上去,本身的数据就会被清空,从新重新的master复制数据

解决数据丢了是的两个配置

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

(1) 一旦slave复制数据和ack延时太长,就认为可能master宕机后损失的数据太多了,那么就拒绝写请求,这样就能够把master宕机时的部分数据未同步到slave致使丢失的数据下降到可控的范围以内。

(2)若是不能继续给指定数量的slave发送数据,并且slave超过10秒没有给本身的ack消息,那么直接拒绝客户端的写请求,这样脑裂后的旧master就不会接受新的数据,也就避免了数据丢,上面的配置也就确保了,若是跟任何一个slave丢失了链接,在10秒后发现没有slave给本身ack,那么就拒绝新的请求,所以在脑裂的状况之下,就会丢失10秒的数据。

相关文章
相关标签/搜索