Redis sentinel并没有自动发现其他哨兵

时间:2016-06-25 23:39:46

标签: redis redis-sentinel

我将redis配置为master,有两个从属设备,每个设备都在一个单独的盒子上。我还在每个盒子上运行了一个哨兵进程。它是这里文档中描述的设置:

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

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

我已经确认每个哨兵都按预期向__sentinel__:hello频道发布了一条消息,但似乎没有一个实际上是从其他频道接收消息。

如何让哨兵相互见面?

2 个答案:

答案 0 :(得分:8)

在配置标记时,我配置了一次sentinel,然后将该配置文件复制到其他所有标记上。

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

sentinel myid c766a0df56e72eda48cea984

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

答案 1 :(得分:0)

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

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

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

文档说:

在将新的哨兵添加到母版之前,Sentinel始终检查是否已经存在具有相同 相同地址(ip和端口对)的哨兵。在这种情况下,将删除所有匹配的标记,并添加新的标记。

设置sentinel announce-ip <ip>或将bind命令删除为127.0.0.1可以解决此问题。