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

编辑

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

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 集群设置

    response = client.cluster.get_settings(
      flat_settings: true
    )
    puts response
    GET /_cluster/settings?flat_settings

    响应将如下所示

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

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

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

    response = client.cluster.put_settings(
      body: {
        persistent: {
          'cluster.routing.allocation.total_shards_per_node' => 400
        }
      }
    )
    puts response
    PUT _cluster/settings
    {
      "persistent" : {
        "cluster.routing.allocation.total_shards_per_node" : 400 
      }
    }

    系统范围的 total_shards_per_node 配置的新值为从之前的 300 增加到 400total_shards_per_node 配置也可以设置为 null,这表示关于可以在系统中的一个节点上并置多少分片没有上限。