每个节点的分片总数已达到

编辑

每个节点的分片总数已达到

编辑

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

用户可能希望通过配置 cluster.routing.allocation.total_shards_per_node 系统设置来影响此数据分配,以限制系统中单个节点上可以托管的分片数量,而不管索引如何。各种限制单个节点上可以托管多少分片的配置会导致分片未分配,因为集群没有足够的节点来满足配置。

为了解决此问题,请按照以下步骤操作

为了让分片分配,我们需要增加集群中节点上可以并置的分片数量。我们将通过检查系统范围内的 cluster.routing.allocation.total_shards_per_node 集群设置 并增加配置的值来实现。

使用 Kibana

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

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

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

    Kibana Console
  4. 检查 cluster.routing.allocation.total_shards_per_node 集群设置

    resp = client.cluster.get_settings(
        flat_settings=True,
    )
    print(resp)
    response = client.cluster.get_settings(
      flat_settings: true
    )
    puts response
    const response = await client.cluster.getSettings({
      flat_settings: "true",
    });
    console.log(response);
    GET /_cluster/settings?flat_settings

    响应将如下所示

    {
      "persistent": {
        "cluster.routing.allocation.total_shards_per_node": "300" 
      },
      "transient": {}
    }

    表示系统中单个节点上可以驻留的分片总数的当前配置值。

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

    resp = client.cluster.put_settings(
        persistent={
            "cluster.routing.allocation.total_shards_per_node": 400
        },
    )
    print(resp)
    response = client.cluster.put_settings(
      body: {
        persistent: {
          'cluster.routing.allocation.total_shards_per_node' => 400
        }
      }
    )
    puts response
    const response = await client.cluster.putSettings({
      persistent: {
        "cluster.routing.allocation.total_shards_per_node": 400,
      },
    });
    console.log(response);
    PUT _cluster/settings
    {
      "persistent" : {
        "cluster.routing.allocation.total_shards_per_node" : 400 
      }
    }

    系统范围内的 total_shards_per_node 配置的新值从之前的 300 增加到 400total_shards_per_node 配置也可以设置为 null,这意味着对于系统中单个节点上可以并置多少分片没有上限。