# Redis集群部署文档
# 概要说明
Redis服务用于协同集群部署模式时的缓存存放,建议使用Redis 6.x及以上版本
仅支持Redis三主三从集群,哨兵及其他模式未做标准适配
# 系统架构图
- 3台服务器部署Redis三主三从集群
- 6台服务器部署Redis三主三从集群
# 环境准备
请准备至少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
# 常见问题
- make编译redis时报错:
gcc版本过低导致该错误。检查gcc版本:4.8.5
解决方法:升级gcc版本(gcc版本一定要5.3以上)
- 二、从节点无数据,或者主从切换后,新的从节点无数据
【解决方法】:redis.conf增加配置masterauth Seeyon123456
此配置为验证主节点密码。
四、创建集群卡在Waiting for the cluster to jion
此问题常出现在主机之间端口不通导致。主机之间互相telnet 6379端口和16379端口是否通。
解决方法:
检查主机防火墙是否关闭
主机如开启防火墙,检查防火墙是否配置redis端口和redis集群总线端口(redis端口+10000)放行
