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

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

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

​ 基础架构图如下所示:

image-20210401200112675

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

集群分片

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

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

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

​ 如下图所示:

image-20210401203018467

​ 情况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消息后立马把对应节点更新为下线状态,此时集群开始进行故障转移

image-20210401204007415

初步搭建 地址规划

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

​ 服务器采用centos7.3,Redis版本为6.2.1

​ 地址规划与结构图如下:

image-20210401213843708

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

$ vim /etc/hosts 192.168.0.120 node1 192.168.0.130 node2 192.168.0.140 node3

集群准备

​ 为所有节点下载Redis:

$ cd ~ $ wget https://download.redis.io/releases/redis-6.2.1.tar.gz

​ 为所有节点配置目录:

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

​ 所有节点进行解压:

$ tar -zxvf redis-6.2.1.tar.gz -C /usr/local/redis_cluster/

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

$ cd /usr/local/redis_cluster/redis-6.2.1/ $ make && make install

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

$ vim /usr/local/redis_cluster/redis_6379/conf/redis.cnf # 快速修改::%s/6379/6380/g # 守护进行模式启动 daemonize yes # 设置数据库数量,默认数据库为0 databases 16 # 绑定地址,需要修改 bind 192.168.0.120 # 绑定端口,需要修改 port 6379 # pid文件存储位置,文件名需要修改 pidfile /usr/local/redis_cluster/redis_6379/pid/redis_6379.pid # log文件存储位置,文件名需要修改 logfile /usr/local/redis_cluster/redis_6379/logs/redis_6379.log # RDB快照备份文件名,文件名需要修改 dbfilename redis_6379.rdb # 本地数据库存储目录,需要修改 dir /usr/local/redis_cluster/redis_6379 # 集群相关配置 # 是否以集群模式启动 cluster-enabled yes # 集群节点回应最长时间,超过该时间被认为下线 cluster-node-timeout 15000 # 生成的集群节点配置文件名,文件名需要修改 cluster-config-file nodes_6379.conf 启动集群 启动集群

​ 在启动集群时,会按照Redis服务配置文件的配置项判断是否启动集群模式,如图所示:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzsdfy.html