Sentinel哨兵机制是对Redis集群的一个监听,本身支持集群。
它可以管理一个以上的Redis集群,当某一个Master节点故障时,每一个哨兵节点如果达到一致认为该节点故障,则会选举出哨兵master,将故障节点的某一个从节点提升为master,其它slave节点监听新master节点,原先master节点降为slave节点。
sentinel节点会每秒ping主节点、从节点、Sentinel节点状态。
选择从节点方法有四步:
1、过滤掉不健康(主观下线,断线)的、5秒内没有响应、与主节点创新超过down-after-miliseseconds*10秒的,如果没有则继续。
2、选择slave-priority(从节点优先级)最高的从节点,如果没有则继续。
3、选择复制偏移量最大(复制最完整,数据最全的)的从节点,如果没有则继续
4、选择runid最小的节点
一般redis集群有两种实施方案:
1、一个哨兵集群监听一个redis master。
- 该方案由于使用了一个哨兵集群,在管理上比较方便。
2、一个哨兵集群监听一个以上的redis master。
- 该 方案由于使用了两个以上的哨兵集群,相互之间隔离,但会带来维护开销和资源浪费的问题。
哨兵机制是使用了redis自的slave机制,每一个slave节点监听master节点实现高可用,同时slave节点还支持读,如果有读写分离需求可以采用该方案。
哨兵节点的数量直接决定了对redis master故障判断的准确性,至少要求三个节点。