8

我已将 redis 配置为具有两个从属设备的主设备,每个从设备位于一个单独的盒子上。我还在每个盒子上运行了一个哨兵进程。这是此处文档中描述的设置:

http://redis.io/topics/sentinel#example-2-basic-setup-with-three-boxes

每个哨兵都可以连接到我的主人,并且可以看到奴隶。他们能够独立检测主设备或从设备是否出现故障。问题是哨兵无法检测到彼此。

我已经验证每个哨兵都__sentinel__:hello按预期向频道发布消息,但似乎他们都没有真正接收来自其他人的消息。

我如何让哨兵看到对方?

4

2 回答 2

20

在配置哨兵时,我配置了一次哨兵,然后将该配置文件复制到所有其他人。

在复制配置之前,我必须启动 sentinel 并使用如下 id 重新编写配置文件:

sentinel myid c766a0df56e72eda48cea984

当我将文件复制到其他哨兵时,它导致它们中的每一个都具有相同的 id,这反过来又导致它们忽略来自具有相同 id 的自动发现的任何消息。从每个配置文件中删除 myid 行并重新启动每个哨兵进程解决了这个问题。

于 2016-06-25T23:39:45.890 回答
0

在所有 redis-sentinel.conf 文件中具有相同myid的文件是一个问题,但即使我的 id 不同,我也遇到了问题(runid 在哨兵主控 mymaster 结果中显示“”)

我的问题源于我的哨兵方式绑定到本地主机(127.0.0.1)和私有(或公共)IP

我相信发现的 IP 是 127.0.0.1(因为它是配置中的第一个),因此对于接收消息的其他哨兵来说,这意味着其他哨兵与自己相同(即使它有不同的 myid )

文档说:

在将新哨兵添加到主服务器之前,哨兵始终检查是否已经存在具有相同 runid相同地址(ip 和端口对)的哨兵。在这种情况下,所有匹配的哨兵都将被删除,并添加新的哨兵。

将绑定命令设置sentinel announce-ip <ip>或删除到 127.0.0.1 解决了这个问题。

于 2020-04-15T21:54:12.190 回答