clustermeet
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的集群大概就是使用这个命令来完成的。
❤️ 感谢大家
如果你觉得这篇内容对你挺有有帮助的话:
- 欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏
- 关注
盼盼小课堂
,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。
- 点赞
- 收藏
- 关注作者
评论(0)