redis哨兵

哨兵的作用就是监控主数据库和从数据库是否宕机,当主数据库出现故障的时候,会先将从数据库转换成主数据库,将其故障恢复后,成为新主数据库的从数据库

redis-sentinel /etc/redis-sentinel.conf

当主数据库出现故障后,哨兵对主数据库进行判断,判断其是否客观下线,如果客观下线,则开始进行领头哨兵的选择

领头哨兵的选择:

哨兵A发现主数据库发生故障,这时他认为主数据库主观下线,他会询问其他的从数据库,如果有超过半数以上的哨兵认为主数据库主观下线,则A会认为主数据库客观下线。

当他发现主数据库客观下线之后,会向每个哨兵发送命令,要求对方选自己成为领头哨兵,如果目标哨兵没有选择其他哨兵,则会选择A为领头哨兵,如果有超过半数的哨兵选择A为领头哨兵,则A会成为领头哨兵。

当有多个哨兵同事选择成为领头哨兵的时候,可能会出现没选择出领头哨兵 的可能,这时会需要判断:

1.slave-priority(每个从数据库可以有他自己的配置文件)优先级高的成为领头哨兵

2.如果优先级相同,则会选择偏移量比较大的,也就是复制的比较全的

3.再不行,就选择哨兵ID小的


每个哨兵会和所有的数据库建立两条连接,会和其他的所有哨兵建立一条连接

这时,他会执行三步:

1.每隔10秒,会向主数据库和从数据库发送INFO命令。作用是获得数据库的信息,监控是否有新的从数据库进来

2.每隔2秒,会向__sentinel__:hello发送自己的信息。作用是当其他的哨兵接收到消息之后,会判断这个哨兵是否是新的哨兵,如果是,加入哨兵列表,并建立连接

3.每隔1秒,会想主数据库和从数据库发送一条ping命令,监控这个数据库。sentinel down-after-millseconds mymaster 毫秒数

这个命令的作用是,每隔多长时间向数据库发送ping命令,如果这个毫秒数超过一秒,按照一秒算。

当有数据库超过时间没有回复,则哨兵认为该数据库主观下线,如果是主数据库,则会考虑是否对其进行故障恢复,哨兵发送SENTINEL is-master-down-by-addr命令询问其他的哨兵,如果有超过半数的哨兵认为其是主观下线,则该哨兵会认为该主数据库是客观下线,这时就需要对其执行故障恢复,接下来就是选择领头哨兵

你可能感兴趣的:(redis)