4.集群完整性检查
集群完整性指所有的槽都分配到存活的主节点上,只要 16384 个槽中有一个没有分配给节点则表示集群不完整。可以使用 redis-trib.rb check 命令检测之前创建的两个集群是否成功,check 命令只需要给出集群中任意一个节点地址就可以完成整个集群的检查工作,命令如下:
redis-trib.rb check 127.0.0.1:6379
redis-trib.rb check 127.0.0.1:6481
当最后输出如下信息,提示集群所有的槽都已分配到节点:
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Redis.3 节点通信
Redis.3.1 通信流程
在分布式存储中需要提供维护节点元数据信息的机制,所谓元数据是指:节点
负责哪些数据,是否出现故障等状态信息。常见的元数据维护方式分为:集中
式和 P2P 方式。Redis 集群采用 P2P 的 Gossip(流言)协议,Gossip 协议
工作原理就是节点彼此不断通信交换信息,一段时间后所有的节点都会知道集
群完整的信息,这种方式类似流言传播
通信过程说明:
1)集群中的每个节点都会单独开辟一个 TCP 通道,用于节点之间彼此通信,
通信端口号在基础端口上加 10000。
2)每个节点在固定周期内通过特定规则选择几个节点发送 ping 消息。
3)接收到 ping 消息的节点用 pong 消息作为响应。
集群中每个节点通过一定规则挑选要通信的节点,每个节点可能知道全部节
点,也可能仅知道部分节点,只要这些节点彼此可以正常通信,最终它们会达
到一致的状态。当节点出故障、新节点加入、主从角色变化、槽信息变更等事
件发生时,通过不断的 ping/pong 消息通信,经过一段时间后所有的节点都会知道整个集群全部节点的最新状态,从而达到集群状态同步的目的。