redis主从架构
-
判断节点宕机
首先哨兵会判断master是否宕机,这里有两个状态,分别是sdown(主观宕机)和odown(客观宕机)。sdown就是一个哨兵认为master宕机,当哨兵ping一个master,并且超过了is-master-down-after-milliseconds参数配置的时间之后没有响应,就认为是sdown,之后如果一个哨兵在指定时间之内,收到了quorum指定数量的其他哨兵也认为master为sdown,那么哨兵就会达成一个共识,就是odown,认为master客观宕机了
当哨兵集群认为master的状态为odown,就需要选举出一个哨兵来做切换,这个哨兵还得得到majority哨兵的授权,才能正式执行切换,majority的意思就是大多数,即(哨兵总数/2) + 1
如果quorum < majority,比如5个哨兵,majority就是3,quorum设置为2,那么就3个哨兵授权就可以执行切换;但是如果quorum >= majority,那么必须quorum数量的哨兵都授权,比如5个哨兵,quorum是5,那么必须5个哨兵都同意授权,才能执行切换 -
从节点过滤
淘汰掉不合适的节点,如果slave跟master断开连接已经超过了down-after-milliseconds参数的10倍,外加master宕机的时长,那么slave就被认为不适合选举为master,因为断开连接的时间太久,跟master中的数据相差较大 - <