Kubernetes环境下Bitnami Redis Cluster高可用失效问题求助
故障排查与解决步骤
一、排查Redis Cluster本身故障转移能力
- 首先验证集群基础状态:进入任意Redis Pod执行以下命令,确认集群槽位分配、主从关系正常
预期结果为:共6个节点、3主3从,每个主节点绑定1个从节点,16384个槽位全部分配完成,cluster_state状态为ok。kubectl exec -n redis <任意redis-pod名> -- redis-cli -a redis@pass cluster info kubectl exec -n redis <任意redis-pod名> -- redis-cli -a redis@pass cluster nodes - 验证自动故障转移逻辑:先记录当前主节点ID,手动删除其中一个主节点Pod,10秒后再次执行
cluster nodes命令,确认对应从节点是否自动升级为主节点,槽位是否自动迁移到新主节点。如果未触发自动升主,排查以下问题:- 检查Redis Pod日志,是否存在选举失败、节点间通信超时报错
- 确认K8s集群中没有网络策略、防火墙规则屏蔽Redis节点间的6379(服务端口)和16379(集群总线端口)通信
- 检查PVC挂载是否正常,删除后重建的Pod是否能正常挂载原有PV,数据同步无异常
- 修复values.yaml配置错误:你当前sysctlImage的command中存在无效的
insta行,会导致sysctl配置未生效,删除该行后重新升级Helm Release即可。
二、修复Quarkus客户端配置错误
你当前的Quarkus配置存在明显的模式混用问题,是导致故障后无法访问的核心原因之一:
- 删掉
quarkus.redis.master-name=redis-cluster配置项,该参数是哨兵模式专用配置,集群模式下配置会导致客户端逻辑异常,无法正确感知集群拓扑变化。 - 新增集群拓扑自动刷新配置,确保客户端能自动感知节点切换:
# 单位根据需要调整,这里设为2秒刷新一次拓扑 quarkus.redis.cluster.refresh-period=2s - 若使用的是普通ClusterIP Service,建议更换为Bitnami Redis Cluster默认提供的Headless Service地址,避免Service负载均衡路由到已故障的节点。
三、最终验证
完成上述修改后,重新部署Quarkus应用,手动删除任意Redis Pod,确认集群可在15秒内完成故障转移,客户端可正常读写无报错。
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

