centos stream 9 redis 哨兵
前言
一、服务器准备
个人准备了三台服务器(虚拟机)
虚拟机名称 | IP地址 | Redis版本 |
---|---|---|
虚拟机1 | 192.168.243.134 | redis7.2(主) |
虚拟机2 | 192.168.243.133 | redis7.2(从) |
虚拟机3 | 192.168.243.135 | redis7.2(从) |
二、redis 配置(配置文件sentinel.conf)
sentinel monitor mymaster 127.0.0.1 6379 2 #2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作
sentinel down-after-milliseconds mymaster 30000 #这个是超时的时间(单位为毫秒)。当你去 ping 一个机器的时候,多长时间后仍 ping 不通,那么就认为它是有问题
sentinel parallel-syncs mymaster 1 #当 Sentinel 节点集合对主节点故障判定达成一致时, Sentinel 领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作, parallel-syncs 就是用来限制在一次故障转移之后,每次向新的主节点发起复制操作的从节点个数,指出 Sentinel 属于并发还是串行。1代表每次只能 复制一个,可以减轻 Master 的压力
sentinel auth-pass <master-name> <password> #如果 Sentinel 监控的主节点配置了密码,sentinel auth-pass 配置通过添加主节点的密码,防止 Sentinel 节点对主节点无法监控
sentinel failover-timeout mymaster 180000 #表示故障转移的时间
sentinel parallel-syncs mymaster 1 #指定了在发生failover master/slave切换时,最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成故障转移所需的时间就越长,但越大就意味着越多的从服务器因为复制而不可用,对网络要求较高,一般设置为1
sentinel notification-script <master-name> <script-path> #当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本,这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信息
sentinel client-reconfig-script <master-name> <script-path> #当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master地址已经发生改变的信息
三.启动哨兵
redis-sentinel /etc/redis/sentinel.conf #sentinel.conf 文件的存放位置
[root@localhost ~]# redis-cli -p 26379 #链接哨兵
127.0.0.1:26379> sentinel masters #显示被监控的所有master 以及他们的状态
1) 1) "name"
2) "mymaster"
3) "ip"
4) "192.168.243.134"
5) "port"
6) "6379"
7) "runid"
8) "a3e3044972fa751194813083ca3b1c1934f3885e"
9) "flags"
10) "master"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "501"
19) "last-ping-reply"
20) "501"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "2492"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "1909978"
29) "config-epoch"
30) "0"
31) "num-slaves"
32) "0"
33) "num-other-sentinels"
34) "2"
35) "quorum"
36) "2"
37) "failover-timeout"
38) "180000"
39) "parallel-syncs"
40) "1"
127.0.0.1:26379> sentinel slaves mymaster (列车主节点的所有从节点以及他们的状态)
1) 1) "name"
2) "192.168.243.133:6379"
3) "ip"
4) "192.168.243.133"
5) "port"
6) "6379"
7) "runid"
8) "716e94a7b006416be8e283e90e053829044e8b81"
9) "flags"
10) "slave"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "636"
19) "last-ping-reply"
20) "636"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "444"
25) "role-reported"
26) "slave"
27) "role-reported-time"
28) "381756"
29) "master-link-down-time"
30) "0"
31) "master-link-status"
32) "ok"
33) "master-host"
34) "192.168.243.134"
35) "master-port"
36) "6379"
37) "slave-priority"
38) "100"
39) "slave-repl-offset"
40) "102098"
41) "replica-announced"
42) "1"
127.0.0.1:26379> sentinel get-master-addr-by-name mymaster #查看当前主服务器的ip和端口
1) "192.168.243.133"
2) "6379"
127.0.0.1:26379> info
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.243.133:6379,slaves=2,sentinels=3 #2个slaves;3个sentinels
127.0.0.1:26379> sentinel remove mymaster #放弃对主节点的监听,需要从新进行配置后开始监听
OK
四.测试故障转移
[root@localhost ~]# systemctl stop redis.service #停止主节点redis
127.0.0.1:26379> sentinel master mymaster
1) "name"
2) "mymaster"
3) "ip"
4) "192.168.243.133" (ip 从134变成133)
5) "port"
6) "6379"
7) "runid"
8) "716e94a7b006416be8e283e90e053829044e8b81"
9) "flags"
10) "master"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "334"
19) "last-ping-reply"
20) "334"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "3305"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "194788"
29) "config-epoch"
30) "1"
31) "num-slaves"
32) "2"
33) "num-other-sentinels"
34) "2"
35) "quorum"
36) "2"
37) "failover-timeout"
38) "180000"
39) "parallel-syncs"
40) "1"