Redis配置哨兵模式
主从复制模式,它是属于 Redis
多机运行的基础,但这种模式本身存在一个致命的问题,当主节点奔溃之后,需要人工干预才能恢复 Redis
的正常使用。
我们需要一个自动的工具——Redis Sentinel
(哨兵模式)来把手动的过程变成自动的,让 Redis
拥有自动容灾恢复(failover
)的能力。
哨兵就相当于对主从服务器做一个监视的任务。一旦发现主服务器宕机了,就迅速启动相应的规则将某一台从服务器升级为主服务器,无需人工干预,更稳定更快。
Redis Sentinel
的最小分配单位是一主一从。
生产环境我们不会只启动一台 Sentinel
,因为如果启动一台 Sentinel
假如它不幸宕机的话,就不能提供自动容灾的服务了,不符合我们高可用的宗旨,所以我们会在不同的物理机上启动多个 Sentinel
来组成 Sentinel
集群,来保证 Redis
服务的高可用。
1、下载安装
cd /use/local
# 创建存放redsi文件夹
mkdir redis
# 下载
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
# 解压
tar -zxvf redis-6.2.6.tar.gz
mv redis-6.2.6 redis-6
cd redis-6/src
#指定安装到目录
make PREFIX=/usr/local/redis/redis-6 install
2、修改配置
redis.conf
# 后台启动
daemonize yes
# 远程连接
bind 0.0.0.0
3、哨兵配置
1、复制出三份redis.conf和sentinel.conf
# 创建存放文件夹
cd /usr/local/redis
mkdir 7001 7002 7003
cd /usr/local/redis/redis-6
cp redis.conf /usr/local/redis/7001
cp redis.conf /usr/local/redis/7002
cp redis.conf /usr/local/redis/7003
cp sentinel.conf /usr/local/redis/7001
cp sentinel.conf /usr/local/redis/7002
cp sentinel.conf /usr/local/redis/7003
2、修改主节点配置文件
修改主节点配置redis.conf(7001)
cd /usr/local/redis/7001
vim redis.conf
# 修改端口号
port 7001
修改sentinel.conf
###普通配置
port 27001
# 保护模式关闭,这样其他服务起就可以访问此台redis
protected-mode no
# 哨兵模式是否后台启动,默认no,改为yes
daemonize yes
pidfile /var/run/redis-sentinel.pid
# log日志保存位置
logfile /usr/local/redis/sentinel/redis-sentinel.log
# 工作目录
dir /usr/local/redis/sentinel
###核心配置
# 核心配置。
# 第三个参数:哨兵名字,可自行修改。(若修改了,那后面涉及到的都得同步)
# 第四个参数:master主机ip地址
# 第五个参数:redis端口号
# 第六个参数:哨兵的数量。比如2表示,当至少有2个哨兵发现master的redis挂了,
# 那么就将此master标记为宕机节点。
# 这个时候就会进行故障的转移,将其中的一个从节点变为master
sentinel monitor mymaster 192.168.101.123 7001 2
# master中redis的密码
sentinel auth-pass mymaster 123456
# 哨兵从master节点宕机后,等待多少时间(毫秒),认定master不可用。
# 默认30s,这里为了测试,改成10s
sentinel down-after-milliseconds mymaster 10000
# 当替换主节点后,剩余从节点重新和新master做同步的并行数量,默认为 1
sentinel parallel-syncs mymaster 1
# 主备切换的时间,若在3分钟内没有切换成功,换另一个从节点切换
sentinel failover-timeout mymaster 180000
vim sentinel.conf
#修改port
port 27001
#开启守护线程
daemonize yes
#sentinel monitor <master-group-name> <ip> <port> <quorum>
#master-group-name是集群名称 quorum是需要同意主节点不可用的Sentinel的数量
sentinel monitor mymaster 192.168.101.123 7001 2
#主节点密码,如果有
#sentinel auth-pass <master-name> <password>
3、修改从节点配置文件
修改从节点配置redis.conf(7002、7003)
cd /usr/local/redis/7002
vim redis.conf
#修改port(7002、7003)
port 7002
#主从复制 replicaof <masterip> <masterport>
replicaof 192.168.101.123 7001
#主节点密码 masterauth <master-password>
#masterauth 主节点密码
修改sentinel.conf(27002、27003)
vim sentinel.conf
#修改port(27002、27003)
port 27002
#开启守护线程
daemonize yes
#sentinel monitor <master-group-name> <ip> <port> <quorum>
#master-group-name是集群名称 quorum是需要同意主节点不可用的Sentinel的数量
sentinel monitor mymaster 192.168.101.123 7001 2
#主节点密码,如果有
#sentinel auth-pass <master-name> <password>
4、启动哨兵模式
/usr/local/redis/redis-6/bin
# 分别启动主从节点
./redis-server ../../7001/redis.conf
./redis-server ../../7002/redis.conf
./redis-server ../../7003/redis.conf
# sentinel启动(Windows启动命令 redis-server.exe sentinel.conf --sentinel)
./redis-sentinel ../../7001/sentinel.conf
./redis-sentinel ../../7002/sentinel.conf
./redis-sentinel ../../7003/sentinel.conf
5、测试哨兵模式
分别连接查看角色信息
./redis-cli -p 7001
127.0.0.1:7001> info
role:master
./redis-cli -p 7002
127.0.0.1:7002> info
role:slave
./redis-cli -p 7003
127.0.0.1:7003> info
role:slave
6、spring boot配置文件
spring:
redis:
sentinel:
master: mymaster
nodes:
- 192.168.101.123:27001
- 192.168.101.123:27002
- 192.168.101.123:27003
# password: 123321
# 连接超时时间
timeout: 60s
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 0
# 连接池中的最大空闲连接
max-idle: 8
# 连接池的最大数据库连接数
max-active: 8
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1m