我正在尝试在 3 节点 redis 集群中设置自动故障转移系统。我在每个节点上安装了 redis-sentinel(就像这个人一样:http ://www.symantec.com/connect/blogs/configuring-redis-high-availability )。只要我有两个或三个节点,一切都很好。问题是,只要只剩下一个节点并且它是一个从节点,它就不会自动被选为主节点。quorum 设置为 1,因此最后一个节点检测到 master 的故障,但由于没有多数,因此无法投票支持故障转移。
为了克服这个(令人惊讶的)问题,我编写了一个小脚本,询问其他节点的主节点,如果他们不回答,我将当前节点设置为主节点。这个脚本在 redis-sentinel.conf 文件中被调用,作为一个通知脚本。但是……只要启动了redis-sentinel服务,这个配置就被“抹掉”了!如果我查看 /etc 中的配置文件,“sentinel notification-script”行已经消失(redis-sentinel 重写了它的配置文件,为什么不这样做)但是我写的配置不再可用:
1) 1) "name"
2) "mymaster"
3) "ip"
4) "x.x.x.x"
5) "port"
6) "6379"
7) "runid"
8) "somerunid"
9) "flags"
10) "master"
11) "pending-commands"
12) "0"
13) "last-ping-sent"
14) "0"
15) "last-ok-ping-reply"
16) "395"
17) "last-ping-reply"
18) "395"
19) "down-after-milliseconds"
20) "30000"
21) "info-refresh"
22) "674"
23) "role-reported"
24) "master"
25) "role-reported-time"
26) "171302"
27) "config-epoch"
28) "0"
29) "num-slaves"
30) "1"
31) "num-other-sentinels"
32) "1"
33) "quorum"
34) "1"
35) "failover-timeout"
36) "180000"
37) "parallel-syncs"
38) "1"
这是 sentinel-masters 命令的结果。唯一的问题是,我之前将“毫秒后停机”设置为 5000,将“故障转移超时”设置为 10000 ...
不知道有没有人遇到过类似的情况?好吧,如果有人对正在发生的事情有一点了解,我会很高兴的;)