Sentinel向主服务和从服务器发送并接收信息

156 阅读2分钟

这是我参与11月更文挑战的第29天,活动详情查看:2021最后一次更文挑战

Sentinel向主服务和从服务器发送并接收信息

Sentinel每两秒一次的频率通过命令连接向所有被监视的主服务器和从服务器发送命令publish __sentinel__:hello "s_ip, s_port,s_runnid, s_epoch,m_name,m_ip, m_port, m_epoch

s开头的参数记录的是Sentinel本身信息,m是主服务器的信息

接收来自主服务器和从服务器的频道信息

当Sentinel与一个主服务器或者从服务器建立订阅连接之后,Sentinel通过订阅连接,向服务器发送以下命令:SUBSRIBE __sentinel__:hello

每个与Sentinel连接的服务器,Sentinel既通过命令连接向服务器的__sentinel__:hello频道发送信息,又通过订阅连接从服务器的__sentinel__:hello频道接收信息

对于监视同一个服务器的多个Sentinel,一个Sentinel发送的信息会被其他Sentinel接收到,这些信息会被用于更新其他Sentinel

更新Sentinels字典

Sentinel为主服务器创建的实例结构中的sentinels字典保存了除sentinel本身之外,所有同样监视这个主服务器的其他Sentinel信息,字典的键是ip:port 字典的值是键对应Sentinel的实例结构

Sentinel可以通过分析接收到的频道信息获知其他Sentinel的存在,并通过发送频道信息让其他Sentinel知道自己的存在,所以用在使用Sentinel时候不需要提供各个Sentinel地址信息,监视同一个服务器的多个Sentinel可以自动发现对方。

创建连向其他Sentinel的命令连接

当Sentinel通过频道信息发现一个新的Sentinel时,它不仅会为新Sentinel在sentinels字典创建相应的实例结构,还会创建一个连向新Sentinel的命令连接,新Sentinel同样会创建连向这个Sentinel命令连接,两个Sentinel互相连接,通过命令连接就能发现新的Sentinel,所以Sentinel之间不需要创建订阅连接。