Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache zookeeper zookeeper状态集要求所有实例在升级后手动重新启动_Apache Zookeeper_Kubernetes Statefulset_Livenessprobe - Fatal编程技术网

Apache zookeeper 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实例,使其恢复工作。当我升级头盔时也会发生这种情况。因为当我升级头盔时,首

我正在为我的卡夫卡集群运行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才会起作用。因此,在每次头盔升级后,我必须手动重新启动所有实例

我的问题是:


这种行为的原因可能是什么?另外,在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服务请求。