【问题标题】:Elasticsearch Index red with no shards assigned未分配分片的 Elasticsearch 索引红色
【发布时间】:2020-06-04 11:44:11
【问题描述】:

我正在使用 ELK 堆栈,但我的 metricbeat 索引名为 metricbeat-7.4.0-000001 没有分配分片。

关于我的 ELK 堆栈的信息:

  • Elastic、Logstask、Kibana 版本:7.4.0(我打算在一切顺利后进行更新)
  • 单节点在 Ubuntu 18.04 LTS 上(我也打算尽快升级 - 我早在 20.04 之前就开始了这个项目)
  • 2 x Xeon E5-2620(6 核,12 线程 @ 2GHz),64GB RAM
  • 系统负载平均为 0.03,RAM 消耗略低于 7GB,因此我很难认为服务器的性能不够。
  • 1TB 磁盘空间,147 GB 正在使用,所以我也看不到它是磁盘消耗

我已经为此苦苦挣扎了几个星期,遵循了无数的教程和支持页面,但都无济于事。据我所知,如果没有磁盘空间,或者服务器没有可用的内存/处理资源,这是一个常见问题。

没有从头开始重新创建我的集群,我觉得我已经尝试了一切。删除的索引、重新导入所有 metricbeat 配置(索引模板、生命周期策略)、重新路由(有和没有重试失败)的次数超出了我的计算。 ILM 策略似乎确实相互关联,但没有分配分片。

重新创建索引模板时,我会停止 logstash(以防止任何不希望的索引创建),导出 json 然后在 Kibana 开发工具中重新导入它。然后,我只修改索引模板以更改索引模式以匹配我的索引,从默认的metricbeat-*metricbeat-7.4.0-*。我的索引是使用 beatname-version-autoincrement 模式创建的,例如 metricbeat-7.4.0-000001

这并不是唯一让我感到悲伤的指标。我在 winlogbeat 索引和心跳索引方面遇到了同样的问题,但我怀疑不知何故,我已经设法解决了他们的这个特殊问题。

当我对此索引的分配运行解释时,它告诉我以下内容:

{
  "index" : "metricbeat-7.4.0-000001",
  "shard" : 0,
  "primary" : true,
  "current_state" : "unassigned",
  "unassigned_info" : {
    "reason" : "INDEX_CREATED",
    "at" : "2020-06-03T04:23:31.865Z",
    "last_allocation_status" : "no"
  },
  "can_allocate" : "no",
  "allocate_explanation" : "cannot allocate because allocation is not permitted to any of the nodes",
  "node_allocation_decisions" : [
    {
      "node_id" : "OQ3AFLyhRcao1z2es2p79w",
      "node_name" : "server.network.local",
      "transport_address" : "ipaddress:9300",
      "node_attributes" : {
        "rack_id" : "main",
        "ml.machine_memory" : "67501658112",
        "xpack.installed" : "true",
        "ml.max_open_jobs" : "20"
      },
      "node_decision" : "no",
      "weight_ranking" : 1,
      "deciders" : [
        {
          "decider" : "awareness",
          "decision" : "NO",
          "explanation" : "node does not contain the awareness attribute [main]; required attributes cluster setting [cluster.routing.allocation.awareness.attributes=main]"
        }
      ]
    }
  ]
}

但是,我在我的 elasticsearch.yml 中分配了node.attr.rack_id: main,这没有什么区别。但是,由于这是一个单一节点,我不明白为什么它很难确定将其分配到哪里,因为缺少选项。

我的下一个怀疑是,也许它只是需要一点时间来弄清楚。我在某处读到 Elasticsearch 每 15 分钟运行一次生命周期策略,想知道这是否可能涉及分配分片?但是,考虑到世界上所有的耐心(或者至少值得几个小时),我没有发现任何变化 - 我什至重新启动并等到第二天,仍然无济于事。

最近,我重新创建了索引(多次)。当前的这个只有几个小时的历史,并且具有新的索引,但仍然存在相同的问题。

当我搜索我的碎片时,我会得到一些包含以下内容的东西。我可以看到我对 heartbeat 的期望,但 metricbeat 主索引没有显示分片。

