简单搭建redis哨兵集群
配置参数说明
sentinel monitor mymaster 10.0.0.4 6379
指定对一个 master 的监控,给监控的 master 指定的一个名称。
sentinel down-after-milliseconds mymaster 60000
哨兵与 master 断开连接超过多少毫秒,就判定 master 主观宕机。
sentinel failover-timeout mymaster 180000
执行故障转移的超时时间。假设一个哨兵进行故障转移操作失败,在等待 failover-timeout 时间后,其他的哨兵会重新选举出一个进行故障转移操作。
sentinel parallel-syncs mymaster 1
主从切换后,同时有多少个 slave 被切换到去连接新 master,重新做同步。数字越小,花费的时间越多。
配置部署哨兵集群
- 创建 /etc/sentinel 文件夹,从 redis 安装目录下拷贝并重命名 sentinel.conf 文件为 5000.conf 到
/etc/sentinel 目录下; - 创建 /var/sentinel/5000 文件夹;
- 修改 5000.conf 配置文件部分内容,在 10.0.0.4,10.0.0.5,10.0.0.6,10.0.0.7 上执行如下所示操作,其中仅有 bind 需要修改为本机 IP;
port 5000
bind 10.0.0.4
dir /var/sentinel/5000
sentinel monitor mymaster 10.0.0.4 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
- 执行以下命令启动哨兵进程
redis-sentinel /etc/sentinal/5000.conf
检查哨兵状态
执行以下命令,查看哨兵状态:
redis-cli -h 10.0.0.4 -p 5000
[root@mq1 ~]# redis-cli -h 10.0.0.4 -p 5000
10.0.0.4:5000> sentinel master mymaster
1) "name"
2) "mymaster"
3) "ip"
4) "10.0.0.4"
5) "port"
6) "6379"
7) "runid"
8) "ec57362a7f568a1cbc48acf30c4130f7be0e4fb7"
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) "652"
19) "last-ping-reply"
20) "652"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "9809"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "411586"
29) "config-epoch"
30) "0"
31) "num-slaves"
32) "3"
33) "num-other-sentinels"
34) "3"
35) "quorum"
36) "2"
37) "failover-timeout"
38) "180000"
39) "parallel-syncs"
40) "1"
10.0.0.4:5000> sentinel slaves mymaster
1) 1) "name"
2) "10.0.0.6:6379"
3) "ip"
4) "10.0.0.6"
5) "port"
6) "6379"
7) "runid"
8) "7e698379fefb12b303b5be1642ae0a6d7d3c7e1c"
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) "14"
19) "last-ping-reply"
20) "14"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "902"
25) "role-reported"
26) "slave"
27) "role-reported-time"
28) "432844"
29) "master-link-down-time"
30) "0"
31) "master-link-status"
32) "ok"
33) "master-host"
34) "10.0.0.4"
35) "master-port"
36) "6379"
37) "slave-priority"
38) "100"
39) "slave-repl-offset"
40) "128023"
2) 1) "name"
2) "10.0.0.7:6379"
3) "ip"
4) "10.0.0.7"
5) "port"
6) "6379"
7) "runid"
8) "53c073e6eb00f3b3ee96ddf4f7ff5fd8e4d178d0"
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) "14"
19) "last-ping-reply"
20) "14"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "685"
25) "role-reported"
26) "slave"
27) "role-reported-time"
28) "432840"
29) "master-link-down-time"
30) "0"
31) "master-link-status"
32) "ok"
33) "master-host"
34) "10.0.0.4"
35) "master-port"
36) "6379"
37) "slave-priority"
38) "100"
39) "slave-repl-offset"
40) "128023"
3) 1) "name"
2) "10.0.0.5:6379"
3) "ip"
4) "10.0.0.5"
5) "port"
6) "6379"
7) "runid"
8) "0060685b3f9ec71e5f5b166b19205f7b98ef5686"
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) "14"
19) "last-ping-reply"
20) "14"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "902"
25) "role-reported"
26) "slave"
27) "role-reported-time"
28) "432846"
29) "master-link-down-time"
30) "0"
31) "master-link-status"
32) "ok"
33) "master-host"
34) "10.0.0.4"
35) "master-port"
36) "6379"
37) "slave-priority"
38) "100"
39) "slave-repl-offset"
40) "128023"
10.0.0.4:5000> sentinel sentinels mymaster
1) 1) "name"
2) "391453fb77847a564885f852135f8a3629788912"
3) "ip"
4) "10.0.0.6"
5) "port"
6) "5000"
7) "runid"
8) "391453fb77847a564885f852135f8a3629788912"
9) "flags"
10) "sentinel"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "338"
19) "last-ping-reply"
20) "338"
21) "down-after-milliseconds"
22) "30000"
23) "last-hello-message"
24) "95"
25) "voted-leader"
26) "?"
27) "voted-leader-epoch"
28) "0"
2) 1) "name"
2) "4448abe1ada002b7908ecb26a951391e2fb67808"
3) "ip"
4) "10.0.0.5"
5) "port"
6) "5000"
7) "runid"
8) "4448abe1ada002b7908ecb26a951391e2fb67808"
9) "flags"
10) "sentinel"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "338"
19) "last-ping-reply"
20) "338"
21) "down-after-milliseconds"
22) "30000"
23) "last-hello-message"
24) "270"
25) "voted-leader"
26) "?"
27) "voted-leader-epoch"
28) "0"
3) 1) "name"
2) "3007a4c9a6ab09bfecf3684985da8aa032a5dd46"
3) "ip"
4) "10.0.0.7"
5) "port"
6) "5000"
7) "runid"
8) "3007a4c9a6ab09bfecf3684985da8aa032a5dd46"
9) "flags"
10) "sentinel"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "338"
19) "last-ping-reply"
20) "338"
21) "down-after-milliseconds"
22) "30000"
23) "last-hello-message"
24) "323"
25) "voted-leader"
26) "?"
27) "voted-leader-epoch"
28) "0"
10.0.0.4:5000> sentinel master mymaster
1) "name"
2) "mymaster"
3) "ip"
4) "10.0.0.4"
5) "port"
6) "6379"
7) "runid"
8) "ec57362a7f568a1cbc48acf30c4130f7be0e4fb7"
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) "394"
19) "last-ping-reply"
20) "394"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "3866"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "94293"
29) "config-epoch"
30) "0"
31) "num-slaves"
32) "3"
33) "num-other-sentinels"
34) "3"
35) "quorum"
36) "2"
37) "failover-timeout"
38) "180000"
39) "parallel-syncs"
40) "1"
其中,sentinel master mymaster 是查看 master 哨兵状态,sentinel slaves mymaster 是查看 slave 哨兵状态,sentinel sentinels mymaster是查看哨兵集群状态。
其他配置
- 配置哨兵后台启动:需修改配置文件中的 daemonize 为 yes,然后重启哨兵。
- 设置哨兵开机自启:修改启动脚本 redis_6379,修改内容如下图所示:
踩坑记录
- 哨兵启动出现 +sdown master mymaster 10.0.0.4
因为 redis 设置了节点认证,所以此时在哨兵里面也是需要配置,即在哨兵配置文件中添加
sentinel auth-pass mymaster 【redis 认证密码】。 - ‘sentinel auth-pass mymaster redis-pass’ No such master with specified name
因为 sentinel auth-pass mymaster redis-pass 要配置在 sentinel monitor mymaster 10.0.0.4 6379 2 后,否则哨兵启动报如上错误。