Redis 超详细的手动搭建Cluster集群步骤

功能概述

RedisCluster是Redis的自带的官方分布式解决方案,提供数据分片、高可用功能,在3.0版本正式推出。

使用RedisCluster能解决负载均衡的问题,内部采用哈希分片规则:

基础架构图如下所示:

图中最大的虚线部分为一个Cluster集群,由6个Redis实例组成。

集群分片

整个Cluster集群中有16384个槽位,必须要将这些槽位分别规划在3台Master中。

如果有任意1个槽位没有被分配,则集群创建不成功。

当集群中任意一个Master尝试进行写入操作后,会通过Hash算法计算出该条数据应该落在哪一个Master节点上。

如下图所示:

情况1:如果你未指定任何参数就进行写入,如在Master1上写入数据,经过内部计算发现该数据应该在Master2上写入时,会提示你应该进入Master2写入该条数据,执行并不会成功

情况2:如果你指定了一个特定参数进行写入,如在Master1上写入数据,经过内部计算发现该数据应该在Master2上写入时,会自动将写入环境重定向至Master2,执行成功

同理,读取数据也是这样,这个过程叫做MOVED重定向,如果你是情况1进行操作则必须手动进行重定向,情况2则会自动进行重定向。

集群通信

集群中各个节点的信息是互通的,这种现象由Gossip(流言)协议产生。

Gossip协议规定每个集群节点之间互相交换信息,使其能够彼此知道对方的状态。

在通信建立时,集群中的每一个节点都会单独地开辟一个TCP通道,用于与其他节点进行通信,这个通信端口会在基础端口上+10000。

通信建立成功后,每个节点在固定周期内通过特定规则选择节点来发送ping消息(心跳机制)。

当收到ping消息的节点则会使用pong消息作为回应,也就是说,当有一个新节点加入后,一瞬间集群中所有的其他节点也能够获取到该信息。

Gossip协议的主要职责就是进行集群中节点的信息交换,常见的Gossip协议消息有以下几点区分:

meet:用于通知新节点加入,消息发送者通知接受者加入到当前集群

ping:集群内每个节点与其他节点进行心跳检测的命令,用于检测其他节点是否在线,除此之外还能交换其他额外信息

pong:用于回复meet以及ping信息,表示已收到,能够正常通行。此外还能进行群发更新节点状态

fail:当其他节点收到fail消息后立马把对应节点更新为下线状态,此时集群开始进行故障转移

初步搭建地址规划

3台服务器,每台服务器开启2台实例构建基础主从。

服务器采用,Redis版本为6.2.1

地址规划与结构图如下:

在每个节点hosts文件中加入以下内容;

$vim/etc/
集群准备

为所有节点下载Redis:

$cd~$wget

为所有节点配置目录:

$mkdir-p/usr/local/redis_cluster/redis_63{79,80}/{conf,pid,logs}

所有节点进行解压:

$/usr/local/redis_cluster/

所有节点进行编译安装Redis:

$cd/usr/local/redis_cluster//$makemakeinstall

书写集群配置文件,注意!Redis普通服务会有2套配置文件,一套为普通服务配置文件,一套为集群服务配置文件,我们这里是做的集群,所以书写的集群配置文件,共6份:

$vim/usr/local/redis_cluster/redis_6379/conf/守护进行模式启动daemonizeyes绑定地址,需要修改文件存储位置,文件名需要修改pidfile/usr/local/redis_cluster/redis_6379/pid/redis_6379.pidRDB快照备份文件名,文件名需要修改dbfilenameredis_6379.rdb集群相关配置集群节点回应最长时间,超过该时间被认为下线cluster-node-timeout15000第一段信息是这个Redis服务作为集群节点的一个身份编码myself表示当前登录的是那个服务
分配槽位

接下来我们要开始分配槽位了,为了考虑今后的写入操作能分配均匀,槽位也要进行均匀分配。

仅在Master上进行分配,从库不进行分配,仅做备份和读库使用。

使用python计算每个master节点分多少槽位:

$python3divmod(16384,3)(5461,1)

槽位分配情况如下,槽位号从0开始,到16383结束,共16384个槽位:

节点

槽位数量

node1:6379

0-5461

node2:6379

5461-10922

node3:6379

10922-16383

开始分配:

$redis-cli-hnode1-p6379clusteraddslots{0..5461}$redis-cli-hnode2-p6379clusteraddslots{5462..10922}$redis-cli-hnode3-p6379clusteraddslots{10923..16383}

检查槽位是否分配政策,这里进行内容截取:

$redis-cli-hnode1-p6379node1:6379:6379@16379:6379@16379:6379@16379myself,master-0165connected0-5461已下线:6379@16379master,fa:6379@16379master-0162connected10923-16383自动上线:6379@16379myself,slavefd1dde2a641727e52b4e82cfb351fe3c17690a460006connected
cluster命令

以下是集群中常用的可执行命令,命令执行格式为:

cluster下表命令

命令如下,未全,如果想了解更多请执行clusterhelp操作:

发布于 2025-05-08
177
目录

    推荐阅读