redis哨兵都干了什么
redis哨兵是一个运行的特殊的redis进程,他主要有三个使命:
- 监控
- 选主
- 通知
监控的是什么
哨兵主要是监听主库和从库是否存活,怎么进行监控? 哨兵会定期的给从库发送PING命令,如果从库没有在设定的时间内回复哨兵,那么就会认为从库下线了。哨兵也会定期的给主库发送PING命令进行通信,如果主库也没有在设定的时间内回复哨兵,那么就会认为主库也“下线了”。【注意我这里只是为了说明下监控的方式,真正判断的主库下线不是这样的】。
看图说话:
可以看到图中redis-2 slave 是灰色,表示已经down掉了,此时并没有正常返回给哨兵响应,所以被标记为下线状态了。
主库的监控
这里为什么要单独来说下主库的监控呢?因为主库监控,不能说哨兵没有收到PING的响应,那么就认为主库就下线了,因为主库的选举是一个很复杂的过程,会有耗时和通信的开销,所以我们不能简单认为哨兵没有收到PING的响应,那么就直接判断主库下线了,然后就进行选举,如果是从库可以的,因为从库下线了,对于主从集群来说,影响不会很大。
在主库压力比较大,或者网络阻塞了,出现抖动了,这个是并没有在设定的时间内回复给哨兵响应,那么此时武断的认为主库"下线了",此时就出现了误判,明明不需要进行选主,不需要进行通知,此时白白浪费的资源、同时带来了开销。
看图说话:
在网络畅通的情况下,哨兵发了一个PING给主库
此时网络阻塞,变成了红色,PONG,没有在设定的时间内返回
网络恢复顺畅,哨兵重试,在设定的时间内返回响应