哨兵机制(Sentinel)
问题:
怎么实现高可用呢?第一个对于服务端来说,能够实现主从自动切换;第二个,对于客户端来说,如果发生了主从切换,它需要获取最新的master节点。
思路:
创建一台监控服务器来监控所有Redis服务节点的状态,比如,master节点超过一定时间没有给监控服务器发送心跳报文,就把master标记为下线,然后把某一个slave变成master,应用每一次都是从这个监控服务器拿到master的地址。
Sentinel原理
Redis的高可用是通过哨兵Sentinel来保证的。它的思路就是通过运行监控服务器来保证服务的可用性。
我们会启动奇数个的Sentinel的服务(通过src/redis-sentinel)
可以用sentinel的脚本启动,也可以用redis-server的脚本加sentinel参数启动:
./redis-sentinel ../sentinel.conf
#或者
./redis-server ../sentinel.conf --sentinel
它本质上只是一个运行在特殊模式之下的Redis,Sentinel通过info命令得到被监听Redis机器的master,slave等信息。
为了保证监控服务器的可用性,我们会对Sentinel做集群的部署。Sentinel既监控所有的Redis服务,Sentinel之间也相互监控。
注意:Sentinel本身没有主从之分,地位是平等的,只有Redis服务节点有主从之分。
问题:Sentinel唯一的联系,就是他们监控相同的master,那一个Sentinel节点是怎么知道其他的Sentinle节点存在的呢?
因