如何重新平衡 Amazon Elasticsearch Service 集群中不均匀的分区分布?

上次更新时间:2020 年 8 月 7 日

Amazon Elasticsearch Service (Amazon ES) 域中的磁盘空间在节点间分布不均匀。因此,磁盘使用将发生严重倾斜。如何重新平衡我的节点分布?

简短描述

磁盘使用可能会因为以下原因发生严重倾斜:

  • 集群中分区大小不均匀。尽管 Amazon ES 在节点之间均匀分布分区数量,但不同的分区大小可能会要求不同的磁盘空间量。
  • 节点上的可用磁盘空间。(有关更多信息,请参阅 Elasticsearch 网站上的基于磁盘的分区分布。)
    不正确的分片分配策略。(有关更多信息,请参阅简化 Elasticsearch 分区分配。)

要重新平衡 Elasticsearch 集群中的分区分配,请考虑以下方法:

  • 检查分区分配、分区大小和索引分区策略。
  • 确保索引间的分区大小相等。
  • 将分区大小保持在 10GB 与 50GB 之间,以获得更好的性能。
  • 添加更多的数据节点到您的 Elasticsearch 集群中。
  • 更新您的分区策略。
  • 删除旧索引或未使用的索引,以释放磁盘空间。

解决方法

检查分区分配、分区大小和索引分区策略

要检查分配给每个节点的分区数量和每个节点上使用的磁盘空间量,请使用以下 API:

$ curl -XGET ES_Endpoint/_cat/allocation?v

要检查分配给每个节点的分区和每个分区的大小,请使用以下 API:

$ curl -XGET ES_Endpoint/_cat/shards?v

注意:此 API 显示,不同索引的分区大小可能会有所不同。

索引的不均匀分区策略可能会导致数据偏斜,其中较大索引的分区至驻留在几个节点上。使用以下 API 检查索引的分区策略:

$ curl -XGET ES_Endpoint/_cat/indices?v

确保索引间的分区大小相等

如果索引大小有很大不同,请使用翻转索引 API 在达到特定索引大小时创建新索引。或者,您可以使用 索引状态管理 (ISM) 为 Amazon ES 7.1 版及以上版本创建新索引。有关使用 ISM 滚动别名的更多信息,请参阅 Elasticsearch 网站上的翻转

将分区大小保持在 10GB 与 50GB 之间,以获得更好的性能

如果您有一个大型的实例类,使用 Amazon Elasticsearch Service 的 PB 级别来确定分区大小。例如,由于有更多可用资源,具有多个 i3.16xlarge.elasticsearch 实例的 Amazon ES 域最多可以支持 100GB 的分区大小。有关分区策略的更多信息,请参阅选择分区数量

添加更多的数据节点到您的 Elasticsearch 集群中

如果您的 Elasticsearch 集群已达到较高的磁盘使用水平,则添加更多数据节点到您的集群中。添加数据节点也会添加更多资源,以提高集群性能。

注:如果缺少可用的存储空间,Amazon ES 不会自动重新平衡集群。因此,如果某个数据节点的可用存储空间用完,集群将阻止任何写入操作。有关磁盘空间管理的更多信息,请参阅如何添加存储空间到 Amazon Elasticsearch Service (Amazon ES) 域中?

更新您的分片策略

默认情况下,Amazon ES 的分区策略为 5:1,其中每个索引被分为五个主分区。在每个索引中,每个主分区还有自己的副本。Amazon ES 将主分区和副本分区自动分配到单独的数据节点中,以确保有备份可供发生故障时使用。

要修改 Amazon ES 的默认行为,请设计您的索引,以便按大小均匀分布分区:

  • 对于现有索引,请使用重新索引 API 更改主分区的数量。_reindex API 可用于将较小的索引合并到较大的索引中,或者可用于拆分较大的索引。将较大的索引拆分为更多主分区时,分区大小减小。
  • 对于新索引,请使用模板 API 定义主分区和副本分区的数量。

然后,更新您的分区的索引设置。有关更多信息,请参阅 Elasticsearch 网站上的更新索引设置

删除旧索引或未使用的索引,以释放磁盘空间

Amazon ES 7.1 版及以上版本支持索引状态管理。使用 ISM,您可以定义自定义管理策略,以使旧索引或未使用的索引在既定持续时间后删除。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?