目录
74.Redis 1主4从5哨兵,哨兵配置 quronum为2,如果3个哨兵故障,当主库宕机,哨兵能否判断主库“客观下线”?能否自动切换?
75.主库判定客观下线了,那么如何从剩余的从库中选择一个新的主库呢?
71.Redis哨兵是如何监控Redis集群的?
这是由哨兵向主库发送INFO命令来完成的。就像下图所示,哨兵2给主库发送INFO命令,主库接收到这个命令后,就会把从库列表返回给哨兵。接着,哨兵就可以根据从库列表中的连接信息,和每个从库建立连接,并在这个连接上持续地对从库进行监控。哨兵1和3可以通过相同的方法和从库建立连接。
72.Redis哨兵如何判断主库已经下线了呢?
首先要理解两个概念:主观下线和客观下线
主观下线:任何一个哨兵都可以监控探测,并作出Redis节点下线的判断。
客观下线:有哨兵集群共同决定Redis节点是否下线;
当某个哨兵(如下图中的哨兵2)判断主库“主观下线”后,就会给其他手柄发送is-master-down-by-addr命令。接着,其他哨兵会根据自己和主库的连接情况,作出Y或者N的响应,Y相当于赞成票,N相当于反对票。
如果赞成票数(这里是2)是大于等于哨兵配置文件中的quorum配置项(比如这里如果是qurorum=2),则可以判定主库客观下线了。
73.Redis哨兵的选举机制是什么样的?
为什么必然会出现选举/共识机制?
为了避免哨兵的单点情况发生,所以需要一个哨兵的分布式集群。作为分布式集群,必然设计共识问题(即选举问题);同时故障的转移和通知都只需要一个主的哨兵节点就可以了。
哨兵的选举机制是什么样的?
哨兵的选举机制其实很简单,就是一个raft选举算法:选举的票数大于等于Num(sentinel)/2+1将成为领导者,如果没有超过,继续选举。
任何一个香橙味Loader的哨兵,要满足两个条件:
第一,拿到半数以上的赞成票;
第二,拿到票数同时还需要大于等于哨兵配置文件中的quronum值。
以3个哨兵为例,假设此时的quorum设置为2,那么任何一个想成为Leader的哨兵只要拿到2张赞成票,就可以了。
74.Redis 1主4从5哨兵,哨兵配置 quronum为2,如果3个哨兵故障,当主库宕机,哨兵能否判断主库“客观下线”?能否自动切换?
经过实际测试:
1.当哨兵集群可以判定主库“主观下线”。由于quronum=2,所以当一个哨兵判断主库“主管下线”后,询问另外一个哨兵后也会得到同样的结果,2个哨兵都判定“主观下线”,达到了quorum的值,因此,哨兵集群可以判定主库为“客观下线”。
2.但哨兵不能完成主从切换。哨兵标记主库“客观下线”后,在选举“哨兵领导者”时,一个哨兵必须拿到超过多数的选票(5/2+1=3票)。但目前只有2个哨兵活着,无论怎么投票,一个哨兵最多只能拿到2票,永远无法达到N/2+1选票的结果。
75.主库判定客观下线了,那么如何从剩余的从库中选择一个新的主库呢?
过滤掉不健康的(下线或者断线),没有回复过哨兵ping响应的从节点。
选择slave-priority从节点优先级最高(redis.conf)的
选择复制偏移量最大,只复制最完整的从节点。