Redis 为什么不';t哨兵订阅频道“__哨兵:“你好”;守望

Redis 为什么不';t哨兵订阅频道“__哨兵:“你好”;守望,redis,redis-sentinel,Redis,Redis Sentinel,当查看Redis的源代码时,我发现当sentinelRedisInstance是SRI_SENTINEL,SentinelReconnection不会初始化其链接->pc,也不会订阅频道“\u SENTINEL\uuuuuuo:hello”,如下代码所示 void sentinelReconnectInstance(sentinelRedisInstance *ri) { ... if ((ri->flags & (SRI_MASTER|SRI_SLAVE)) &

当查看Redis的源代码时,我发现当
sentinelRedisInstance
SRI_SENTINEL
SentinelReconnection
不会初始化其
链接->pc
,也不会订阅频道
“\u SENTINEL\uuuuuuo:hello”
,如下代码所示

void sentinelReconnectInstance(sentinelRedisInstance *ri) {
    ...

    if ((ri->flags & (SRI_MASTER|SRI_SLAVE)) && link->pc == NULL) {
    ...
            retval = redisAsyncCommand(link->pc,
                sentinelReceiveHelloMessages, ri, "%s %s",
                sentinelInstanceMapCommand(ri,"SUBSCRIBE"),
                SENTINEL_HELLO_CHANNEL);
    ...


因此,我认为哨兵无法从频道
“\uuuuuu sentinel\uuuu:hello”
获得任何消息

然而,在redis的网站上,它说

每个哨兵都订阅了发布/订阅频道哨兵:每个主控和副本的你好,寻找未知哨兵。当检测到新的哨兵时,它们将作为此主机的哨兵添加


我想这意味着所有的哨兵实际上都订阅了频道
“\uuuu sentinel\uuuu:hello”
,但我在redis的源代码中看不到任何相应的实现。

如果我错了,请纠正我

SRI\u MASTER类型的
sentinelRedisInstance
连接到该哨兵正在监视的主节点,
SRI\u SLAVE类型的
sentinelRedisInstance
连接到从节点,
SRI\u sentinel类型的
sentinelRedisInstance
连接到其他哨兵节点


不需要订阅sentinel的通道,相反,sentinel只需要订阅主节点和从节点的通道。如果有一个新的哨兵,它将发布hello消息到主和从的频道。因此,其他哨兵将发现它们。

您的意思是,对于主实例,它将建立到其监视的主节点的pc和cc链接,因此总共有2个链接。对于从属节点,也有2个。但是,对于sentinel实例,它将建立到所有其他主/从节点的
CountofAllothersEntinels
pc链接,以及到所有其他节点的
countOfAllOtherInstances
cc链接?是的,它为每个主节点和复制节点建立了2个链接如果我在这里没有错,我会与另一个问题混淆。因为在redis的源代码中说,如果5个哨兵监视100个主机,那么只有5个连接,而不是500个。但是我认为对于每个哨兵,它将为每个主机建立1个
cc
和1个
pc
,因此总共应该有2*100*5个连接。我认为评论描述的是哨兵之间的连接,而不是与主/从的连接。我仍然不知道如何在5个哨兵之间建立5个连接,我认为如果它们之间有一个cc连接,那么应该有
5*4/2=10
连接,而不是5个连接