Redis集群-节点

作者: 于情于你 | 来源:发表于2020-08-24 07:58 被阅读0次

    节点

        一个集群由多个节点构成,最初每个节点都是独立的,每个节点都是一个集群。要创建一个真正可用的集群,我们需要把哥哥独立的节点连接起来。
    连接节点的命令:

    CLUSTER MEET <ip> <port>
    

        向一个node发送这个命令的时候,可以让node和指定ip port的节点握手。握手一旦成功,node节点就会将指定ip port的节点添加到节点当前所在的集群中。

    启动节点

        一个节点就是一个运行在集群模式下的Redis服务器,Redis服务器在启动时会根据cluster-enabled配置选项是否为yes来决定是否开启服务器的集群模式。


    image.png
    集群的数据结构

    每个节点都会使用一个clusterNode结构来记录自己的状态:


    image.png

        link属性是一个clusterLink结构,该结构保存了连接节点所需的有关信息,比如套接字描述符,输入缓冲区和输出缓冲区。


    image.png
        最后,每个节点都保存着一个clusterState结构,这个结构记录了当前节点的视角下,集群所处的状态。比如集群是在线还是下线等。
    image.png
    Cluster MEET命令的实现
    CLUSTER MEET <ip> <port>
    

        假如收到命令的节点A和节点B进行握手:
    1)节点A会为节点B创建一个clusterNode结构,并将该结构添加到自己的clusterState.nodes字典里面。
    2)之后,节点A将根据CLUSTER MEET命令给定的IP地址和端口号,向节点B发送一条 MEET消息(message)。
    3)如果一切顺利,节点B将接收到节点A发送的MEET消息,节点B会为节点A创建一个clusterNode结构,并将该结构添加到自己的clusterState.nodes字典里面。
    4)之后,节点B将向节点A返回一条 PONG 消息。
    5)如果一切顺利,节点A将接收到节点B返回的PONG消息,通过这条PONG消息节点A可以知道节点B已经成功地接收到了自己发送的 MEET消息。
    6)之后,节点A将向节点B返回一条PING消息。
    7)如果一切顺利,节点B将接收到节点A返回的PING消息,通过这条PING消息节点B可以知道节点A已经成功地接收到了自己返回的PONG 消息,握手完成。


    image.png

        之后,节点A会将节点B的信息通过Gossip协议传播给集群中的其他节点,让其他节点也与节点B进行握手,最终,经过一段时间之后,节点B会被集群中的所有节点认识。

    相关文章

      网友评论

        本文标题:Redis集群-节点

        本文链接:https://www.haomeiwen.com/subject/cxnijktx.html