单个节点上单个索引的分片总数超出限制
edit单个节点上单个索引的分片总数超出限制
editElasticsearch 试图通过在集群中的节点之间分配数据(索引分片)来利用所有可用资源。
用户可能希望通过将 index.routing.allocation.total_shards_per_node
索引设置配置为自定义值(例如,在流量较大的索引情况下为 1)来影响此数据分布。
各种限制一个索引可以在一个节点上拥有的分片数量的配置
可能导致分片未分配,因为集群没有足够的节点来
满足索引配置。
为了修复这个问题,请按照以下步骤操作:
为了将分片分配,我们需要增加可以在节点上共存的分片数量。
我们将通过检查index.routing.allocation.total_shards_per_node的配置来实现这一点
索引设置,并增加那些有未分配分片的索引的配置值。
使用 Kibana
- 登录到 Elastic Cloud 控制台。
-
在Elasticsearch Service面板上,点击您的部署名称。
如果您的部署名称被禁用,您的 Kibana 实例可能不健康,在这种情况下,请与 Elastic 支持 联系。如果您的部署不包含 Kibana,您需要做的就是 首先启用它。
-
打开您的部署的侧边导航菜单(位于左上角的Elastic标志下方),然后转到开发工具 > 控制台。
-
检查具有未分配分片的索引的
index.routing.allocation.total_shards_per_node索引设置。GET /my-index-000001/_settings/index.routing.allocation.total_shards_per_node?flat_settings
响应将会是这样的:
-
增加 一个节点上可以分配的分片总数到一个更高的值:
为了将分片分配,您可以向Elasticsearch集群添加更多节点,并将索引的目标层级节点角色分配给新节点。
要检查索引的目标分配层级,请使用获取索引设置
API 来检索 index.routing.allocation.include._tier_preference 设置的配置值:
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集群添加更多节点,
检查index.routing.allocation.total_shards_per_node
索引设置并增加配置的值将
允许在同一节点上分配更多分片。
-
检查具有未分配分片的索引的
index.routing.allocation.total_shards_per_node索引设置。GET /my-index-000001/_settings/index.routing.allocation.total_shards_per_node?flat_settings
响应将会是这样的:
-
增加可以在一个节点上分配的分片总数,或者将该值重置为无限制(
-1):PUT /my-index-000001/_settings { "index" : { "routing.allocation.total_shards_per_node" : -1 } }