clustermeet

举报
周杰伦本人 发表于 2022/06/26 13:26:33 2022/06/26
【摘要】 clustermeet 数据结构 命令流程 总结 ❤️ 感谢大家 clustermeet今天是连续更文的第一天,给大家介绍一下reids的集群形成用到的命令clustermeet命令。Redis 集群的形成是通过CLUSTERMEET 命令完成的。CLUSTER MEET ip port 允许节点与ip和port指定的节点握手。如果握手成功,则两个节点组成一个集群。 数据结构要了解CLUS...

clustermeet

今天是连续更文的第一天,给大家介绍一下reids的集群形成用到的命令clustermeet命令。

Redis 集群的形成是通过CLUSTERMEET 命令完成的。

CLUSTER MEET ip port 允许节点与ip和port指定的节点握手。如果握手成功,则两个节点组成一个集群。

数据结构

要了解CLUSTER MEET命令的原理,需要知道集群模式下使用的数据结构,cluster.h中的clusterNode clusterLink clusterState。

clusterState记录了当前节点所考虑的集群的当前状态,clusterState有一个属性节点字典,记录了集群节点,字典的key为节点名,value为对应的集群节点。单词。

clusterNode 结构存储节点的当前状态。每个节点都使用clusterNode来记录自己的信息,clusterNode的链接属性是clusterLink结构,clusterLink结构中存放的是连接节点的信息。

typedef struct clusterLink {
    // 连接创建的时间
    mstime_t ctime;             /* Link creation time */
    // TCP连接的文件描述符
    int fd;                     /* TCP socket file descriptor */
    // 输出(发送)缓冲区
    sds sndbuf;                 /* Packet send buffer */
    // 输入(接收)缓冲区
    sds rcvbuf;                 /* Packet reception buffer */
    // 关联该连接的节点
    struct clusterNode *node;   /* Node related to this link if any, or NULL */
} clusterLink;

命令流程

知道了这一点,当客户端发送IP CLUSTER MEET 端口命令时,接收命令的节点与指定节点进行通信。具体来说

当前节点为指定节点创建一个clusterNode,并将创建的clusterNode添加到节点字典中。

当前节点根据自己的IP和端口向指定节点发送MEET消息。

指定节点收到命令后,创建集群节点,加入节点字典,返回PONG消息。

当前节点收到PONG消息后,就知道指定节点收到了消息,发送PING消息。

指定节点收到PING消息后,指定节点知道当前节点也收到了PONG消息,说明双方已经完成握手。

当前节点完成与指定节点的握手后,集群中的其他节点可以通过gossip协议与指定节点建立握手。

总结

这就是CLUSTERMEET命令的大体内容了,redis的集群大概就是使用这个命令来完成的。

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:

  1. 欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏
  2. 关注盼盼小课堂,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。