【发布时间】:2019-06-14 06:28:59
【问题描述】:
我在 statefulset 中使用了 redis:5.0.1-alpine,stateful set 有 6 个 pod,redis 集群的形成是使用下面的命令完成的
redis-cli --cluster create {IPlist 放在这里} --cluster-replicas 1
现在,如果 Pod 被意外删除或 AKS 停止服务,那么在 AKS 恢复后创建的 Pod 将具有不同的 IP。
我尝试故意删除 pod,当重新创建 pod 时,集群状态更改为“失败”(最初创建集群时“正常”)
此外,当我尝试将旧数据集放入集群时,会出现一条消息,告知“集群已关闭”
我已经展示了用于创建集群的 redis.conf 文件的代码
apiVersion: v1
kind: ConfigMap
metadata:
name: redis-cluster
namespace: redis
data:
update-node.sh: |
#!/bin/sh
REDIS_NODES="/data/nodes.conf"
sed -i -e "/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-
9]\{1,3\}/${POD_IP}/" ${REDIS_NODES}
exec "$@"
redis.conf: |+
cluster-enabled yes
cluster-require-full-coverage no
cluster-node-timeout 15000
cluster-config-file /data/nodes.conf
cluster-migration-barrier 1
appendonly yes
protected-mode no
Redis Cluster Nodes and Slots 相关数据如附件 redis cluster nodes and slots
【问题讨论】:
-
这似乎是一个 redis 问题,而不是 k8s
-
您是否尝试在 pod 内执行命令?有什么区别吗?
-
实际上没有区别,如果您查看快照,那么无论我从 pod 内部执行还是直接通过 kubectl 执行,都会出现相同的错误。问题是,一旦我删除了 Pod,statefulSet 实现生成的新 Pod 将导致不同的 IP,redis 只理解 IP。
-
是的,这也是redis相关的问题,在一篇博客中提到kubernetes服务集群IP可以在redis的配置文件中提及,我也这样做了,但不起作用。
标签: azure-aks redis-cluster kubernetes-statefulset