redis集群

yang0cs 2020-06-28

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

相关推荐