Redis实操(四)——Redis节点高可用之Cluster集群搭建

Redis实操系列

  • Redis实操(一)——CentOS7安装Redis_DreamEhome的博客-CSDN博客
  • Redis实操(二)——Redis主从复制+读写分离(一主二从)架构环境搭建_DreamEhome的博客-CSDN博客
  • Redis实操(三)——Redis哨兵模式(Sentinel)搭建_DreamEhome的博客-CSDN博客
  • Redis实操(四)——Redis节点高可用之Cluster集群搭建_DreamEhome的博客-CSDN博客
  • Redis实操(五)——Redis其他常用操作_DreamEhome的博客-CSDN博客

目录

核心流程

实现目标

环境准备

环境搭建

1.创建相关文件夹

2.进入conf文件夹,创建redis-*.conf配置文件,并进行其内容编辑

3.启动Redis并检查Redis是否启动成功

4.使用redis-cli启动Cluster集群并查看集群信息

启动Cluster集群

查看集群信息

其他查看集群/节点信息命令

5.Cluster集群的扩容与缩容

节点扩容

分配卡槽/卡槽迁移/卡槽缩容

删除节点


核心流程

  • 当前使用Redis7演示;Redis5之前版本使用Ruby语言进行构建,5版本之后直接用redis-cli即可
  • 准备6个Redis节点,三主三从,主节点会自动分配,并非人工指定
  • Cluster集群中主节点故障后,从节点会自动替换主节点
  • 关于测试Cluster集群读写命令get/set
    • key哈希运算槽位置
    • 槽在当前节点的话直接插入/读取,否则自动转向对应的节点    
    • 操作都是在主节点,从节点只是备份
  • 启动流程
    • 启动6个Redis应用
    • 将6个Redis应用加入Cluster集群
  • 集群中的主从数据同步:从节点会自动请求复制主节点,先全量,在增量

实现目标

  • 使用6个Redis节点搭建高可用Cluster集群
  • 实现主节点宕机从节点自动切换

环境准备

  • 虚拟机(演示用的CentOS7)
  • 已安装完成的Redis服务(可参考Redis实操(一)——CentOS7安装Redis_DreamEhome的博客-CSDN博客)

环境搭建

注意:环境搭建在一台虚拟机上演示

1.创建相关文件夹

cd /usr;
#创建目录
mkdir -p soft/redis7cluster;
cd soft/redis7cluster;
#创建配置目录
mkdir conf;
#创建持久化目录
mkdir data;
#创建日志目录
mkdir log;

创建完成后各文件夹路径如图所示

2.进入conf文件夹,创建redis-*.conf配置文件,并进行其内容编辑

#进入配置目录
cd conf;
touch redis-6379.conf;
touch redis-6380.conf;
touch redis-6381.conf;
touch redis-6382.conf;
touch redis-6383.conf;
touch redis-6384.conf;

 分别编辑6个conf文件,将以下配置写入配置文件中,每个配置文件根据端口号对相应的配置做相应的更改

#不限定ip访问
bind 0.0.0.0
#端口号6379
port 6379
#开启后台运行
daemonize yes
#设置访问密码
requirepass 123456
#日志文件路径
logfile "/usr/soft/redis7cluster/log/6379.log"
#持久化文件名称
dbfilename "db-6379.rdb"
#持久化文件的存储目录
dir "/usr/soft/redis7cluster/data"
#AOF持久化开关
appendonly yes
#AOF文件名,默认是"appendonly.aof",AOF文件的保存路径,同RDB的路径一致
appendfilename "appendonly-6379.aof"
#主节点密码
masterauth 123456
#是否开启集群
cluster-enabled yes
#生成的node文件,记录集群节点信息,默认为nodes.conf,为防止冲突,改为nodes-port.conf,默认目录为持久化目录
cluster-config-file nodes-6379.conf
#节点连接超时时间
cluster-node-timeout 20000
#集群节点的IP,当前节点的IP
cluster-announce-ip 192.168.237.133
#集群节点映射端口
cluster-announce-port 6379
#集群节点总线端口,节点之间互相通信,常规方式为端口号+1万
cluster-announce-bus-port 16379

3.启动Redis并检查Redis是否启动成功

启动redis

redis-server /usr/soft/redis7cluster/conf/redis-6379.conf;
redis-server /usr/soft/redis7cluster/conf/redis-6380.conf;
redis-server /usr/soft/redis7cluster/conf/redis-6381.conf;
redis-server /usr/soft/redis7cluster/conf/redis-6382.conf;
redis-server /usr/soft/redis7cluster/conf/redis-6383.conf;
redis-server /usr/soft/redis7cluster/conf/redis-6384.conf;

检查redis是否启动成功

ps -ef|grep redis

Redis启动成功

Redis实操(四)——Redis节点高可用之Cluster集群搭建_第1张图片

4.使用redis-cli启动Cluster集群并查看集群信息

启动Cluster集群

