前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >项目实践,Redis集群技术学习(三)

项目实践,Redis集群技术学习(三)

作者头像
用户1289394
发布2022-02-15 15:52:42
3400
发布2022-02-15 15:52:42
举报
文章被收录于专栏:Java学习网

10.2.2 节点握手

节点握手是指一批运行在集群模式下的节点通过 Gossip 协议彼此通信,达到感知对方的过程。节点握手是集群彼此通信的第一步,由客户端发起命令:

cluster meet{ip}{port},如图 10-7 所示。

图中执行的命令是:cluster meet127.0.0.16380 让节点 6379 和 6380 节点进行握手通信。cluster meet 命令是一个异步命令,执行之后立刻返回。内部发起与目标节点进行握手通信,如图 10-8 所示。

1)节点 6379 本地创建 6380 节点信息对象,并发送 meet 消息。

2)节点 6380 接受到 meet 消息后,保存 6379 节点信息并回复 pong 消息。

3)之后节点 6379 和 6380 彼此定期通过 ping/pong 消息进行正常的节点通信。

这里的 meet、ping、pong 消息是 Gossip 协议通信的载体,之后的节点通信部分做进一步介绍,它的主要作用是节点彼此交换状态数据信息。6379 和 6380节点通过 meet 命令彼此建立通信之后,集群结构如图 10-9 所示。

对节点 6379 和 6380 分别执行 cluster nodes 命令,可以看到它们彼此已经感知到对方的存在。

127.0.0.1:6379> cluster nodes

cfb28ef1deee4e0fa78da86abe5d24566744411e 127.0.0.1:6379 myself,master - 0 0

0 connected

8e41673d59c9568aa9d29fb174ce733345b3e8f1 127.0.0.1:6380 master - 0 1468073534265

1 connected

127.0.0.1:6380> cluster nodes

cfb28ef1deee4e0fa78da86abe5d24566744411e 127.0.0.1:6379 master - 0 1468073571641

0 connected

8e41673d59c9568aa9d29fb174ce733345b3e8f1 127.0.0.1:6380 myself,master - 0 0

1 connected

下面分别执行 meet 命令让其他节点加入到集群中:

127.0.0.1:6379>cluster meet 127.0.0.1 6381

127.0.0.1:6379>cluster meet 127.0.0.1 6382

127.0.0.1:6379>cluster meet 127.0.0.1 6383

127.0.0.1:6379>cluster meet 127.0.0.1 6384

我们只需要在集群内任意节点上执行 cluster meet 命令加入新节点,握手状态

会通过消息在集群内传播,这样其他节点会自动发现新节点并发起握手流程。

最后执行 cluster nodes 命令确认 6 个节点都彼此感知并组成集群:

127.0.0.1:6379> cluster nodes

4fa7eac4080f0b667ffeab9b87841da49b84a6e4 127.0.0.1:6384 master - 0

1468073975551

5 connected

cfb28ef1deee4e0fa78da86abe5d24566744411e 127.0.0.1:6379 myself,master - 0 0 0

connected

be9485a6a729fc98c5151374bc30277e89a461d8 127.0.0.1:6383 master - 0

1468073978579

4 connected

40622f9e7adc8ebd77fca0de9edfe691cb8a74fb 127.0.0.1:6382 master - 0

1468073980598

3 connected

8e41673d59c9568aa9d29fb174ce733345b3e8f1 127.0.0.1:6380 master - 0

1468073974541

1 connected

40b8d09d44294d2e23c7c768efc8fcd153446746 127.0.0.1:6381 master - 0

1468073979589

2 connected

节点建立握手之后集群还不能正常工作,这时集群处于下线状态,所有的数据

读写都被禁止。通过如下命令可以看到:

127.0.0.1:6379> set hello redis

(error) CLUSTERDOWN The cluster is down

通过 cluster info 命令可以获取集群当前状态:

127.0.0.1:6379> cluster info

cluster_state:fail

cluster_slots_assigned:0

cluster_slots_ok:0

cluster_slots_pfail:0

cluster_slots_fail:0

cluster_known_nodes:6

cluster_size:0………

从输出内容可以看到,被分配的槽(cluster_slots_assigned)是 0,由于目前所有的槽没有分配到节点,因此集群无法完成槽到节点的映射。只有当 16384 个槽全部分配给节点后,集群才进入在线状态

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档