ElasticSearch节点故障

ilovejq

我的Elasticsearch集群显示从AWS的2B文档下降到900M记录

碎片迁移:4

虽然显示

活跃碎片:35

主动主碎片:34

(可能无关紧要,但这是其余数据):

节点数:9

数据节点数:6

未分配的碎片:17

跑步时

GET /_cluster/allocation/explain

它返回:

{
  "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
      }
    }
  ]
}

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

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

我没有建立副本,因为我正在索引数据,而副本在建立索引时会减慢速度。

另外,我的记录数曾经下降到400m,然后又随机上升到900m。我不知道这意味着什么,任何见识将不胜感激。

克里斯·希尔德

“原因”:“ NODE_LEFT”

和:

我没有建立副本,因为我正在索引数据,而副本在建立索引时会减慢速度。

如果拥有主碎片的节点已消失,则是的,您的数据已消失。毕竟,如果没有副本,那么如果主(也是唯一的)分片不再是集群的一部分,那么集群将从何处检索数据?您要么需要将持有这些分片的节点备份起来,然后将其添加到集群中,要么数据就消失了。

错误消息是:“您希望我为该索引分配一个主碎片,但我知道该索引已经存在,但是曾经找不到该主碎片的另一个版本,以防万一,我不会再分配它以前的小学又回来了。”

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

curl -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
            }
        }
    ]
}'

除了使用一次性数据进行开发以外,为其他任何事情都关闭副本通常是一个坏主意。

另外,我的记录数曾经下降到400m,然后又随机上升到900m。我不知道这意味着什么,任何见识将不胜感激。

发生这种情况是因为分片在群集中不可见。如果分片的所有副本都已分配,重定位或恢复,则可能发生这种情况。这对应于RED群集状态。您可以通过确保至少有1个副本来减轻它(尽管理想情况下,您设置了足够数量的副本以抵抗群集中N个数据节点的丢失)。这样,Elasticsearch可以将一个碎片作为主要碎片,而其他碎片则可以移动。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章