# Redis集群部署文档

# 概要说明

Redis服务用于协同集群部署模式时的缓存存放,建议使用Redis 6.x及以上版本

仅支持Redis三主三从集群,哨兵及其他模式未做标准适配

# 系统架构图

  • 3台服务器部署Redis三主三从集群

1744366271161.png

  • 6台服务器部署Redis三主三从集群

1744366283721.png

# 环境准备

  • 请准备至少3台Linux服务器,或6台Linux服务器;请使用相同的硬件配置及操作系统版本

  • 3台服务器时,每台服务器部署同时部署一个redis主节点和一个redis从节点

  • 参考 'Redis单机部署' 手册,在其中一个服务器上部署Redis单节点,并将其拷贝到其他服务器上

    https://open.seeyoncloud.com/#/faq/vuepressFile/v1/share?url=Z2ptZkplPjIzMzc=

假设已经在服务器A上编译安装完成,其默认安装路径在 /usr/local/bin 目录下('Redis单机部署' 手册有提及)

如果以3台机器部署三主三从集群,请在3台机器上均创建以下目录,并拷贝redis相关文件

# 在三台机器分别创建master和slave两个目录
mkdir /usr/local/redis-cluster/{master,slave}

# 将编译好的redis可执行文件拷贝到新建的redis集群目录
cp -a /usr/local/bin/redis-* /usr/local/redis-cluster/master/
cp -a /usr/local/bin/redis-* /usr/local/redis-cluster/slave/

如果是6台机器部署三主三从集群,则每台机器都只放一个redis实例就行

# 创建redis集群目录
mkdir /usr/local/redis-cluster/

# 将编译好的redis可执行文件拷贝到新建的redis集群目录
cp -a /usr/local/bin/redis-* /usr/local/redis-cluster/

# 配置文件修改

# 在3个服务器上新建master节点的配置文件
echo > /usr/local/redis-cluster/master/redis.conf << EOF
bind 192.168.0.1                       # 监听的网卡地址,改为实际内网ip地址
port 6377                              # 监听端口,同一个服务器部署2个redis节点时,端口不要冲突
daemonize yes                          # 后台运行
cluster-enabled yes                    # 开启集群模式
cluster-config-file  nodes-6377.conf   # 集群节点配置文件
cluster-node-timeout 15000             # 集群超时时间设置
pidfile /var/run/redis_6377.pid
appendonly no                          # 关闭AOF持久化
requirepass Seeyon@123456              # redis实例密码
masterauth Seeyon@123456               # 主节点密码,适用于从节点连接到主节点时进行身份验证
EOF

# 在3个服务器上新建salve节点的配置文件
echo > /usr/local/redis-cluster/slave/redis.conf << EOF
bind 192.168.0.1                       # 监听的网卡地址,改为实际内网ip地址
port 6378                              # 监听端口,同一个服务器部署2个redis节点时,端口不要冲突
daemonize yes                          # 后台运行
cluster-enabled yes                    # 开启集群模式
cluster-config-file  nodes-6378.conf   # 集群节点配置文件
cluster-node-timeout 15000             # 集群超时时间设置
pidfile /var/run/redis_6378.pid
appendonly no                          # 关闭AOF持久化
requirepass Seeyon@123456              # redis实例密码
masterauth Seeyon@123456               # 主节点密码,适用于从节点连接到主节点时进行身份验证
EOF

6台机器时

# 在6个服务器上新建集群配置文件
echo > /usr/local/redis-cluster/redis.conf << EOF
bind 192.168.0.1                       # 监听的网卡地址,改为实际内网ip地址
port 6379                              # 监听端口
daemonize yes                          # 后台运行
cluster-enabled yes                    # 开启集群模式
cluster-config-file  nodes-6379.conf   # 集群节点配置文件
cluster-node-timeout 15000             # 集群超时时间设置
pidfile /var/run/redis_6379.pid
appendonly no                          # 关闭AOF持久化
requirepass Seeyon@123456              # redis实例密码
masterauth Seeyon@123456               # 主节点密码,适用于从节点连接到主节点时进行身份验证
EOF

# 启动redis实例

# 3台服务器上均执行
/usr/local/redis-cluster/master/redis-server /usr/local/redis-cluster/master/redis.conf
/usr/local/redis-cluster/slave/redis-server /usr/local/redis-cluster/slave/redis.conf

# 6台服务器时
/usr/local/redis-cluster/redis-server /usr/local/redis-cluster/redis.conf

# 启动后可以通过以下命令查看进程
ps -ef|grep redis

# Redis集群配置

  • 防火墙配置

集群配置前需要开启redis端口和redis集群总线端口(redis端口+10000)

举例,一个节点部署了两个redis实例,端口分别为6377、6378,则需要同步放行16377、16378端口:

# 开放端口
firewall-cmd --add-port=6377/tcp --permanent
firewall-cmd --add-port=16377/tcp --permanent
firewall-cmd --add-port=6378/tcp --permanent
firewall-cmd --add-port=16378/tcp --permanent
firewall-cmd --reload

# 查看防火墙开放的端口
firewall-cmd --list-ports
firewall-cmd --query-port=6377/tcp

# 防火墙配置中移除6377端口
firewall-cmd --permanent --remove-port=6377/tcp
  • Redis三主三从集群配置

三主三从3节点场景下,1节点部署2个redis实例,需使用不同端口;

以下配置步骤举例,三主三从6节点场景下,分别为

172.31.15.160服务器上6379端口redis

172.31.15.246服务器上6379端口redis

172.31.15.107服务器上6379端口redis

172.31.15.188服务器上6379端口redis

172.31.15.83服务器上6379端口redis

172.31.15.219服务器上6379端口redis

cd /usr/local/redis-cluster/master

./redis-cli --cluster create 172.31.15.160:6379 172.31.15.246:6379
172.31.15.107:6379 172.31.15.188:6379 172.31.15.83:6379
172.31.15.219:6379 --cluster-replicas 1 -a Seeyon@123456

cd /usr/local/redis-cluster
./redis-cli --cluster check 172.31.15.160:6379 -a Seeyon@123456

如果创建失败,删除每个redis节点的/usr/local/redis-cluster/nodes-6379.conf文件,重启redis服务,再重新创建。

# Redis集群检查

  • 进入redis节点

redis-cli -h 172.20.2.51 -p 6379 -a Seeyon@123456

以上命令红色标记了节点ip、端口以及密码

  • 查看集群相关信息

cluster info

  • 查看节点相关信息

cluster nodes

# 常见问题

  1. make编译redis时报错:

gcc版本过低导致该错误。检查gcc版本:4.8.5

解决方法:升级gcc版本(gcc版本一定要5.3以上)

  • 二、从节点无数据,或者主从切换后,新的从节点无数据

【解决方法】:redis.conf增加配置masterauth Seeyon123456

此配置为验证主节点密码。

四、创建集群卡在Waiting for the cluster to jion

此问题常出现在主机之间端口不通导致。主机之间互相telnet 6379端口和16379端口是否通。

解决方法:

  1. 检查主机防火墙是否关闭

  2. 主机如开启防火墙,检查防火墙是否配置redis端口和redis集群总线端口(redis端口+10000)放行

编撰人:zhangshuang、wangyxyf、het