【问题标题】:Fix elasticsearch broken cluster within kubernetes修复 Kubernetes 中的弹性搜索损坏集群
【发布时间】:2020-12-31 09:52:41
【问题描述】:

我部署了一个带有官方 Helm 图表 (https://github.com/elastic/helm-charts/tree/master/elasticsearch) 的 elasticsearch 集群。

Helm 有 3 个版本:

  • 主节点(3 个节点)
  • 客户端(1 个节点)
  • 数据(2 个节点)

集群运行良好,我通过删除主版本进行了崩溃测试,然后重新创建它。

之后master节点正常,数据节点报错:

Caused by: org.elasticsearch.cluster.coordination.CoordinationStateRejectedException: join validation on cluster state with a different cluster uuid xeQ6IVkDQ2es1CO2yZ_7rw than local cluster uuid 9P9ZGqSuQmy7iRDGcit5fg, rejecting

这是正常的,因为主节点是新的。

如何在不删除数据文件夹的情况下修复数据节点集群状态?

编辑:

我知道损坏的原因,我知道一个基本的解决方案是删除数据文件夹并重新启动节点(正如我在弹性论坛上看到的,很多类似的问题没有答案)。但我正在寻找一个生产感知解决方案,也许使用https://www.elastic.co/guide/en/elasticsearch/reference/current/node-tool.html 工具?

【问题讨论】:

    标签: elasticsearch kubernetes-helm


    【解决方案1】:

    使用elasticsearch-node 实用程序,可以重置集群状态,然后新节点可以加入另一个集群。

    棘手的事情是将此实用程序箱与 Docker 一起使用,因为必须停止 elasticsearch server

    使用 Kubernetes 的解决方案:

    1. 通过将 sts 缩放到 0 来停止 Pod:kubectl scale data-nodes --replicas=0
    2. 创建一个重置集群状态的 k8s 作业,并附加数据卷
    3. 为每个 PVC 应用作业
    4. 重新调整 sts 并尽情享受!

    job.yaml:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: test-fix-cluster-m[0-3]
    spec:
      template:
        spec:
          containers:
          - args:
            - -c
            - yes | elasticsearch-node detach-cluster; yes | elasticsearch-node remove-customs '*'
            # uncomment for at least 1 PVC
            #- yes | elasticsearch-node unsafe-bootstrap -v
            command:
            - /bin/sh
            image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
            name: elasticsearch
            volumeMounts:
            - mountPath: /usr/share/elasticsearch/data
              name: es-data
          restartPolicy: Never
          volumes:
          - name: es-data
            persistentVolumeClaim:
              claimName: es-test-master-es-test-master-[0-3]
    

    如果你有兴趣,这里是unsafe-bootstrap后面的代码:https://github.com/elastic/elasticsearch/blob/master/server/src/main/java/org/elasticsearch/cluster/coordination/UnsafeBootstrapMasterCommand.java#L83

    我在https://medium.com/@thomasdecaux/fix-broken-elasticsearch-cluster-405ad67ee17c写了一个小故事。

    【讨论】:

    • 帮助很大!我想知道为什么到目前为止没有人支持这个解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多