天天看点

Redis集群消息

Redis集群消息

  redis群集的消息有五种。

  

1. PING消息

  此消息用于检测节点是否在线。 群集中的每个节点从列表中随机选择五个节点并发送PING消息

2. MEET消息

  MEET消息是客户端发送CLUSTER MEET ip port命令,接收该命令的节点向命令中的ip主机和port主机发送MEET消息,以使该主机加入群集

3. PONG消息

  PONG消息是指在收到MEET或PING消息后,向发件人发送PONG消息以确认收到了发件人的消息。 当一个节点从从节点成为主节点时,该节点可以通过PONG消息更新其它节点对节点的感知。

  这是cluster.h上的clusterMsgData,这是消息的主体

union clusterMsgData {
    /* PING, MEET and PONG */
    struct {
        /* Array of N clusterMsgDataGossip structures */
        clusterMsgDataGossip gossip[1];
    } ping;

    /* FAIL */
    struct {
        clusterMsgDataFail about;
    } fail;

    /* PUBLISH */
    struct {
        clusterMsgDataPublish msg;
    } publish;

    /* UPDATE */
    struct {
        clusterMsgDataUpdate nodecfg;
    } update;
};
           

从结构体可以看到这三个消息是由clusterMsgDataGossip构成的

  

4.发布消息

  当节点接收到PUBLISH命令时,节点在运行该命令的同时向集群广播PUBLISH消息,从而使其他节点也运行该命令。

  clusterMsgDataPublish的结构体

typedef struct {
    // 频道名长度
    uint32_t channel_len;
    // 消息长度
    uint32_t message_len;
    /* We can't reclare bulk_data as bulk_data[] since this structure is
     * nested. The 8 bytes are removed from the count during the message
     * length computation. */
    // 消息内容
    unsigned char bulk_data[8];
} clusterMsgDataPublish;
           

5.故障消息

  当一个主节点确定另一个主节点处于脱机状态时,故障消息会向群集广播故障消息,以通知另一个节点该节点已脱机。

 

typedef struct {
    // 故障节点的名字
    char nodename[CLUSTER_NAMELEN];
} clusterMsgDataFail;
           

总结

继续阅读