【问题标题】:How do I find the reason for a failed data node? (Elasticsearch 6.5)如何找到数据节点失败的原因? (弹性搜索 6.5)
【发布时间】:2019-06-11 13:52:13
【问题描述】:

我们已经运行 elasticsearch 几年了。我们运行了一个 2 节点的简单集群(1.7 版)。该集群支持一些内部实用程序,因此使用率相对较低。在过去的 4 年中,该集群从未崩溃、重新启动甚至打嗝。

我们决定建立一个更加注重生产的集群。我做了很多研究,这是我为新集群提出的:

2 Client Nodes (a.k.a. Coordinating nodes) [4 core, 8GB memory, 300GB HD, Virtual]
3 Master Nodes[4 core, 8GB memory, 300GB HD, Virtual] 
3 Data Nodes[48 core, 64GB memory, 3TB HD (Raid 0), Physical] 

这个集群运行的是 ES 6.5.4 CENTOS 7(我计划很快升级到 7.1)。 所有节点都在本质上是普通配置上运行。我们只有大约 500 万个文档,集群的数据总量不到 60GB。配置如下所示:

# Example Master Config
cluster.name: MYCLUSTER
node.name: MASTER01
node.master: true
node.data: false
node.ingest: false
cluster.remote.connect: false
path.repo: /repo/nfs/path

# Example Data Config
cluster.name: MYCLUSTER
node.name: DATA01
node.master: false
node.data: true
node.ingest: false
cluster.remote.connect: false
path.repo: /repo/nfs/path

# Example Client Config
cluster.name: MYCLUSTER
node.name: CLIENT01
node.master: false
node.data: false
node.ingest: false
cluster.remote.connect: false


# All have
http.port: MY_ES_PORT
discovery.zen.ping.unicast.hosts: MY_LIST_OF_SERVERS(8)
discovery.zen.minimum_master_nodes: 2

在 jvm.options 中,所有节点的堆空间默认为 1G,但数据节点为 26G。

问题是我的数据节点不断崩溃。在过去 3 天里,我的 3 个数据节点中的一个发生了 3 次崩溃。将其重新上线并摆脱损坏的索引片段已经花费了许多小时的工作和学习。我不知道是什么让他们崩溃。我在日志中看到涉及“失败节点”和“CorruptIndexException”的错误,但我不知道是什么导致实际节点失败。我检查了所有服务器的日志文件,虽然它们都显示错误,但似乎没有任何东西可以帮助我查明失败的原因。 3 个数据节点中有 2 个发生故障。

互联网似乎表明最常见的原因是硬件。不幸的是,我没有看到任何证据表明硬件是问题所在。

任何人都可以就如何找出数据节点崩溃的原因提供任何建议吗?

【问题讨论】:

    标签: elasticsearch centos7


    【解决方案1】:

    “CorruptIndexException”表示某些段已损坏。可能是因为硬盘上的坏块(坏扇区)。我建议在 HDD 上运行 checkdisk,然后使用 elasticsearch-shard 工具(位于 $ELASTIC-HOME/bin/)来检查和修复损坏的段。也许段路径记录在日志文件中。

    elasticsearch-shard 快速指南:

    ./elasticsearch-shard remove-corrupted-data --index cl6-blah-blah-index  --shard-id 3 
    

    请注意,elasticsearch-shard 仅在 6.5 上可用。

    另一个重要提示:fsck 和 elasticsearch-shard 可能会导致数据丢失。尽管考虑到数据现在已损坏并且无法恢复。

    【讨论】:

    • 硬件似乎是最有可能出现的问题。尝试运行 badblocks 会导致无法找到某些共享库的错误——在另一台物理上相同的服务器上运行相同的命令可以正常工作。我会看看我能找到什么并报告。也感谢有关该工具的提示——我认为它仅在 7.1 中可用。我想我看错了。
    • 添加到此... DATA03 无法运行 badblocks 命令,因为“缺少”库,列出的库名称是乱码。 DATA01 和 DATA02 是相同的服务器没有这个问题。真的盯着看起来像 DATA03 有一些损坏。要将其从集群中拉出并执行一些 fscks。我会告诉你我发现了什么。
    • 情节变厚了......因此,在将 DATA03 从集群中取出后,所有内容都迁移到了剩余的数据服务器,但一个索引“crawledinventory_v1”除外。我尝试了 /usr/share/elasticsearch/bin/elasticsearch-shard remove-corrupted-data --index crawledinventory_v1 --shard-id 2 但在 VM 的初始化中遇到了一个很大的 java 异常。错误:java.lang.ClassFormatError:类文件 java/nio/CharBuffe 中的未知常量标记 48
    • 现在已经好几天了,没有更多损坏的索引。我将我的 raid 配置从 0 切换到 5,并且在我拥有的特定服务器上似乎可以解决问题。阅读本文的任何人如果遇到极其频繁的损坏索引,都应该通过查看硬件来开始故障排除——这很可能是罪魁祸首。
    • 自我们修复硬件以来的 8 天。系统稳定,没有损坏的索引。
    猜你喜欢
    • 1970-01-01
    • 2018-01-15
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 2013-06-16
    相关资源
    最近更新 更多