环境准备
三台已经装好redis的机器,redis版本为6.2.5
10.0.0.18 master
10.0.0.19 slave1
10.0.0.20 slave2
1.哨兵需要先实现主从复制
哨兵的前提是已经实现了Redis的主从复制
注意: master 的配置文件中masterauth 和slave 都必须相同
所有主从节点的 redis.conf 中关键配置
#在所有主从节点执行
[root@centos8 ~]vim /apps/redis/etc/redis.conf
bind 0.0.0.0
masterauth "123456"
requirepass "123456"
#在所有从节点执行
[root@centos8 ~]#echo "replicaof 10.0.0.18 6379" >> /apps/redis/etc/redis.conf
#在所有主从节点执行
[root@centos8 ~]#systemctl restart redis
2.编辑哨兵配置
#如果是编译安装,在源码目录有sentinel.conf,复制到安装目录即可,如:/apps/redis/etc/sentinel.conf
[root@centos8 ~]#cp redis-6.2.5/sentinel.conf /apps/redis/etc/sentinel.conf
[root@centos8 ~]#chown redis.redis /apps/redis/etc/sentinel.conf
[root@centos8 ~]#vim /apps/redis/etc/redis-sentinel.conf
bind 0.0.0.0
port 26379
daemonize no
pidfile "/var/run/redis-sentinel.pid"
logfile "/var/log/redis/sentinel.log"
dir "/tmp"
sentinel monitor mymaster 10.0.0.18 6379 2 #修改此行
sentinel auth-pass mymaster 123456 #增加此行
sentinel down-after-milliseconds mymaster 3000 #修改此行
#注意此行自动生成必须唯一,一般不需要修改,如果相同则修改此值需重启redis和sentinel服务
sentinel myid 50547f34ed71fd48c197924969937e738a39975b
[root@redis-master ~]#scp /apps/redis/etc/redis-sentinel.conf 10.0.0.19:/apps/redis/etc/
[root@redis-master ~]#scp /apps/redis/etc/redis-sentinel.conf 10.0.0.20:/apps/redis/etc/
3.启动哨兵服务
#如果是编译安装,可以在所有节点生成新的service文件
[root@redis-master ~]#vim /lib/systemd/system/redis-sentinel.service
[Unit]
Description=Redis
Sentinel After=network.target
[Service]
ExecStart=/apps/redis/bin/redis-sentinel /apps/redis/etc/sentinel.conf -- supervised systemd
ExecStop=/bin/kill -s QUIT $MAINPID
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
#注意所有节点的目录权限,否则无法启动服务
[root@redis-master ~]#chown -R redis.redis /apps/redis/
#确保每个哨兵主机myid不同,如果相同,必须手动修改为不同的值
[root@redis-slave1 ~]#vim /apps/redis/etc/redis-sentinel.conf
sentinel myid 50547f34ed71fd48c197924969937e738a39975c
[root@redis-slave2 ~]#vim /apps/redis/etc/redis-sentinel.conf
sentinel myid 50547f34ed71fd48c197924969937e738a39975d
[root@redis-master ~]#systemctl enable --now redis-sentinel.service
[root@redis-slave1 ~]#systemctl enable --now redis-sentinel.service
[root@redis-slave2 ~]#systemctl enable --now redis-sentinel.service
4.停止Master实现故障转移,原master重新加入Redis集群
手动关闭模拟主节点故障
[root@redis-master ~]# systemctl stop redis
从节点变为主节点
重新开启,模拟原来的主节点还原
[root@redis-master ~]# systemctl start redis
原来的主节点10.0.0.18变为了从节点,现在的主节点IP为10.0.0.19