Linux系统部署Redis集群服务(3主3从)

版本redis 6.2.7

系统:Rocky 9

本文采用手动安装方式

官方下载地址 (也可选择其他版本)Download | RedisRedisYou can download the last Redis source files here. For additional options, see the Redis downloads section below.Stable (7.2)Redis 7.2 …icon-default.png?t=N7T8https://redis.io/download/下载后上传至服务器自定义路径

解压

tar -zxvf redis-6.2.7.tar.gz

进入解压后路径

cd redis-6.2.7

编译(指定路径)

make install PREFIX=/自定义/redis-6.2.7/

 在创建redis_cluster目录,并在目录下创建6个子目录node7001~node7006

在以上目录中分别放入redis.conf配置文件(可以区别命名)下图中红圈内文件,其他的是自动生成的。

配置文件详细内容如下

※如果是应用服务与redis集群不在同一部机器,bind 一定要配置为 ip4地址和127.0.0.1 

例如:bind 10.140.0.4 127.0.0.1  

不建议配置公网IP

port 7001                                 --设置端口
bind 10.140.0.4 127.0.0.1                 --设置服务器的内网ip4地址和127.0.0.1  
protected-mode no                           --保护模式关闭
dir /usr/local/redis/redis_cluster/node7001/  --指定数据存储位置,指定不同目录好区分
pidfile /usr/local/redis/redis_cluster/node7001/nodes-7001.pid --指定pid进程文件存放目录
logfile /usr/local/redis/redis_cluster/node7001/nodes-7001.log  --指定log日志存放目录
cluster-enabled yes                        --集群启动开启
cluster-config-file /usr/local/redis/redis_cluster/nodes-7001.conf  --集群节点配置文件,各个节点必须区分开
cluster-node-timeout 15000                 --集群节点超时时间,超过这个时间则认为该节点为宕机
appendonly yes                             --开启aof持久化

设置密码,强烈建议以下两个密码相同
requirepass 123456                         --连接redis的密码
masterauth  123456                         --节点之间通讯的访问密码

各目录下prot端口分别配置7001~7006

启动各节点,启动命令如下(分别执行)

./src/redis-server redis_cluster/node7001/redis_7001.conf
./src/redis-server redis_cluster/node7002/redis_7002.conf
./src/redis-server redis_cluster/node7003/redis_7003.conf 
./src/redis-server redis_cluster/node7004/redis_7004.conf
./src/redis-server redis_cluster/node7005/redis_7005.conf
./src/redis-server redis_cluster/node7006/redis_7006.conf

通过以下命令查看启动状况

ps -ef|grep redis

搭建集群,进入一个客户端,输入命令连接不同开启集群的节点 (1qaz2wsx 为前步骤配置文件中配置的密码)

./src/redis-cli -a 1qaz2wsx -p 7001

在执行以下命令 

cluster meet 127.0.0.1 7002

配置集群

#进入集群节点 7001
./src/redis-cli -a 1qaz2wsx -p 7001

#将其余节点加入集群
cluster meet 10.140.0.4 7002
cluster meet 10.140.0.4 7003
cluster meet 10.140.0.4 7004
cluster meet 10.140.0.4 7005
cluster meet 10.140.0.4 7006

设置主从

#进入从节点
./src/redis-cli -a 1qaz2wsx -h 10.140.0.4 -p 7004 -c
#cluster replicate <node_id> 将当前节点设置为node_id指定的节点的从节点
cluster replicate c332ef81a53b6cc8f41328a1a127657b8775ffde

#依次对3个从属节点就行设置……

分配槽位

#3个主节点依次分配槽位
./src/redis-cli -a "你的密码" -h 10.140.0.4 -p 7001 -c cluster addslots {0..5461}
./src/redis-cli -a "你的密码" -h 10.140.0.4 -p 7002 -c cluster addslots {5462..10922}
./src/redis-cli -a "你的密码" -h 10.140.0.4 -p 7003 -c cluster addslots {10923..16383}

/*****************************************************/

※分配槽如出现以下错误

(error) ERR Slot 0 is already busy

解决方案,进入节点,移除指派给当前节点的所有槽

如果仍然报错

此法慎用!!!  则可以选择充值集群。进入节点执行,cluster reset 重置集群(逐个节点重置,然后重新建群,配置)  ※处于新建阶段可以,已使用中的集群服务慎用此法!!!!!!!

/*****************************************************/

查看状态如下

常见问题:

1、出现个别节点连接不成功,且显示的IP不匹配时可如下操作

哪个节点有问题就查看哪个节点的node-7001.conf文件

查看这一列ip是否有问题,下图是修改后的正确情况。

redis集群命令汇总

集群(cluster)
cluster info 打印集群的信息
cluster nodes 列出集群当前已知的所有节点(node),以及这些节点的相关信息

节点(node)
cluster meet <ip> <port> 将ip和port所指定的节点添加到集群当中,让它成为集群的一份子
cluster forget <node_id> 从集群中移除node_id指定的节点
cluster replicate <node_id> 将当前节点设置为node_id指定的节点的从节点
cluster saveconfig 将节点的配置文件保存到硬盘里面
cluster slaves <node_id> 列出该slave节点的master节点
cluster set-config-epoch 强制设置configEpoch


槽(slot)
cluster addslots <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点
cluster delslots <slot> [slot ...] 移除一个或多个槽对当前节点的指派
cluster flushslots 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点
cluster setslot <slot> node <node_id> 将槽slot指派给node_id指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽,然后再进行指派
cluster setslot <slot> migrating <node_id> 将本节点的槽slot迁移到node_id指定的节点中
cluster setslot <slot> importing <node_id> 从node_id 指定的节点中导入槽slot到本节点
cluster setslot <slot> stable 取消对槽slot的导入(import)或者迁移(migrate)
键(key)
cluster keyslot <key> 计算键key应该被放置在哪个槽上
cluster countkeysinslot <slot> 返回槽slot目前包含的键值对数量
cluster getkeysinslot <slot> <count> 返回count个slot槽中的键
其它
cluster myid 返回节点的ID
cluster slots 返回节点负责的slot
cluster reset 重置集群,慎用