博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

通过命令查询集群状态:

k exec -it redis-app-0 -- redis-cli cluster info

第一行是 cluster_state:fail (正常应该是 ok)

如何解决?
这里参考了 https://github.com/redis/redis/issues/4289. 主要方法是启动参数中设置 --cluster-announce-ip 为当前 pod 的 ip. 对于已经错乱的 nodes.conf 文件,则修改其中的 ip.

修改 redis.yaml

# 略
            containers:
            - name: redis
              image: redis
              command:
              - "redis-server"
              args:
              - "/etc/redis/redis.conf"
              - "--protected-mode"
              - "no"
              - "--cluster-announce-ip"
              - "$(POD_IP)"
              env:
              - name: POD_IP
                valueFrom:
                  fieldRef:
                    fieldPath: status.podIP
# 略
  1. 启动参数增加了 --cluster-announce-ip, 其值来自环境变量 POD_IP. 注意 $(POD_ID) 这里是小括号而非大括号。
  2. 这个环境变量的值又来自 status.podIP, 即当前 pod 的 ip. 每次 pod 启动时会分配一个不同的 ip, 通过 status.podIP 可以拿这个 ip,进而通知集群。

修改错乱的 nodes.conf
可以直接到 pv 中找到对应的文件修改它。修改完成后重启各个 pod 即可。

重启集群各个 pod

k apply -f redis.yaml
posted on 2021-02-28 22:04  黑米  阅读(3938)  评论(0编辑  收藏  举报