单个节点上单个索引的分片总数超出限制

edit

单个节点上单个索引的分片总数超出限制

edit

Elasticsearch 试图通过在集群中的节点之间分配数据(索引分片)来利用所有可用资源。

用户可能希望通过将 index.routing.allocation.total_shards_per_node 索引设置配置为自定义值(例如,在流量较大的索引情况下为 1)来影响此数据分布。 各种限制一个索引可以在一个节点上拥有的分片数量的配置 可能导致分片未分配,因为集群没有足够的节点来 满足索引配置。

为了修复这个问题,请按照以下步骤操作:

为了将分片分配,我们需要增加可以在节点上共存的分片数量。 我们将通过检查index.routing.allocation.total_shards_per_node的配置来实现这一点 索引设置,并增加那些有未分配分片的索引的配置值。

使用 Kibana

  1. 登录到 Elastic Cloud 控制台
  2. Elasticsearch Service面板上,点击您的部署名称。

    如果您的部署名称被禁用,您的 Kibana 实例可能不健康,在这种情况下,请与 Elastic 支持 联系。如果您的部署不包含 Kibana,您需要做的就是 首先启用它

  3. 打开您的部署的侧边导航菜单(位于左上角的Elastic标志下方),然后转到开发工具 > 控制台

    Kibana Console
  4. 检查具有未分配分片的索引的 index.routing.allocation.total_shards_per_node 索引设置

    GET /my-index-000001/_settings/index.routing.allocation.total_shards_per_node?flat_settings

    响应将会是这样的:

    {
      "my-index-000001": {
        "settings": {
          "index.routing.allocation.total_shards_per_node": "1" 
        }
      }
    }

    表示为my-index-000001索引配置的当前值,即一个节点上可以驻留的分片总数。

  5. 增加 一个节点上可以分配的分片总数到一个更高的值:

    PUT /my-index-000001/_settings
    {
      "index" : {
        "routing.allocation.total_shards_per_node" : "2" 
      }
    }

    索引 my-index-000001total_shards_per_node 配置的新值从之前的 1 增加到 2total_shards_per_node 配置也可以设置为 -1,这表示对于同一索引的分片数量没有上限,即一个节点上可以容纳相同索引的任意数量的分片。