没有足够的节点来分配所有分片副本
edit没有足够的节点来分配所有分片副本
edit在不同节点上分发数据副本(索引分片副本)可以并行处理请求,从而加快搜索查询的速度。这可以通过增加副本分片的数量来实现,最多可以增加到最大值(节点总数减一),这也起到了保护硬件故障的作用。如果索引有首选层级,Elasticsearch 只会将该索引的数据副本放置在目标层级的节点上。
如果在分配所有分片副本时遇到节点不足的警告,您可以通过向集群(或层,如果正在使用层)添加更多节点,或者通过减少index.number_of_replicas索引设置来影响此行为。
为了修复这个问题,请按照以下步骤操作:
获取副本分片分配的一种方法是添加一个可用区。这将增加Elasticsearch集群中的数据节点数量,以便可以分配副本分片。这可以通过编辑您的部署来完成。但首先,您需要发现索引正在为目标分配的层级。可以使用Kibana来完成此操作。
使用 Kibana
- 登录到 Elastic Cloud 控制台。
-
在Elasticsearch Service面板上,点击您的部署名称。
如果您的部署名称被禁用,您的 Kibana 实例可能不健康,在这种情况下,请与 Elastic 支持 联系。如果您的部署不包含 Kibana,您需要做的就是 首先启用它。
-
打开您的部署的侧边导航菜单(位于左上角的Elastic标志下方),然后转到开发工具 > 控制台。
要检查索引正在为目标分配的层级,请使用获取索引设置
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"
}
}
}
|
表示此索引允许分配的数据层节点角色的逗号分隔列表,列表中的第一个是优先级最高的层,即索引的目标层。
例如,在此示例中,层偏好是 |
现在您已经知道了层级,您希望增加该层级中的节点数量,以便可以分配副本。为此,您可以增加每个区域的节点数量,以增加您已经在使用的可用区域中的节点数量,或者增加可用区域的数量。通过点击屏幕左上角的三条水平线并选择管理此部署,返回到部署的登录页面。在该页面上点击管理按钮,并选择编辑部署。请注意,您必须登录到https://cloud.elastic.co/才能执行此操作。在Elasticsearch部分,找到无法分配副本分片的层级。
-
选项 1:增加每个区域的大小
- 查看每个区域的大小下拉菜单中的值。您在此处选择的每64 GB RAM,每个区域将创建一个节点。如果您当前选择的RAM为64 GB或更少,则每个区域有一个节点。如果您选择128 GB RAM,则每个区域将获得2个节点。如果您选择192 GB RAM,则每个区域将获得3个节点,依此类推。如果该值小于最大可能值,您可以选择该层级的更高值以添加更多节点。
-
选项 2:增加可用区的数量
- 找到可用区选择。如果小于3,您可以选择该层级的更多可用区。
如果无法增加每个区域的大小或可用区的数量,您可以减少索引数据的副本数量。我们将通过检查index.number_of_replicas索引设置并减少配置的值来实现这一点。
- 访问 Kibana,如上所述。
-
检查
index.number_of_replicas索引设置。GET /my-index-000001/_settings/index.number_of_replicas
响应将会是这样的:
-
使用
_cat/nodesAPI 查找目标层级的节点数量:GET /_cat/nodes?h=node.role
响应将如下所示,每个节点包含一行:
himrst mv himrst
您可以计算包含表示目标层的字母的行数,以了解您有多少个节点。详情请参见查询参数。上面的示例中有两行包含
h,因此热层中有两个节点。 -
减少该索引所需的副本分片总数。由于副本分片不能与主分片位于同一节点上以实现高可用性,因此新值需要小于或等于上述节点数减一。由于上述示例在热层中找到了2个节点,因此
index.number_of_replicas的最大值为1。索引配置
index.number_of_replicas的新值从之前的2减少到1。它可以设置为低至 0,但对于 可搜索快照索引 以外的索引,将其配置为 0 可能会导致节点重启期间暂时不可用或数据损坏时永久数据丢失。
为了使副本分片被分配,您可以向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.number_of_replicas索引设置并减少配置的值:
-
检查未分配副本分片的索引的
index.number_of_replicas索引设置:GET /my-index-000001/_settings/index.number_of_replicas
响应将会是这样的:
-
使用
_cat/nodesAPI 查找目标层级的节点数量:GET /_cat/nodes?h=node.role
响应将如下所示,每个节点包含一行:
himrst mv himrst
您可以计算包含表示目标层的字母的行数,以了解您有多少个节点。详情请参见查询参数。上面的示例中有两行包含
h,因此热层中有两个节点。 -
减少 该索引所需的副本分片总数。由于副本分片不能与主分片位于同一节点上以实现 高可用性, 新值需要小于或等于上述节点数减一。由于上述示例在热层中找到了2个节点,
index.number_of_replicas的最大值为1。索引配置
index.number_of_replicas的新值从之前的2减少到1。它可以设置为低至 0,但对于 可搜索快照索引 以外的索引,将其配置为 0 可能会导致节点重启期间暂时不可用,或在数据损坏的情况下导致永久数据丢失。