实战案例:Redis主从复制架构及哨兵架构

151 阅读2分钟

环境准备

三台已经装好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

image.png

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

image.png

4.停止Master实现故障转移,原master重新加入Redis集群

手动关闭模拟主节点故障
[root@redis-master ~]# systemctl stop redis

从节点变为主节点 image.png

重新开启,模拟原来的主节点还原
[root@redis-master ~]# systemctl start redis

原来的主节点10.0.0.18变为了从节点,现在的主节点IP为10.0.0.19

image.png