6.redis节点之间的通信


通信流程

 这里要说说redis集群中redis各个节点是怎样通信的。

 在分布式存储中需要提供维护节点元数据信息的机制,所谓元数据是指:节点负责哪些数据,是否出现故障等状态信息。常见的元数据维护方式分为:集中式和P2P方式,redis集群采用P2P的Gossip(流言)协议,

 Gossip协议工作原理就是节点彼此不断通信交换信息,一段时间后所有的节点都会知道集群完整的信息,这种方式类似流言传播。

  通信过程说明:

  1)集群中的每一个节点都会单独开辟一个TCP通道,用于节点之间彼此通信,通信端口号在基础端口上加10000.

  2)每个节点在固定周期内通过特定规则选择几个节点发送ping消息

  3)接受到ping消息的节点用pong消息作为响应。

  集群中每个节点通过一定规则挑选要通信的节点,每个节点可能知道全部节点,也可能仅知道部分节点,只要这些节点彼此可以正常通信,最终它们会达到一致的状态。当节点出故障、新节点加入、主从角色变化、槽信息变更等事件发生时,通过不断的ping/pong消息通信,经过一段时间后所有的节点都会知道整个集群全部节点的最新状态,从而达到集群状态同步的目的。

Gossip消息

  Gossip协议的主要职责就是信息交换。信息交换的载体就是节点彼此发送Gossip消息

  常用的Gossip消息可分为:ping消息、pong消息、meet消息、fail消息等。它们通信模式如下所示:

  .meet消息:用于通知新节点加入。消息发送者通知接收者加到当前集群,meet消息通信正常完成后,接受节点会加入到集群中并进行周期性的ping、pong消息交换。

  .ping消息:集群内交换最频繁的消息,集群内每个节点每秒向多个其他节点发送ping消息,用于检测节点是否在线和交换彼此状态信息。ping消息发送封装了自身节点和部分其他节点的状态数据。

  .pong消息:当接受到ping、meet消息时,作为响应消息回复给发送方确认消息正常通信。pong消息内部封装了自身状态数据。节点也可以向集群内广播自身的pong消息来通知整个集群对自身状态进行更新。

  .fail消息:当节点判定集群内另一个节点下线时,会向集群内广播一个fail消息,其它节点接受到fail消息之后把对应节点更新为下线状态。

  当接受到ping、meet消息时,接受节点会解析消息内容并根据自身的识别情况做出相应处理。对应的流程如下:

  未完。。后续在说