实现redis哨兵,模拟master故障场景

1.实验架构

在这里插入图片描述

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
# protected-mode no
bind 0.0.0.0  #添加的地方
# port <sentinel-port>
# The port that this sentinel instance will run on
port 26379

daemonize no   #正常版本修改为yes,后台运行,但是6.2.4启动不了,会自动关闭,必须要改为no才行。


pidfile "/apps/redis/run/redis-sentinel.pid"  #指定pid文件路径

logfile "/apps/redis/log/sentinel_26379.log"   #指定日志文件路径

dir /tmp

sentinel monitor mymaster 10.0.0.7  6379 2 #修改ip
...
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 # +sdown master mymaster 10.0.0.7 6379
20554:X 23 Jul 2022 23:50:14.353 # +new-epoch 1
20554:X 23 Jul 2022 23:50:14.356 # +vote-for-leader 8dfdc855fc3949309a1e4e1d880de1dfad5c5dd3 1
20554:X 23 Jul 2022 23:50:15.310 # +odown master mymaster 10.0.0.7 6379 #quorum 3/2
20554:X 23 Jul 2022 23:50:15.310 # Next failover delay: I will not start a failover before Sat Jul 23 23:56:15 2022
20554:X 23 Jul 2022 23:50:15.475 # +config-update-from sentinel 8dfdc855fc3949309a1e4e1d880de1dfad5c5dd3 10.0.0.27 26379 @ mymaster 10.0.0.7 6379
20554:X 23 Jul 2022 23:50:15.475 # +switch-master mymaster 10.0.0.7 6379 10.0.0.17 6379
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 # +sdown slave 10.0.0.7:6379 10.0.0.7 6379 @ mymaster 10.0.0.17 6379

#提升为主节点的从节点日志
[root@centos7:~]#
tail -f  /apps/redis/log/sentinel_26379.log
10346:X 23 Jul 2022 23:50:14.317 # +sdown master mymaster 10.0.0.7 6379
10346:X 23 Jul 2022 23:50:14.353 # +new-epoch 1
10346:X 23 Jul 2022 23:50:14.357 # +vote-for-leader 8dfdc855fc3949309a1e4e1d880de1dfad5c5dd3 1
10346:X 23 Jul 2022 23:50:14.371 # +odown master mymaster 10.0.0.7 6379 #quorum 3/2
10346:X 23 Jul 2022 23:50:14.372 # Next failover delay: I will not start a failover before Sat Jul 23 23:56:15 2022
10346:X 23 Jul 2022 23:50:15.477 # +config-update-from sentinel 8dfdc855fc3949309a1e4e1d880de1dfad5c5dd3 10.0.0.27 26379 @ mymaster 10.0.0.7 6379
10346:X 23 Jul 2022 23:50:15.477 # +switch-master mymaster 10.0.0.7 6379 10.0.0.17 6379
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 # +sdown slave 10.0.0.7:6379 10.0.0.7 6379 @ mymaster 10.0.0.17 6379

#仍然是主节点的日志
[root@centos7:~]#
tail -f  /apps/redis/log/sentinel_26379.log
9913:X 23 Jul 2022 23:50:14.289 # +sdown master mymaster 10.0.0.7 6379
9913:X 23 Jul 2022 23:50:14.342 # +odown master mymaster 10.0.0.7 6379 #quorum 2/2
9913:X 23 Jul 2022 23:50:14.342 # +new-epoch 1
9913:X 23 Jul 2022 23:50:14.342 # +try-failover master mymaster 10.0.0.7 6379
9913:X 23 Jul 2022 23:50:14.345 # +vote-for-leader 8dfdc855fc3949309a1e4e1d880de1dfad5c5dd3 1
9913:X 23 Jul 2022 23:50:14.356 # a970a9757ba57b6dfd793936b8397a3bf5d6f6cb voted for 8dfdc855fc3949309a1e4e1d880de1dfad5c5dd3 1
9913:X 23 Jul 2022 23:50:14.357 # e549971186fcf36e3f2b3510298e4503f1a21b9b voted for 8dfdc855fc3949309a1e4e1d880de1dfad5c5dd3 1
9913:X 23 Jul 2022 23:50:14.429 # +elected-leader master mymaster 10.0.0.7 6379
9913:X 23 Jul 2022 23:50:14.430 # +failover-state-select-slave master mymaster 10.0.0.7 6379
9913:X 23 Jul 2022 23:50:14.482 # +selected-slave 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.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 # +promoted-slave 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 # +failover-state-reconf-slaves master mymaster 10.0.0.7 6379
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 # -odown master mymaster 10.0.0.7 6379
9913:X 23 Jul 2022 23:50:16.506 # +failover-end master mymaster 10.0.0.7 6379
9913:X 23 Jul 2022 23:50:16.506 # +switch-master mymaster 10.0.0.7 6379 10.0.0.17 6379
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 # +sdown slave 10.0.0.7:6379 10.0.0.7 6379 @ mymaster 10.0.0.17 6379

3.原来主节点重启,默认的作为从节点加入集群。
[root@centos7:~/redis-6.2.4]#
systemctl restart redis
127.0.0.1:6379> info replication
# 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

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值