如何找到数据节点失败的原因? (弹性搜索 6.5)

How do I find the reason for a failed data node? (Elasticsearch 6.5)

我们已经 运行 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 中,堆 space 对于所有节点都是默认的 1G,除了数据节点是 26G。

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

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

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

"CorruptIndexException" 表示某些段已损坏。可能是因为 HDD 上的坏块(坏扇区)。我建议在 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可能会导致数据丢失。尽管考虑到数据现在已损坏并且无法恢复。