官网说明:https://redis.io/docs/management/sentinel/
一、背景
Redis 主从复制模型在一定程度上解决了读写分离、容灾恢复、数据备份、水平扩容支撑高并发的问题,但仍存在单点故障问题,即 Mater 宕机后,集群将无法提供写服务。
二、方案原理
- 主从复制的问题在于 Mater 宕机后,Slave 不会取而代之。
- 引入 哨兵(sentinel) 角色,在后台监控 Mater 主机的健康状态,若 Mater 发生故障,根据哨兵投票数自动将一个 Slave 转换为 Mater,从而保证高可用。
哨兵作用:
- 主从监控:监控主从redis库运行是否正常
- 消息通知:哨兵可以将故障转移的结果发送给客户端
- 故障转移:master 宕机,自动根据投票数将 slave 切换为新 master
- 配置中心:客户端通过连接哨兵来获得当前Redis服务的主节点地址
三、方案部署
3.1. 环境准备
- 172.19.223.161(主) 端口:6379
- 172.19.223.162(从1) 端口:6380
- 172.19.223.163(从2) 端口:6381
- 172.19.223.164(哨兵1)端口:26379
- 172.19.223.165(哨兵2)端口:26380
- 172.19.223.166(哨兵3)端口:26381
3.2. 环境部署
3.2.1. 配置一主二从模式
在 172.19.223.161、172.19.223.161、172.19.223.163上执行。
参考:https://www.cnblogs.com/DeepInThought/p/18059921 中的 《3.3 一主二从(命令版》。
3.2.2. 安装sentinel
在 172.19.223.164、172.19.223.165、172.19.223.166上执行。
## 下载
mkdir -p /opt/package
wget https://github.com/redis/redis/archive/7.2.4.tar.gz
## 解压
tar -zxvf 7.2.4.tar.gz -C ../
cd /opt/redis-7.2.4
## 编译
make && make install
## 复制配置文件
cp /opt/redis-7.2.4/sentinel.conf /opt/redis-7.2.4/sentinel.conf.bak
## 配置 172.19.223.164:26379
vi /opt/redis-7.2.4/sentinel.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 23679
logfile "/home/redis/sentinel/23679.log"
pidfile /home/redis/sentinel/23679.pid
dir /home/redis/sentinel/
## redis6.2以上才会解析主机名,且默认不启用
sentinel resolve-hostnames yes
## 配置监听主服务器。mymaster:自定义服务名称;172.19.223.161:监控主服务器;6379:端⼝;2:两个或以上哨兵认为主服务器不可⽤时,才会进⾏failover操作。
sentinel monitor mymaster 172.19.223.161 6379 2
## 配置服务密码。mymaster:服务名称(与上一致),269527:Redis服务器密码
sentinel auth-pass mymaster 269527
## 超过5s未连接上 master,则认为 master 已宕机
sentinel down-after-milliseconds mymaster 5000
## 超过30000ms未完成 failover,则认为本次 failover 失败
sentinel failover-timeout mymaster 30000
:wq
## 配置 172.19.223.165:26380
vi /opt/redis-7.2.4/sentinel.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 23680
logfile "/home/redis/sentinel/23680.log"
pidfile /home/redis/sentinel/23680.pid
dir /home/redis/sentinel/
## redis6.2以上才会解析主机名,且默认不启用
sentinel resolve-hostnames yes
## 配置监听主服务器。mymaster:自定义服务名称;172.19.223.161:监控主服务器;6379:端⼝;2:两个或以上哨兵认为主服务器不可⽤时,才会进⾏failover操作。
sentinel monitor mymaster 172.19.223.161 6379 2
## 配置服务密码。mymaster:服务名称(与上一致),269527:Redis服务器密码
sentinel auth-pass mymaster 269527
## 超过5s未连接上 master,则认为 master 已宕机
sentinel down-after-milliseconds mymaster 5000
## 超过30000ms未完成 failover,则认为本次 failover 失败
sentinel failover-timeout mymaster 30000
:wq
## 配置 172.19.223.166:26381
vi /opt/redis-7.2.4/sentinel.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 23681
logfile "/home/redis/sentinel/23681.log"
pidfile /home/redis/sentinel/23681.pid
dir /home/redis/sentinel/
## redis6.2以上才会解析主机名,且默认不启用
sentinel resolve-hostnames yes
## 配置监听主服务器。mymaster:自定义服务名称;172.19.223.161:监控主服务器;6379:端⼝;2:两个或以上哨兵认为主服务器不可⽤时,才会进⾏failover操作。
sentinel monitor mymaster 172.19.223.161 6379 2
## 配置服务密码。mymaster:服务名称(与上一致),269527:Redis服务器密码
sentinel auth-pass mymaster 269527
## 超过5s未连接上 master,则认为 master 已宕机
sentinel down-after-milliseconds mymaster 5000
## 超过30000ms未完成 failover,则认为本次 failover 失败
sentinel failover-timeout mymaster 30000
:wq
3.2.3. 启动sentinel
## 在 172.19.223.164 上执行
./redis-server /opt/redis-7.2.4/sentinel.conf --sentinel
## 在 172.19.223.165 上执行
./redis-server /opt/redis-7.2.4/sentinel.conf --sentinel
## 在 172.19.223.166 上执行
./redis-server /opt/redis-7.2.4/sentinel.conf --sentinel
四. SpringBoot集成哨兵模式
## 配置文件示例
spring:
redis:
lettuce:
pool:
max-idle: 10 # 连接池中的最大空闲连接
max-wait: 500 # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
min-idle: 0 # 连接池中的最小空闲连接
sentinel:
master: mymaster
nodes:
- 172.19.223.164:26380
- 172.19.223.165:26381
- 172.19.223.166:26382
标签:mymaster,##,Redis,failover,redis,模式,172.19,sentinel
From: https://www.cnblogs.com/DeepInThought/p/18067155