背景
使用主从复制是使redis达到高可用的前提,但是如果主节点真的宕机了,从节点升为主节点,需要修改应用方的主节点地址,还要所有的从节点再重新连接新的主节点,这一系列操作如果手工去执行的话是不科学的。所以Sentinel就很好的解决了这个问题。
Sentinel高可用原理
Sentinel中文叫哨兵,顾名思义是独立于节点服务器之外的监控节点,每个Sentinel节点会对所有的数据节点进行监控,当发现节点断开连接时,会对节点加下划线标识。如果标识的是主节点,那么Sentinel会跟其他的Sentinel节点协商,当大多数的哨兵节点都认为主节点不可达时,就选举出一个Sentinel节点去完成故障转移工作。同时将这个变化通知给redis的应用方。
基本操作
先上一张架构图
![](https://img.haomeiwen.com/i18757688/32a302d77836b9e6.png)
部署1主2从节点
首先配置好一主多从的机制,主从配置的过程参考上一篇文章主从复制的使用姿势
部署Sentinel节点
redis配置文件中sentinel.conf是独立的配置文件,基本配置如下,配置三台,端口不同就好
// Sentinel节点的端口
port 26379
dir /var/redis/data/
logfile "26379.log"
// 当前Sentinel节点监控 127.0.0.1:6379 这个主节点
// 2代表判断主节点失败至少需要2个Sentinel节点节点同意
// mymaster是主节点的别名
sentinel monitor mymaster 127.0.0.1 6379 2
//每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒且没有回复,则判定不可达
sentinel down-after-milliseconds mymaster 30000
//当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel parallel-syncs mymaster 1
//故障转移超时时间为180000毫秒
sentinel failover-timeout mymaster 180000
启动sentinel可以有两种方式:
- redis-sentinel redis-sentinel.conf
-
redis-server redis-sentinel.conf --sentinel
三个节点部署后结构如下所示
image.png
现在到主节点上shutdown,关闭主节点服务器,可以看到在30秒后,sentinel监控的主节点变更
![](https://img.haomeiwen.com/i18757688/7ae66ae579f1d478.png)
![](https://img.haomeiwen.com/i18757688/dbe2e2352a1a548b.png)
网友评论