redis集群
1.复制
第一次进行全量复制,即将主服务器的数据通过rdb保存起来,然后复制到从服务器中,以后通过sync命令不断复制主服务器执行的命令来完成数据的同步。
复制命令,slaveof <master_ip> <master_port>
2.Sentinel
哨兵模式,通过redis-sentinel命令将一个redis服务器启动为哨兵,
启动过程 初始化服务器, 替换sentinel代码,初始化sentinel状态,根据配置文件初始化监视的服务器列表,创建向主服务器的连接,
sentinel数据结构
struct sentinelState{ unint64_t current_epoch; dict *masters; int tilt; int running_scripts; mstime_t previous_time; list *scripts_queue; }sentinel;
typedef struct sentinelRedisInstance{
int flags;
char *name;
char *runid;
unint64_t config_epoch;
sentinelAddr *addr;
mstime_t down_after_period;
int quorum;
int role;
}sentinelRedisInstance;
sentinel启动完成后会连接其他sentinel,然后选出一个主sentinel,当主sentinel故障时会自动选出新的主机。
3.集群
首先服务器要以集群的形式启动,然后执行cluster meet <ip> <port>,连接指定的主机,
cluster nodes查看集群中的节点状态
然后要分配slots
节点A会为节点B创建一个clusterNode结构,并将该结构添加到自己的nodes字典中。
发送cluster meet命令
节点B在收到消息后也会创建一个clusterNode结构
节点B向节点A返回pong命令。
可以通过cluster keyslot <key>来查看槽的id