Redis-cluster 高可用集群部署

1,727 阅读3分钟

我们知道,Redis总共分四种架构:单机、主从、哨兵、集群,本篇文章主要讲解集群架构;
先来一张 Redis-cluster 架构图:

集群搭建步骤:
启动节点:将节点以集群方式启动,此时节点是独立的。
节点握手:将独立的节点连成网络。
槽指派:将16384个槽位分配给主节点,以达到分片保存数据库键值对的效果。
主从复制:为从节点指定主节点。

由图可知,集群中包含多个小集群,每个小集群都是主从架构,当主节点挂掉后,它的从节点会自动进行故障转移,升级为主节点;(一个大集群中,最少需要包含三个小集群)

往集群中存数据,如何确定保存到哪台主节点呢?
上图可知,每个小集群中主节点都会分配一定范围的槽位,表示只有在该范围的数据才可以存进来,比如:set hello world,需要计算 Key 值hello的槽位,用来确定存入哪个主节点中,Redis规定,集群中槽位总数必须为16384
上图中,set hello worldhello的槽位值为866,集群中第一个主节点槽位范围为:0-5461,所以直接存入第一台主节点中;

下面演示搭建过程(四个一主一从的小集群组合为一个大集群):
首先创建八个文件夹,每一个文件夹都是一个Redis实例,每一个实例中都有一个redis.conf配置文件:

redis.conf 需要修改的配置:
基本配置:port、pidfile、logfile、dir
集群配置:cluster-enabled、cluster-config-file、cluster-node-timeout、cluster-replica-validity-factor、cluster-migration-barrier、cluster-require-full-coverage、luster-replica-no-failover
最后记得 :wq 保存
现在每个文件夹下都有各自对应的 redis.conf 文件:

我们先来启动六个redis实例:
此时无法向任何一个redis写入数据,因为各个redis实例还没有相互关联,也没有分配槽位
接下来,通过一条命令,使各个节点相互认识,分配主从,配置槽位:
首先记住一条命令:redis-cli --cluster help

由图可知,创建集群命令:

此时有六个节点,cluster-replicas 1 :表示比例,主从比例为三比三,如果写 2 ,主从比例为二比四(会报错,最少需要三个小集群);以上命令,会默认平均分配槽位;此时连接任何一个redis,执行 cluster nodes:

此时写入数据,还是会报错:
因为 k1 的槽位值不在 7000 这台主节点上;

连接redis时,尾部加 -c (以集群方式连接),再次存入数据成功,并且自动切换到 7002 节点上;

接下来讲解一下集群扩容,启动 7006 和 7007:

将这两个节点添加到集群中,主节点:

从节点:

目前7006还没有槽位,需要分配槽位:

此时要分配槽位:
此时,已经完成了槽位分配:
注意:分配槽位时,数据也会迁移过去;

接下来讲解一下集群缩容,先重新分配槽位:
再删节点:(先删从节点,再删主节点,否则会执行故障转移)

故障转移期间,集群中该节点会有一定时间不可用,但不影响其他节点,反之,哨兵模式下,故障转移过程中整个集群都不可用;