1.实验架构
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/534973a7886ff99576ae21198b450311.png)
2.配置一主两从环境
1.一键编译安装redis6.2.4
具体方法:详见https://blog.csdn.net/aa896517050/article/details/125955201
2.在所有主从节点执行,
[root@centos7:~]
sed -i -e 's/bind 127.0.0.1/bind 0.0.0.0/' -e 's/^# masterauth.*/masterauth 123456/' -e 's/^# requirepass .*/requirepass 123456/' /apps/redis/etc/redis.conf
3.在所有从节点执行,主节点可以不用配replicaof 10.0.0.7 6379
[root@centos7:~]
echo "replicaof 10.0.0.8 6379" >> /etc/redis.conf
4.所有从节点启动redis
[root@centos7:~]
systemctl enable --now redis
3.实现哨兵(每台主机相同操作)
1.源码编译需要拷贝sentinel.conf文件到/apps/redis/etc/下,yum安装直接在/etc/之下。
[root@centos7:~]
cd redis-6.2.4
[root@centos7:~/redis-6.2.4]
cp sentinel.conf /apps/redis/etc/redis-sentinel.conf
2.修改配置文件sentinel.conf
[root@centos7:~/redis-6.2.4]
vim /apps/redis/etc/redis-sentinel.conf
bind 0.0.0.0
port 26379
daemonize no
pidfile "/apps/redis/run/redis-sentinel.pid"
logfile "/apps/redis/log/sentinel_26379.log"
dir /tmp
sentinel monitor mymaster 10.0.0.7 6379 2
...
sentinel auth_pass mymaster 123456
...
sentinel down-after-milliseconds mymaster 3000
...
acllog-max-len 128
...
sentinel parallel-syncs mymaster 1
...
sentinel failover-timeout mymaster 180000
...
sentinel deny-scripts-reconfig yes
...
SENTINEL resolve-hostnames no
...
SENTINEL announce-hostnames no
...
3.检查结果
[root@centos7:~/redis-6.2.4]
grep -Ev "^#|^$" /apps/redis/etc/redis-sentinel.conf
bind 0.0.0.0
port 26379
daemonize no
pidfile "/apps/redis/run/redis-sentinel.pid"
logfile "/apps/redis/log/sentinel_26379.log"
dir /tmp
sentinel monitor mymaster 10.0.0.7 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 3000
acllog-max-len 128
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
SENTINEL resolve-hostnames no
SENTINEL announce-hostnames no
3.一定要修改权限,否则redis-sentinel.conf无权限,无法启动。因为移动过来的root权限,不是redis权限。sentinel_26379.log日志也查不了,
[root@centos7:~/redis-6.2.4]
chown -R redis.redis /apps/redis/ (每个节点都要执行)
4.制作sentinel的service文件(每台主机)
[root@centos7:~/redis-6.2.4]
vim /lib/systemd/system/redis-sentinel.service
[Unit]
Description=Redis Sentinel
After=network.target
[Service]
ExecStart=/apps/redis/bin/redis-sentinel /apps/redis/etc/redis-sentinel.conf --supervised systemd
ExecStop=/bin/kill -s QUIT $MAINPID
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
5.重启主机(每台主机)
[root@centos7:~/redis-6.2.4]
systemctl enable --now redis-sentinel
6.检查启动情况
[root@centos7:~/redis-6.2.4]
ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 511 *:26379 *:*
LISTEN 0 511 *:6379 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 511 [::1]:6379 [::]:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 100 [::1]:25 [::]:*
4.模拟故障并检测结果
1.主节点模拟故障
127.0.0.1:6379> shutdown
2.查看日志
[root@centos7:~]
tail -f /apps/redis/log/sentinel_26379.log
20554:X 23 Jul 2022 23:50:14.203
20554:X 23 Jul 2022 23:50:14.353
20554:X 23 Jul 2022 23:50:14.356
20554:X 23 Jul 2022 23:50:15.310
20554:X 23 Jul 2022 23:50:15.310
20554:X 23 Jul 2022 23:50:15.475
20554:X 23 Jul 2022 23:50:15.475
20554:X 23 Jul 2022 23:50:15.475 * +slave slave 10.0.0.27:6379 10.0.0.27 6379 @ mymaster 10.0.0.17 6379
20554:X 23 Jul 2022 23:50:15.475 * +slave slave 10.0.0.7:6379 10.0.0.7 6379 @ mymaster 10.0.0.17 6379
20554:X 23 Jul 2022 23:50:18.493
[root@centos7:~]
tail -f /apps/redis/log/sentinel_26379.log
10346:X 23 Jul 2022 23:50:14.317
10346:X 23 Jul 2022 23:50:14.353
10346:X 23 Jul 2022 23:50:14.357
10346:X 23 Jul 2022 23:50:14.371
10346:X 23 Jul 2022 23:50:14.372
10346:X 23 Jul 2022 23:50:15.477
10346:X 23 Jul 2022 23:50:15.477
10346:X 23 Jul 2022 23:50:15.477 * +slave slave 10.0.0.27:6379 10.0.0.27 6379 @ mymaster 10.0.0.17 6379
10346:X 23 Jul 2022 23:50:15.477 * +slave slave 10.0.0.7:6379 10.0.0.7 6379 @ mymaster 10.0.0.17 6379
10346:X 23 Jul 2022 23:50:18.503
[root@centos7:~]
tail -f /apps/redis/log/sentinel_26379.log
9913:X 23 Jul 2022 23:50:14.289
9913:X 23 Jul 2022 23:50:14.342
9913:X 23 Jul 2022 23:50:14.342
9913:X 23 Jul 2022 23:50:14.342
9913:X 23 Jul 2022 23:50:14.345
9913:X 23 Jul 2022 23:50:14.356
9913:X 23 Jul 2022 23:50:14.357
9913:X 23 Jul 2022 23:50:14.429
9913:X 23 Jul 2022 23:50:14.430
9913:X 23 Jul 2022 23:50:14.482
9913:X 23 Jul 2022 23:50:14.482 * +failover-state-send-slaveof-noone slave 10.0.0.17:6379 10.0.0.17 6379 @ mymaster 10.0.0.7 6379
9913:X 23 Jul 2022 23:50:14.544 * +failover-state-wait-promotion slave 10.0.0.17:6379 10.0.0.17 6379 @ mymaster 10.0.0.7 6379
9913:X 23 Jul 2022 23:50:15.415
9913:X 23 Jul 2022 23:50:15.415
9913:X 23 Jul 2022 23:50:15.473 * +slave-reconf-sent slave 10.0.0.27:6379 10.0.0.27 6379 @ mymaster 10.0.0.7 6379
9913:X 23 Jul 2022 23:50:16.443 * +slave-reconf-inprog slave 10.0.0.27:6379 10.0.0.27 6379 @ mymaster 10.0.0.7 6379
9913:X 23 Jul 2022 23:50:16.444 * +slave-reconf-done slave 10.0.0.27:6379 10.0.0.27 6379 @ mymaster 10.0.0.7 6379
9913:X 23 Jul 2022 23:50:16.506
9913:X 23 Jul 2022 23:50:16.506
9913:X 23 Jul 2022 23:50:16.506
9913:X 23 Jul 2022 23:50:16.506 * +slave slave 10.0.0.27:6379 10.0.0.27 6379 @ mymaster 10.0.0.17 6379
9913:X 23 Jul 2022 23:50:16.506 * +slave slave 10.0.0.7:6379 10.0.0.7 6379 @ mymaster 10.0.0.17 6379
9913:X 23 Jul 2022 23:50:19.508
3.原来主节点重启,默认的作为从节点加入集群。
[root@centos7:~/redis-6.2.4]
systemctl restart redis
127.0.0.1:6379> info replication
role:slave
master_host:10.0.0.17
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:431717
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:fa3a0489ac02dfcb7ad477e60ad35ba026d64d11
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:431717
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:428218
repl_backlog_histlen:3500
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/38ed7fcf79b78cf6ac30c9555665bd24.png)