一、项目概述1.1 业务场景说明Redis‑Cluster 集群采用分片机制一共有 16384 个哈希槽数据按照 key‑CRC16 算法分配至各个主节点官方集群架构标准配置为 3 主 3 从3 台主节点分担数据存储每个主节点搭配一台从节点实现数据备份主节点故障时从节点自动升级为主节点实现故障转移支撑高并发业务。Redis‑Cluster 无中心模式客户端可直连任意节点。1.2 环境参数项目参数操作系统CentOS Linux release 7.9‑2009Redis 版本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 关闭安全策略shellsystemctl stop firewalldsystemctl disable firewalldsetenforce 0sed -i s/^SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config2.2 编译安装 Redis 基础程序shellyum install -y gcc gcc-c makecd /usr/local/srcwget https://download.redis.io/releases/redis-5.0.10.tar.gztar -zxf redis-5.0.10.tar.gzcd redis-5.0.10make MALLOClibcmake install PREFIX/usr/local/redis-cluster2.3 创建 6 个节点目录编写配置文件以 7001 节点配置文件为模板其余节点只修改端口号。shellmkdir -p /usr/local/redis-cluster/{7001,7002,7003,7004,7005,7006}vi /usr/local/redis-cluster/7001/redis.conf配置文件内容iniport 7001bind 0.0.0.0daemonize yespidfile /var/run/redis-7001.pidlogfile redis.logdbfilename dump.rdbdir /usr/local/redis-cluster/7001#开启集群模式cluster-enabled yes#集群内部配置文件系统自动生成cluster-config-file nodes-7001.conf#节点失联超时时间毫秒cluster-node-timeout 15000requirepass Admin123456masterauth Admin123456批量复制配置文件并替换端口shellcp /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.confsed -i s/7001/7003/ /usr/local/redis-cluster/7003/redis.confsed -i s/7001/7004/ /usr/local/redis-cluster/7004/redis.confsed -i s/7001/7005/ /usr/local/redis-cluster/7005/redis.confsed -i s/7001/7006/ /usr/local/redis-cluster/7006/redis.conf2.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.confps -ef | grep redis三、创建 Redis‑Cluster 集群Redis5.0 版本命令方式3.1 构建集群命令--cluster‑replicas 1参数代表每个主节点分配 1 个从节点程序自动分配主从关系。shellredis-cli -a Admin123456 --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 参数开启集群重定向跳转shellredis-cli -c -p 7001 -a Admin1234564.2 集群内部查看指令登录集群后执行redis#查看集群整体状态cluster info#查看全部节点、主从角色、哈希槽分配、节点IDcluster nodes4.3 外部集群检查命令服务器终端执行shellredis-cli -a Admin123456 --cluster check 192.168.1.10:7001redis-cli -a Admin123456 --cluster info 192.168.1.10:7001五、集群日常运维扩容、缩容5.1 扩容添加新主节点 7007部署 7007 实例加入集群手动迁移哈希槽分配数据存储空间。shellredis-cli -a Admin123456 --cluster add-node 192.168.1.10:7007 192.168.1.10:7001redis-cli -a Admin123456 --cluster reshard 192.168.1.10:70015.2 给已有主节点新增从节点 7008shellredis-cli -a Admin123456 --cluster add-node 192.168.1.10:7008 192.168.1.10:7001 \--cluster-slave --cluster-master-id 主节点ID5.3 缩容删除集群节点将待删除节点的哈希槽全部迁移至其他主节点执行节点删除命令。shellredis-cli -a Admin123456 --cluster del-node 192.168.1.10:7001 节点ID六、故障转移测试流程关闭一个主节点进程kill -9 主进程PID集群等待超时后该主节点对应的从节点自动升级为主节点原故障节点重新启动自动变为新主节点的从节点使用cluster nodes核对角色切换状态。七、ks.cfg 批量部署脚本PXE 自动化装机shell%postyum install -y gcc gcc-c makecd /usr/local/srcwget https://download.redis.io/releases/redis-5.0.10.tar.gztar -zxf redis-5.0.10.tar.gzcd redis-5.0.10make MALLOClibcmake install PREFIX/usr/local/redis-clustermkdir -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 没有添加‑c 集群参数解决redis-cli -c -p 端口登录集群。故障 3主节点宕机后集群没有自动切换原因cluster‑node‑timeout 超时时间设置过长解决缩短超时参数重启 Redis 实例。故障 4reshard 哈希槽迁移失败原因节点网络不通或者节点 ID 填写错误解决检查网络通信核对节点 ID。