Apache zookeeper zookeeper状态集要求所有实例在升级后手动重新启动
我正在为我的卡夫卡集群运行3个动物园管理员kubernetes statefulset。名为zookeeper-0、zookeeper-1、zookeeper-2。我使用ruok命令启用了活动性探测。如果任何StatefSet pod由于任何故障而重新启动,则仲裁将失败,zookeeper将停止工作,即使在失败的pod启动且其liveness probe响应ok之后 发生这种情况时,我必须手动重新启动所有zookeeper实例,使其恢复工作。当我升级头盔时也会发生这种情况。因为当我升级头盔时,首先重启的实例是zookeeper-2,然后是zookeeper-1,最后是zookeeper-0。但似乎只有当我同时启动所有实例时,zookeeper才会起作用。因此,在每次头盔升级后,我必须手动重新启动所有实例 我的问题是:Apache zookeeper zookeeper状态集要求所有实例在升级后手动重新启动,apache-zookeeper,kubernetes-statefulset,livenessprobe,Apache Zookeeper,Kubernetes Statefulset,Livenessprobe,我正在为我的卡夫卡集群运行3个动物园管理员kubernetes statefulset。名为zookeeper-0、zookeeper-1、zookeeper-2。我使用ruok命令启用了活动性探测。如果任何StatefSet pod由于任何故障而重新启动,则仲裁将失败,zookeeper将停止工作,即使在失败的pod启动且其liveness probe响应ok之后 发生这种情况时,我必须手动重新启动所有zookeeper实例,使其恢复工作。当我升级头盔时也会发生这种情况。因为当我升级头盔时,首
这种行为的原因可能是什么?另外,在kubernetes环境中,确保100%可靠的状态集zookeeper的最佳方法是什么?这是zookeeper V3.5.8中的一个错误, . 如果有人遇到这个问题,请使用最新的zookeeper 当您升级头盔时,实例将按相反的顺序部署。如果你有zookeeper-0,zookeeper-1,zookeeper-2。然后zookeeper-2将首先升级,然后是zookeeper-1,最后是zookeeper-0。如果您有5个实例,则此问题非常明显 因此,为了避开这个不稳定性问题,我添加了liveness和Ready probe。因此,当这个问题发生并自我修复时,zookeeper将自动重新启动 对于Kubernetes Statefulset::
livenessProbe:
exec:
command:
- sh
- -c
- /bin/liveness-check.sh 2181
initialDelaySeconds: 120 #Default 0
periodSeconds: 60
timeoutSeconds: 10
failureThreshold: 2
successThreshold: 1
readinessProbe:
exec:
command:
- sh
- -c
- /bin/readiness-check.sh 2181
initialDelaySeconds: 20
periodSeconds: 30
timeoutSeconds: 5
failureThreshold: 2
successThreshold: 1
其中脚本在Kubernetes ConfigMap中定义
data:
liveness-check.sh: |
#!/bin/sh
zkServer.sh status
readiness-check.sh: |
#!/bin/sh
echo ruok | nc 127.0.0.1 $1
如果由于某种原因docker映像中没有zkServer.sh脚本,则可以如下定义配置映射
readiness-check.sh: |
#!/bin/sh
OK=$(echo ruok | nc 127.0.0.1 $1)
if [ "$OK" == "imok" ]; then
exit 0
else
echo "Liveness Check Failed for ZooKeeper"
exit 1
fi
liveness-check.sh: |
#!/bin/sh
echo stat | nc 127.0.0.1 $1 | grep Mode
我遵循了这份文件。并将最小zookeeper实例数从3个更新为5个。这允许2个实例失败,但仍允许zookeeper服务请求。