heartbeat-7.4.0-000001          0 p STARTED         0    283b ipaddress server.network.locak
heartbeat-7.4.0-000001          0 r UNASSIGNED                            
metricbeat-7.4.0-000001         0 p UNASSIGNED                            
metricbeat-7.4.0-000001         0 r UNASSIGNED                            

以下评论删除了我的 elasticsearch.yml 版本:

node.name: auditsvr.ctperth.local
node.attr.rack_id: main
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: ipaddress
discovery.seed_hosts: ["ipaddress"]
discovery.type: single-node
xpack.monitoring.collection.enabled: true
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.key: cert.key
xpack.security.transport.ssl.certificate: cert.crt
xpack.security.transport.ssl.certificate_authorities: ca-cert.crt
xpack.security.transport.ssl.verification_mode: none

metricbeat 也是如此:

metricbeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 1
  index.codec: best_compression
setup.kibana:
  host: "http://server.network.local:80"
output.logstash:
  hosts: ["ipaddress:5044"]
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~
logging.level: info
logging.to_files: true
logging.files:
  path: /var/log/metricbeat
  name: metricbeat
  keepfiles: 7
  permissions: 0644
setup.ilm.enabled: auto
setup.ilm.rollover_alias: "metricbeat"
setup.ilm.pattern: "{now/d}-000001"

我的下一步是重新开始,但我只能想象这是一个配置问题,这意味着我需要重新开始。我觉得这需要比我更熟悉 Elastic 的人,我通常可以弄清楚这些事情,但需要对这个有一点指导。

提前欣赏

更新

根据 Val 的要求,请在此处找到 metricbeat 索引模板:

https://sandbox.michael-thompson.net/StackOverflow/62169773/metricbeat-7.4.0%20Index%20Template.json

这里是集群设置:

https://sandbox.michael-thompson.net/StackOverflow/62169773/clustersettingsincludedefaultstrue.json

不幸的是,它们对于 pastebin 来说太大了。

谢谢

【问题讨论】:

  • 能否也发布metricbeat-7.4.0-* 索引模板(尤其是设置部分)?您可以从 elasticsearch.yml 文件中删除 node.attr.rack_id 设置,因为它在单节点安装中没有用。
  • 你也可以发布你从GET _cluster/settings?include_defaults=true得到的东西吗?
  • 嗨 Val,我不得不在外部链接这些,因为它们非常大 - 实际上对于 pastebin 来说太大了。我已经更新了我原来的答案。谢谢。

标签: elasticsearch elastic-stack


【解决方案1】:

有问题的集群设置如下,知道它是如何到达那里的吗?

  "persistent" : {
    "cluster" : {
      "routing" : {
        "allocation" : {
          "awareness" : {
            "attributes" : "main"
          }
        }
      }
    },

所以有两种方法可以解决这种情况。在这两种情况下,您都可以从 elasticsearch.yml 中删除以下设置,因为它没有用:

node.attr.rack_id: main

选项 A:

您需要删除以下集群设置,因为它对单节点设置没有意义。运行:

PUT /_cluster/settings
{
    "persistent" : {
        "cluster.routing.allocation.awareness.attributes" : null
    }
}

选项 B:

保留集群设置并将以下节点属性添加到elasticsearch.yml,以便集群设置(原样)有意义:

node.attr.main: whatever

此外,如果您阅读更多有关 cluster allocation awareness 的信息,将会有所帮助,因为使用单节点设置并没有真正的意义。

【讨论】:

  • 感谢 Val,我已按照您的建议删除了此设置,它似乎解决了我的问题。我确实在遵循有关修复另一个未分配分片问题的文档时添加了自己的设置,但我相信我设法解决了这个问题,并且它可能不相关。当然,我不知道我打开的蠕虫罐头。我会稍微研究一下那个分配。感谢您的帮助,非常感谢。
  • 太棒了,很高兴它有帮助,你的集群又是绿色的......实际上它是黄色的,因为你有副本,但它比红色更好:-)
  • 嗯,这比我想要的更有价值。我从来不知道为什么我的索引是黄色的,现在我禁用了副本,一切都是绿色的。再次感谢!
猜你喜欢
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
  • 2011-08-04
  • 2014-07-02
相关资源
最近更新 更多