每个节点的分片总数已达到
编辑每个节点的分片总数已达到
编辑Elasticsearch 尝试通过在集群节点之间分配数据(索引分片)来利用所有可用资源。
用户可能希望通过配置 cluster.routing.allocation.total_shards_per_node
系统设置来影响此数据分配,以限制系统中单个节点上可以托管的分片数量,而不管索引如何。各种限制单个节点上可以托管多少分片的配置会导致分片未分配,因为集群没有足够的节点来满足配置。
为了解决此问题,请按照以下步骤操作
为了让分片分配,我们需要增加集群中节点上可以并置的分片数量。我们将通过检查系统范围内的 cluster.routing.allocation.total_shards_per_node
集群设置 并增加配置的值来实现。
使用 Kibana
- 登录到 Elastic Cloud 控制台。
-
在 Elasticsearch 服务 面板中,点击您的部署名称。
如果您的部署名称被禁用,则您的 Kibana 实例可能不健康,在这种情况下,请联系 Elastic 支持。如果您的部署不包含 Kibana,您只需 先启用它。
-
打开部署的侧边导航菜单(位于左上角的 Elastic 徽标下方),然后转到 开发工具 > 控制台。
-
检查
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
响应将如下所示
-
增加单个节点上可以分配的分片总数的值到更高的值
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);
为了让分片分配,您可以向 Elasticsearch 集群添加更多节点,并将索引的目标层级 节点角色 分配给新节点。
要检查索引的目标分配层级,请使用 获取索引设置 API 来检索 index.routing.allocation.include._tier_preference
设置的配置值
resp = client.indices.get_settings( index="my-index-000001", name="index.routing.allocation.include._tier_preference", flat_settings=True, ) print(resp)
response = client.indices.get_settings( index: 'my-index-000001', name: 'index.routing.allocation.include._tier_preference', flat_settings: true ) puts response
const response = await client.indices.getSettings({ index: "my-index-000001", name: "index.routing.allocation.include._tier_preference", flat_settings: "true", }); console.log(response);
GET /my-index-000001/_settings/index.routing.allocation.include._tier_preference?flat_settings
响应将如下所示
{ "my-index-000001": { "settings": { "index.routing.allocation.include._tier_preference": "data_warm,data_hot" } } }
表示此索引允许分配到的数据层级节点角色的逗号分隔列表,列表中的第一个角色优先级最高,即索引的目标层级。例如,在此示例中,层级首选项是 |
或者,如果不想向 Elasticsearch 集群添加更多节点,可以检查系统范围内的 cluster.routing.allocation.total_shards_per_node
集群设置 并增加配置的值
-
检查具有未分配分片的索引的
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
响应将如下所示
-
增加单个节点上可以分配的分片总数的值到更高的值
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);