Redis 为什么不';t哨兵订阅频道“__哨兵:“你好”;守望
当查看Redis的源代码时,我发现当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)) &
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个连接