一、项目概述
1.1 业务场景说明
Redis‑Cluster 集群采用分片机制,一共有 16384 个哈希槽,数据按照 key‑CRC16 算法分配至各个主节点;官方集群架构标准配置为 3 主 3 从,3 台主节点分担数据存储,每个主节点搭配一台从节点实现数据备份;主节点故障时,从节点自动升级为主节点,实现故障转移,支撑高并发业务。Redis‑Cluster 无中心模式,客户端可直连任意节点。
1.2 环境参数
项目 | 参数 |
操作系统 | CentOS Linux release 7.9‑2009 |
Redis 版本 | redis‑5.0.10 |
集群节点(同一服务器) | [192.168.1.10:7001](192.168.1.10:7001)、[192.168.1.10:7002](192.168.1.10:7002)、[192.168.1.10:7003](192.168.1.10:7003) [192.168.1.10:7004](192.168.1.10:7004)、[192.168.1.10:7005](192.168.1.10:7005)、[192.168.1.10:7006](192.168.1.10:7006) |
哈希槽区间 | 0‑16383,一共 16384 个哈希槽 |
安全策略 | 关闭 firewalld、SELinux |
安装目录 | /usr/local/redis‑cluster |
二、前期环境准备
2.1 关闭安全策略
shell systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config |
2.2 编译安装 Redis 基础程序
shell yum install -y gcc gcc-c++ make cd /usr/local/src wget https://download.redis.io/releases/redis-5.0.10.tar.gz tar -zxf redis-5.0.10.tar.gz cd redis-5.0.10 make MALLOC=libc make install PREFIX=/usr/local/redis-cluster |
2.3 创建 6 个节点目录,编写配置文件
以 7001 节点配置文件为模板,其余节点只修改端口号。
shell mkdir -p /usr/local/redis-cluster/{7001,7002,7003,7004,7005,7006} vi /usr/local/redis-cluster/7001/redis.conf |
配置文件内容:
ini port 7001 bind 0.0.0.0 daemonize yes pidfile /var/run/redis-7001.pid logfile "redis.log" dbfilename dump.rdb dir /usr/local/redis-cluster/7001 #开启集群模式 cluster-enabled yes #集群内部配置文件,系统自动生成 cluster-config-file nodes-7001.conf #节点失联超时时间,毫秒 cluster-node-timeout 15000 requirepass Admin@123456 masterauth Admin@123456 |
批量复制配置文件并替换端口:
shell cp /usr/local/redis-cluster/7001/redis.conf /usr/local/redis-cluster/7002/ cp /usr/local/redis-cluster/7001/redis.conf /usr/local/redis-cluster/7003/ cp /usr/local/redis-cluster/7001/redis.conf /usr/local/redis-cluster/7004/ cp /usr/local/redis-cluster/7001/redis.conf /usr/local/redis-cluster/7005/ cp /usr/local/redis-cluster/7001/redis.conf /usr/local/redis-cluster/7006/
sed -i 's/7001/7002/' /usr/local/redis-cluster/7002/redis.conf sed -i 's/7001/7003/' /usr/local/redis-cluster/7003/redis.conf sed -i 's/7001/7004/' /usr/local/redis-cluster/7004/redis.conf sed -i 's/7001/7005/' /usr/local/redis-cluster/7005/redis.conf sed -i 's/7001/7006/' /usr/local/redis-cluster/7006/redis.conf |
2.4 启动全部 6 个 Redis 实例
shell /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7001/redis.conf /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7002/redis.conf /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7003/redis.conf /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7004/redis.conf /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7005/redis.conf /usr/local/redis-cluster/bin/redis-server /usr/local/redis-cluster/7006/redis.conf
ps -ef | grep redis |
三、创建 Redis‑Cluster 集群(Redis5.0 + 版本命令方式)
3.1 构建集群命令
--cluster‑replicas 1参数代表每个主节点分配 1 个从节点,程序自动分配主从关系。
shell redis-cli -a Admin@123456 --cluster create \ 192.168.1.10:7001 192.168.1.10:7002 192.168.1.10:7003 \ 192.168.1.10:7004 192.168.1.10:7005 192.168.1.10:7006 \ --cluster-replicas 1 |
控制台提示Can I set the above configuration?,输入yes确认创建集群。
四、集群查看命令
4.1 客户端连接集群,‑c 参数开启集群重定向跳转
shell redis-cli -c -p 7001 -a Admin@123456 |
4.2 集群内部查看指令(登录集群后执行)
redis #查看集群整体状态 cluster info #查看全部节点、主从角色、哈希槽分配、节点ID cluster nodes |
4.3 外部集群检查命令(服务器终端执行)
shell redis-cli -a Admin@123456 --cluster check 192.168.1.10:7001 redis-cli -a Admin@123456 --cluster info 192.168.1.10:7001 |
五、集群日常运维(扩容、缩容)
5.1 扩容:添加新主节点 7007
- 部署 7007 实例;
- 加入集群;
- 手动迁移哈希槽,分配数据存储空间。
shell redis-cli -a Admin@123456 --cluster add-node 192.168.1.10:7007 192.168.1.10:7001 redis-cli -a Admin@123456 --cluster reshard 192.168.1.10:7001 |
5.2 给已有主节点新增从节点 7008
shell redis-cli -a Admin@123456 --cluster add-node 192.168.1.10:7008 192.168.1.10:7001 \ --cluster-slave --cluster-master-id 主节点ID |
5.3 缩容:删除集群节点
- 将待删除节点的哈希槽全部迁移至其他主节点;
- 执行节点删除命令。
shell redis-cli -a Admin@123456 --cluster del-node 192.168.1.10:7001 节点ID |
六、故障转移测试流程
- 关闭一个主节点进程:kill -9 主进程PID;
- 集群等待超时后,该主节点对应的从节点自动升级为主节点;
- 原故障节点重新启动,自动变为新主节点的从节点;
- 使用cluster nodes核对角色切换状态。
七、ks.cfg 批量部署脚本(PXE 自动化装机)
shell %post yum install -y gcc gcc-c++ make cd /usr/local/src wget https://download.redis.io/releases/redis-5.0.10.tar.gz tar -zxf redis-5.0.10.tar.gz cd redis-5.0.10 make MALLOC=libc make install PREFIX=/usr/local/redis-cluster mkdir -p /usr/local/redis-cluster/{7001,7002,7003,7004,7005,7006} #省略配置文件生成与服务启动代码,部署节点环境 %end |
八、高频故障总结
故障 1:创建集群失败,节点之间无法通信
- 原因:防火墙拦截端口,bind 绑定 [127.0.0.1](127.0.0.1);
- 解决:关闭防火墙,bind 参数改为 [0.0.0.0](0.0.0.0)。
故障 2:执行指令提示 MOVED 报错
- 解决:redis-cli -c -p 端口登录集群。
故障 3:主节点宕机后,集群没有自动切换
- 原因:cluster‑node‑timeout 超时时间设置过长;
故障 4:reshard 哈希槽迁移失败