ElasticSearch节点故障

ilo*_*ejq 4 amazon-web-services elasticsearch

在 AWS 上,我的 Elasticsearch 集群从 2B 文档减少到 900M 记录

重新定位碎片:4

显示时

活跃碎片:35

活跃主分片:34

(可能不相关,但这是其余的统计数据):

节点数量:9

数据节点数量:6

未分配的分片:17

跑步时

GET /_cluster/allocation/explain
Run Code Online (Sandbox Code Playgroud)

它返回:

{
  "index": "datauwu",
  "shard": 6,
  "primary": true,
  "current_state": "unassigned",
  "unassigned_info": {
    "reason": "NODE_LEFT",
    "at": "2019-10-31T17:02:11.258Z",
    "details": "node_left[removedforsecuritybecimparanoid1]",
    "last_allocation_status": "no_valid_shard_copy"
  },
  "can_allocate": "no_valid_shard_copy",
  "allocate_explanation": "cannot allocate because a previous copy of the primary shard existed but can no longer be found on the nodes in the cluster",
  "node_allocation_decisions": [
    {
      "node_id": "removedforsecuritybecimparanoid2",
      "node_name": "removedforsecuritybecimparanoid2",
      "node_decision": "no",
      "store": {
        "found": false
      }
    },
    {
      "node_id": "removedforsecuritybecimparanoid3",
      "node_name": "removedforsecuritybecimparanoid3",
      "node_decision": "no",
      "store": {
        "found": false
      }
    },
    {
      "node_id": "removedforsecuritybecimparanoid4",
      "node_name": "removedforsecuritybecimparanoid4",
      "node_decision": "no",
      "store": {
        "found": false
      }
    },
    {
      "node_id": "removedforsecuritybecimparanoid5",
      "node_name": "removedforsecuritybecimparanoid5",
      "node_decision": "no",
      "store": {
        "found": false
      }
    },
    {
      "node_id": "removedforsecuritybecimparanoid6",
      "node_name": "removedforsecuritybecimparanoid6",
      "node_decision": "no",
      "store": {
        "found": false
      }
    },
    {
      "node_id": "removedforsecuritybecimparanoid7",
      "node_name": "removedforsecuritybecimparanoid7",
      "node_decision": "no",
      "store": {
        "found": false
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我对这到底意味着什么有点困惑,这是否意味着我的elasticsearch集群没有丢失数据,而是将其重新定位到不同的分片中,或者它找不到分片?

如果找不到分片,是否意味着我的数据丢失了?如果是这样,可能是什么原因,我该如何防止将来发生这种情况?

我在索引数据时没有设置副本,而副本会在索引时减慢速度。

也不是,我的记录计数一度下降到 400m,但随后又随机上升到 900m。我不知道这意味着什么,任何见解将不胜感激。

Chr*_*ald 5

“原因”:“NODE_LEFT”

和:

我在索引数据时没有设置副本,而副本会在索引时减慢速度。

如果保存主分片的节点已经消失,那么是的,您的数据就消失了。毕竟,如果没有副本,那么如果主(也是唯一)分片不再是集群的一部分,那么集群将从哪里检索数据?您需要将保存这些分片的节点备份并将其添加到集群中,否则数据就会消失。

错误消息显示“您希望我为我知道存在的该索引分配一个主分片,但曾经有该主分片的另一个版本无法再找到,我不会再次分配它,以防万一之前的初选回来了。”

allocate_stale_primary您可以通过使用( doc )执行重新路由来强制 Elasticsearch 重新分配主分片(并明确接受前一个主分片中的数据已消失):

curl -H 'Content-Type: application/json' \
    -XPOST '127.0.0.1:9200/_cluster/reroute?pretty' -d '{
    "commands" : [ {
        "allocate_stale_primary" :
            {
              "index" : "datauwu", "shard" : 6,
              "node" : "target-data-node-id",
              "accept_data_loss" : true
            }
        }
    ]
}'
Run Code Online (Sandbox Code Playgroud)

除了使用一次性数据进行开发之外,关闭副本通常是一个坏主意。

也不是,我的记录计数一度下降到 400m,但随后又随机上升到 900m。我不知道这意味着什么,任何见解将不胜感激。

发生这种情况是因为分片在集群中不可见。如果正在分配、重新定位或恢复分片的所有副本,则可能会发生这种情况。这对应于 RED 集群状态。您可以通过确保至少有 1 个副本来缓解这种情况(尽管理想情况下您设置了足够数量的副本以承受集群中 N 个数据节点的丢失)。这使得 Elasticsearch 可以将一个分片保留为主分片,同时移动其他分片。

如果您只有主分片而没有副本,那么如果主分片正在恢复或重新定位,则该分片中的数据将在集群中不可见。一旦分片再次处于活动状态,其中的文档就会变得可见。