解决k8s集群中Redis Cluster故障

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决k8s集群中Redis Cluster故障相关的知识,希望对你有一定的参考价值。

参考技术A k8s集群中的一个node节点故障,将这个node节点下线后上面的pod迁移到其他节点,但是大量pod都产生报错。经排查,是由于redis集群故障导致。但是查看resdis pod,都是running状态,如下图

由于这些pod是组成集群使用,既然pod是正常的,应用又报redis链接的错误,所以问题肯定出在Redis Cluster上,查看Redis Cluster状态:

这个示意图我只画出三个node,简单表达一下意思即可。三个node上各运行了一个master和一个slave节点。由于node3节点故障已经移除集群,这个节点上之前运行的其他无状态pod迁移到其他节点可以正常运行,但是master2和slave2在node3上有持久化数据,虽然在node4上重建了,但是由于缺失数据,原来的集群状态被破坏了,所以重新部署也无法恢复,由于是master2和slave2的数据都丢失了,集群无法重建。通过开发了解到,redis上都是缓存数据,丢失影响不大,于是删除本地持久化数据,重新部署redis node,再手动创建集群。

三个节点都添加完成,并且没有报错。进入一个master节点查看集群状态:

集群状态终于恢复正常。重建后的Redis Cluster集群架构示意图如下

总结:对于有状态的应用,redis、mysql等,容器化时一定要考虑周全,避免主从节点运行在一个节点上。对于redis应用,如果读写I/O不是特别高,还是建议直接使用主从复制架构,故障恢复简单且迅速。

以上是关于解决k8s集群中Redis Cluster故障的主要内容,如果未能解决你的问题,请参考以下文章

「故障演练」 Redis Cluster集群,当master宕机,主从切换

在k8s中部署redis cluster实战

Redis Cluster基于Docker的集群搭建

K8s 集群 etcd节点故障解决方案

一文学会k8s etcd故障解决方案

K8S集群中Coredns域名解析故障排查思路