通过命令查询集群状态:
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
# 略
- 启动参数增加了 --cluster-announce-ip, 其值来自环境变量 POD_IP. 注意 $(POD_ID) 这里是小括号而非大括号。
- 这个环境变量的值又来自 status.podIP, 即当前 pod 的 ip. 每次 pod 启动时会分配一个不同的 ip, 通过 status.podIP 可以拿这个 ip,进而通知集群。
修改错乱的 nodes.conf
可以直接到 pv 中找到对应的文件修改它。修改完成后重启各个 pod 即可。
重启集群各个 pod
k apply -f redis.yaml