哨兵模式的定义:
是Redis的一种高可用解决方案,通过运行多个Redis实例来监控主从Redis实例的状态,当主实例出现故障时,哨兵会自动选举一个从实例作为新的主实例,从而保证系统的高可用性。哨兵模式可以监控多个主从Redis实例,并在主实例故障时自动进行故障转移,同时还可以对故障进行报警和通知。这种模式可以有效地提高Redis系统的可用性和稳定性。
主从复制中的缺点:
主从复制中主节点宕机了,还需要手工把另一台从节点提升为主节点,这样就不能实现真正的高可用。
上篇文章实现了一主两从的Redis集群,实现了一定程度上的高可用,相比于一个单节点的Redis有了很大的提升。
上篇文章的链接:http://t.csdnimg.cn/51cOU
实现故障的自动转移就是哨兵模式干的事。哨兵会以一个独立的进程运行再Redis集群中。用来监控Redis中的各个节点是否运行正常。
哨兵主要用来执行以下几个功能:
1. 监控:通过不断的发送命令来检查Redis节点是否正常。
2. 通知:如果发现某个节点出现了问题,那么哨兵就会通过发布订阅模式来通知其他节点。
3. 自动故障转移: 当主节点不能正常工作的时候,哨兵会开始一个自动故障转移的操作。他会将一个从节点升级为新的主节点,然后将其他从节点指向新的主节点 。
配置哨兵模式:
首先需要在Redis集群中添加一个哨兵节点,可以使用:
redis -sentinel
来启动哨兵节点。然后创建一个sentinel.cof配置文件。
在配置文件中添加一条语句。monitor后面的是主节点的名称,可以自己定义,最后那个1代表只需要一个哨兵节点同意就可以进行故障转移了。
接下来就可以启动哨兵节点了:
redis-sentinel sentinel.conf
通过上述语句启动一个哨兵节点。
启动完成之后就可以看到一个运行在26379端口的哨兵模式。
然后将6379端口的服务端终止(ctrl + c或者将终端×掉),来模拟主节点宕机的情况。
然后就会发现现在新的主节点的端口为6381。
再来查看6381这个端口的节点,发现他现在是主节点。
6380依然是从节点,他的主节点是6381。
最后有一点需要注意的是:
哨兵本身也是一个进程,自己也会有单节点故障的问题,所以在一般的生产环境会使用3个哨兵节点来保证高可用。这3个哨兵节点会通过选举的方式来选出一个领导者,然后由领导者来监控其他节点,如果领导者挂了,那么其他哨兵节点会重新选举出一个领导者。这样就可以保证哨兵节点的高可用了。
Redis中多个哨兵节点的选举是自动的。当主节点出现故障或不可达时,哨兵节点会自动进行选举,选举出新的主节点,并通知其他从节点切换到新的主节点上。这样可以保证系统的高可用性和故障恢复能力。哨兵节点之间会相互通信,通过投票来决定新的主节点,并在选举完成后自动更新配置,使得系统可以继续正常工作。