我将redis配置为master,有两个从属设备,每个设备都在一个单独的盒子上。我还在每个盒子上运行了一个哨兵进程。它是这里文档中描述的设置:
http://redis.io/topics/sentinel#example-2-basic-setup-with-three-boxes
每个哨兵都可以连接到我的主人,可以看到奴隶。他们能够独立检测主设备或从设备是否发生故障。问题是哨兵无法互相发现。
我已经确认每个哨兵都按预期向__sentinel__:hello
频道发布了一条消息,但似乎没有一个实际上是从其他频道接收消息。
如何让哨兵相互见面?
答案 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可以解决此问题。