redis的哨兵机制简单问题
哨兵机制:
redis哨兵机制的核心功能:
1.监控
2.故障转移
3.通知
sentinel是一个单独的进程。这三个哨兵进程会监控现有的redis master和slave节点(监控:这些进程之间也会建立TCP长连接,通过长连接,定期发送心跳包)
可以通过监控来检查,主机是否挂掉。如果主机挂掉,哨兵就会发挥作用(这里的需要多个哨兵都确定主节点挂了,才能判定主节点挂了,否则会误判),主节点确定挂了,这时哨兵就会推选一出一个leader,由这个leader负责从现有的从节点中,挑选一个作为新的主节点。下一步,挑选出新的主节点之后,哨兵节点,就会自动控制该被选中的主节点,执行slaveof no one,并且控制其他的从节点,修改slaveof到这个新选的主节点。下一步,哨兵节点就会通知客户端程序,告知新的主节点是谁,并且后续客户端进行写操作时,就会针对新的主节点进行操作。
哨兵节点个数最好也要是奇数个。
哨兵重新选取主节点的流程:
1.主观下线:单个哨兵节点通过心跳包,判定redis服务器是否正常工作。如果心跳包没有如约而至,说明redis服务器挂了。
2.客观下线:当多个哨兵节点都通过心跳包,发现主节点挂了,哨兵们就会认为这个主节点是客观下线了。
3.让哨兵节点选出一个leader,由这个leader在从节点中选一个作为主节点。
每个哨兵都有1票,可以投给自己和其他哨兵节点。
当哨兵1知道主节点挂了之后,立马投给自己1票,哨兵2和哨兵3也会投给哨兵1,此时哨兵1就成为了leader。
4.选出了leader之后,需要挑选出一个从节点,作为新的主节点。
如何挑选呢?
1.优先级,每个redis数据节点,都会在配置文件中,有一个优先级的设置,slave-priority
优先级高的从节点,就会被优先选上。
2.offset,偏移量,offset大的就优先选上。因为offset大的,同步的数据的进度,数值就越大,说明从节点的数据和主节点就越接近。
3.run id 每个redis节点启动时,随机生成一串数字。(选择也是随机的选择)
注意:
哨兵节点不能只有一个,否则哨兵节点挂了也会影响系统可用性。
哨兵节点最好是奇数个,方便选举leader,得票数更容易超过半数。
哨兵+主从复制提高了可用性,不能解决“极端情况下,数据丢失”的问题。
哨兵+主从不能提高数据的储存容量。(可以交给集群)