这是 zookeeper v 3.5.8 中的一个错误,
https: //issues.apache.org/jira/browse/ZOOKEEPER-3829 。如果有人遇到此问题,请使用最新的 zookeeper。
当您执行 helm upgrade 时,实例将以相反的顺序部署。所以如果你有 zookeeper-0、zookeeper-1、zookeeper-2。然后zookeeper-2将首先升级,然后是zookeeper-1,最后是zookeeper-0。如果您有 5 个实例,则此问题非常明显。
因此,为了解决这个不稳定问题,我添加了 liveness 和 readiness 探测。所以当这个问题发生并自我修复时,zookeeper 会自动重启。
对于 Kubernetes 状态集::
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