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;