1、背景
- 集群中的每个节点都需要专门的数据结构来存储集群的状态和自身信息。
- 分为
clusterNode
和 clusterState
结构:
–clusterNode
记录了集群中的单个节点的状态
– clusterState
记录集群所有节点作为一个整体的状态
2、clusterNode结构
typedef struct clusterNode {
mstime_t ctime;
char name[REDIS_CLUSTER_NAMELEN];
char ip[REDIS_IP_STR_LEN];
int port;
int flags;
uint64_t configEpoch;
unsigned char slots[16384/8];
int numslots;
…………
} clusterNode;
clusterNode
结构保存了 一个节点的当前状态,包括创建时间、节点 id、ip 和端口号等。- 每个节点都会用一个
clusterNode
结构记录自己的状态,并为集群内所有其他节点都创建一个 clusterNode
结构来记录节点状态。
3、clusterState
clusterState
结构保存了在当前节点视角下,集群所处的状态。- 除下列代码展示外,
clusterState
还包括故障转移、槽迁移等需要的信息
typedef struct clusterState {
clusterNode *myself;
uint64_t currentEpoch;
int state;
int size;
dict *nodes;
clusterNode *slots[16384];
…………
} clusterState;