redis高可用之集群
redis集群是redis提供的分布式数据库解决方案,集群通过分片来进行数据共享,并提供复制和故障转移功能。
1、节点
一个redis集群通常由多个节点组成,刚开始,每个节点都是相互独立的,他们处于一个只包含自己的集群当中,要组建一个真正可用的集群,我们必须将各个独立的节点连接起来。
redis集群的数据结构主要有三种,clusterNode、clusterLink、clusterState。
-
clusterNode
struct clusterNode { mstime_t ctime; char name[REDIS_CLUSTER_NAMELEN]; int flags; uint64_t configEpoch; char ip[REDIS_IP_STR_LEN]; int port; clusterLink *link; clusterState *state; unsigned char slots[16384/8]; int numslots; clusterNode *slaveof; list *fail_reports; }
ctime是节点创建时间;name是节点名称,由40个字符组成;flags是节点标识,使用不同的标识记录节点的角色(主节点或从节点)、节点目前所处的状态(在线或下线);configEpoch是节点当前的配置纪元,用于故障转移;ip是节点的ip;port是节点的端口号;link指针保存了节点的连接信息;state指针保存了在当前节点的视角下,集群目前所处的状态;slots记录了该节点处理哪些槽;numslots记录了该节点处理的槽的数量;slaveof是指向主节点的指针;fail_reports是一个保存了集群中的其他节点对该节点的下线报告。
-
clusterLink
struct clusterLink { mstine_t ctime; int fd; sds sndbuf; sds rcvbuf; clusterNode *node; }
ctime是连接建立时间;fd是