一、Redis 三种高可用模式总览Redis 官方提供主从复制、哨兵、Cluster 集群三种高可用方案能力逐级增强适用场景从单机备份到分布式海量缓存逐步升级。表格模式核心能力缺陷适用场景主从复制数据备份、读负载均衡故障需人工切换、写无法扩容小型业务、只读高并发哨兵模式主节点自动故障转移从节点不自动切换、存储受限中等规模、需主高可用Redis Cluster分布式分片、读写全均衡、水平扩容不支持多键命令、仅用 0 号库海量数据、高并发、大型分布式二、核心知识点补充1. 三种分片方案对比客户端分片业务代码直连多节点无中间件性能高但扩容需改代码运维复杂。代理分片通过 Twemproxy/Codis 转发请求业务无感知Codis 支持可视化与平滑扩容。服务端分片Redis Cluster官方原生无中心、P2P 通信自动槽分配生产首选。2. 哈希槽Hash Slot机制Redis Cluster 固定16384 个槽数据路由公式HASH_SLOT CRC16(key) mod 16384。仅主节点分配槽从节点只做备份不承担槽读写。cluster-require-full-coverage no允许部分槽不可用时集群仍可用避免单点故障导致整体不可用。3. 故障转移与选举主节点下线超过半数主节点投票判定 FAIL触发从节点升级。选举基于 Raft 协议从节点收集 ≥N/21张主节点选票自动成为新主。原主恢复后不会自动抢主变为从节点同步新主数据。4. 集群通信机制节点间用Gossip 协议两两通信同步节点状态、槽信息、主从关系。通信端口业务端口6379 集群端口16379必须开放防火墙。三、Redis Cluster 集群部署全量代码・6 节点环境说明系统OpenEuler24节点3 主 3 从最小高可用集群IP192.168.10.101~106端口6379Redis 版本5.0.141. 所有节点通用前置操作每台执行bash运行# 关闭防火墙与SELinux systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config # 安装编译依赖 dnf -y install gcc* zlib-devel tar make # 上传并解压Redis源码 tar -zxvf redis-5.0.14.tar.gz cd redis-5.0.14/ # 编译安装 make make PREFIX/usr/local/redis install # 软链接方便全局调用 ln -s /usr/local/redis/bin/* /usr/local/bin/ # 初始化Redis服务 cd utils/ ./install_server.sh2. 所有节点修改集群配置每台执行仅 IP 不同bash运行vim /etc/redis/6379.conf核心配置项必改inibind 127.0.0.1 192.168.10.101不同ip protected-mode yes port 6379 daemonize yes appendonly yes # 集群核心配置 cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 15000 cluster-require-full-coverage no重启服务bash运行# 若bind未监听127.0.0.0用绝对路径启动 redis-server /etc/redis/6379.conf # 验证端口 netstat -anpt | grep 63793. 创建集群任意一台主节点执行bash运行redis-cli --cluster create --cluster-replicas 1 \ 192.168.10.101:6379 \ 192.168.10.102:6379 \ 192.168.10.103:6379 \ 192.168.10.104:6379 \ 192.168.10.105:6379 \ 192.168.10.106:6379--cluster-replicas 1每个主节点配 1 个从节点。输入yes确认集群配置。四、集群常用操作命令全量代码1. 集群连接与基础测试bash运行# -c 参数自动路由到对应槽节点 redis-cli -h 192.168.10.101 -p 6379 -c # 测试数据读写 set test_key hello_cluster get test_key2. 集群状态查看bash运行# 查看所有节点信息 redis-cli -h 192.168.10.101 -p 6379 cluster nodes # 检查集群健康度 redis-cli --cluster check 192.168.10.101:6379 # 查看集群信息 redis-cli -h 192.168.10.101 -p 6379 cluster info3. 新增节点方式 1cluster meetbash运行# 新节点192.168.10.107已配置集群模式 redis-cli -c -h 192.168.10.101 -p 6379 cluster meet 192.168.10.107 6379方式 2add-nodebash运行redis-cli --cluster add-node 192.168.10.108:6379 192.168.10.101:63794. 设置从节点bash运行# 让108成为107的从节点替换为实际节点ID redis-cli -h 192.168.10.108 -p 6379 cluster replicate 节点ID5. 槽位重新平衡bash运行redis-cli --cluster rebalance \ --cluster-threshold 1 \ --cluster-use-empty-masters \ 192.168.10.101:63796. 删除节点删除从节点直接删bash运行redis-cli --cluster del-node 192.168.10.101:6379 节点ID删除主节点先清槽再删除bash运行# 清空数据与集群配置 redis-cli -h 192.168.10.108 -p 6379 flushall redis-cli -h 192.168.10.108 -p 6379 cluster reset # 删除节点 redis-cli --cluster del-node 192.168.10.101:6379 节点ID五、集群常见故障排错全量解决方案错误 1Slot 0 is already busy原因节点残留旧集群数据 / 槽信息。解决bash运行redis-cli -h 节点IP -p 6379 flushall redis-cli -h 节点IP -p 6379 cluster reset rm -rf /var/lib/redis/6379/nodes-6379.conf redis-server /etc/redis/6379.conf错误 2启动失败提示连接 127.0.0.1 拒绝原因配置未监听本地回环脚本无法连接。解决bash运行# 强制用配置文件启动 redis-server /etc/redis/6379.conf # 安全关闭 redis-cli -h 节点IP -p 6379 shutdown错误 3集群创建卡住 Waiting for cluster to join原因节点未互相 meet防火墙未放通 16379 端口。解决bash运行# 从节点执行加入主节点 redis-cli -h 127.0.0.1 -p 6379 cluster meet 192.168.10.101 6379错误 4从节点无法读取数据解决连接从节点后执行readonly单次连接生效bash运行redis-cli -h 从节点IP -p 6379 -c readonly get key_name六、生产环境最佳实践补充节点规划至少 3 主 3 从主从跨物理机 / 机架避免单机故障。持久化必须开启appendonly yes防止内存数据丢失。端口安全开放 6379业务16379集群通信禁止外网直接访问。扩容原则先加节点→设从节点→重平衡槽位避免数据迁移中断。监控用 PrometheusGrafana 监控槽使用率、节点状态、响应时间。