#--cluster 构建集群的全部节点
#--cluster-replicas 1 主从节点比例  1代表一主一从的方式
redis-cli -a 123456 --cluster create 192.168.237.133:6379 192.168.237.133:6380 192.168.237.133:6381 192.168.237.133:6382 192.168.237.133:6383 192.168.237.133:6384 --cluster-replicas 1

Redis实操(四)——Redis节点高可用之Cluster集群搭建_第2张图片

查看集群信息

redis-cli -a 123456 --cluster check 192.168.237.133:6379

Redis实操(四)——Redis节点高可用之Cluster集群搭建_第3张图片

注意:主从节点为自动分配 

其他查看集群/节点信息命令

#-c 表示以cluster集群模式连接到redis
redis-cli -c -a 123456 -p 6379
#集群信息
cluster info
#节点信息
cluster nodes

Redis实操(四)——Redis节点高可用之Cluster集群搭建_第4张图片

5.Cluster集群的扩容与缩容

按照上述配置方式新增端口号为6385与6386的conf配置文件并启动redis,启动完成后的redis节点如下图所示

Redis实操(四)——Redis节点高可用之Cluster集群搭建_第5张图片

节点扩容

将6385节点加到集群中

#将6385添加到6380的集群中
#add-node 新增节点
#192.168.237.133:6386 第一个 IP:端口为要添加的节点
#192.168.237.133:6380 第二个 IP:端口为现有的集群(集群中的随便一个节点都可以)
redis-cli -a 123456 --cluster add-node 192.168.237.133:6385 192.168.237.133:6380

如图所示6385已经被添加到集群中Redis实操(四)——Redis节点高可用之Cluster集群搭建_第6张图片

 查看集群信息,如下图中可以看到6385添加到集群中,默认是master节点并没有分配卡槽

Redis实操(四)——Redis节点高可用之Cluster集群搭建_第7张图片

 将6386添加到集群中,并将6386设置为6385的从节点

#将6386添加到6380的集群中,并作为6385的从节点
#add-node 新增节点
#192.168.237.133:6386 第一个 IP:端口为要添加的节点
#192.168.237.133:6380 第二个 IP:端口为现有的集群(集群中的随便一个节点都可以)
#--cluster-slave 当前节点为从节点
#b7c791a875669a7c201ab2dbebba3ff5264afc1c 集群主节点的node ID
redis-cli -a 123456 --cluster add-node 192.168.237.133:6386 192.168.237.133:6380 --cluster-slave --cluster-master-id b7c791a875669a7c201ab2dbebba3ff5264afc1c

Redis实操(四)——Redis节点高可用之Cluster集群搭建_第8张图片

分配卡槽/卡槽迁移/卡槽缩容

分配卡槽:为6385分配卡槽

redis-cli -a 123456 --cluster reshard 192.168.237.133:6380

执行命令之后会提示想扩充一个master到多少个卡槽,目前共是4个master节点,平均每个是4096个。之后提示移动到哪个node ID上,把6385的node ID赋复制过来即可。之后再提示以什么方式分配:all是集群中的所有的卡槽都可以当做源卡槽进行分配,这里是平均分所以选all;done需要指定node ID,从特定的节点上分配卡槽到6385,一般用于某个节点较多的情况。

Redis实操(四)——Redis节点高可用之Cluster集群搭建_第9张图片

 分配完卡槽之后查看集群状态,如下图所有卡槽已重新分配到各个节点

Redis实操(四)——Redis节点高可用之Cluster集群搭建_第10张图片

卡槽迁移:将6385的一个卡槽迁移到6379上

#卡槽迁移到其他节点下
#192.168.237.133:6380 ip:port为集群中的任意ip:port
#--cluster-from 要删除卡槽的master节点,后跟其节点的node ID
#--cluster-to 要接收卡槽的master节点,后跟其节点的node ID
#--cluster-slots 卡槽转移的数量,后跟数量
redis-cli -a 123456 --cluster reshard 192.168.237.133:6380 --cluster-from a1daab87a26b408715aa85e54304d59ee99e862e --cluster-to bd1bd9dc7f684d5a4cbc9b5e98c1dda4523d5a2d  --cluster-slots 1

提示是否确认,yes为确认Redis实操(四)——Redis节点高可用之Cluster集群搭建_第11张图片

迁移完成后查看集群状态,如下图一个卡槽已由6385迁移到6379

Redis实操(四)——Redis节点高可用之Cluster集群搭建_第12张图片

删除节点

删除集群中的节点之前,需要把要删除节点的卡槽清空,如要删除6385节点时,使用卡槽迁移清空6385节点的卡槽,然后对该节点进行删除

#del-node 删除节点
#192.168.237.133:6379 集群中的一个主节点ip:port
#b7c791a875669a7c201ab2dbebba3ff5264afc1c 要删除的节点的node ID
redis-cli -a 123456 --cluster del-node 192.168.237.133:6379 b7c791a875669a7c201ab2dbebba3ff5264afc1c

删除节点之后查看集群,6385节点已不存在Redis实操(四)——Redis节点高可用之Cluster集群搭建_第13张图片

你可能感兴趣的:(Redis,redis,缓存,数据库,centos,linux)