如何解决 Amazon OpenSearch Service 中的“无法获取内存分片锁”异常?

2 分钟阅读
0

我的 Amazon OpenSearch Service 集群变为黄色,热节点索引和暖节点索引出现“无法获取内存分片锁”错误消息。

简短描述

如果您的分片没有在 OpenSearch Service 分片分配的设定阈值内获得内存锁,则会收到以下错误:

"failed_allocation_attempts" : 5,

     "details" : "failed shard on node []: failed to create shard, failure IOException[failed to obtain in-memory shard lock]; nested: ShardLockObtainFailedException[[][5]: obtaining shard lock timed out after 5000ms]; ",

.

.

"explanation" : "shard has exceeded the maximum number of retries [5] on failed allocation attempts - manually call [/_cluster/reroute?retry_failed=true] to retry, [unassigned_info[[reason=ALLOCATION_FAILED], at[], failed_attempts[5], delayed=false, details[failed shard on node [lga-THKoSXykhSDbghN57A]: failed to create shard, failure IOException[failed to obtain in-memory shard lock]; nested: ShardLockObtainFailedException[[evelog-zdn-2020.04.28][5]: obtaining shard lock timed out after 5000ms]; ], allocation_status[no_attempt]]]"

在 OpenSearch Service 中,您的集群不能超过分片分配的时间限制(5000 毫秒)和最大重试次数(5)。要解决该消息中的错误,请对热节点中的索引使用以下故障排除方法。

注意: 更新工作负载繁重的 OpenSearch Service 集群的副本数量不是最佳实践。

解决方法

排查黄色集群状态

如果遇到节点或网络故障,OpenSearch Service 集群可能会进入黄色状态。如果集群中的节点由于内部硬件问题而出现故障,则现有节点将被新节点替换。OpenSearch Service 会自动检测替代节点。但是,如果之前使用的资源没有释放,则故障节点中的副本分片将不会分配。在此期间,领导者节点会五次尝试分配此副本分片。如果五次尝试分配副本分片均未成功,则您的集群将进入红色或黄色运行状况。

注意: 最佳实践是运行集群分配解释 API(在 Elasticsearch 网站上)来诊断未分配的分片。要确定哪些索引导致您的集群进入黄色状态,请运行以下查询:

GET /_cat/indices?v&health=yellow

然后,使用以下查询来确定集群未分配分片的根本原因:

GET _cluster/allocation/explain

**注意:**OpenSearch Service 无法识别集群重新路由 API。有关支持的 API 操作的详细信息,请参阅显著的 API 差异

增加最大重试设置

要使您的 OpenSearch Service 集群恢复到绿色状态,请增加每个黄色索引的最大重试次数:

PUT /<yellow-index-name>/_settings
{
     "index.allocation.max_retries": 10
}

当您运行此 API 调用时,领导者节点会重试集群上指定索引的分片分配。

**注意:**当您增加最大重试设置时,分片并不总是会自动分配。您可能需要手动分配分片。

更新副本数量

**重要事项:**如果您的 OpenSearch Service 集群负载很高,请不要使用这种方法。如果您从索引中删除所有副本,则该索引必须仅依赖主分片。如果某个节点出现故障,则您的集群可能会进入红色集群状态,因为主分片处于未分配状态。

要更改副本数量,请执行以下步骤:

1.    删除所有副本,使受影响的索引计数变为 0:

\PUT /<yellow-index-name>/_settings
{
     "index": {
          "number_of_replicas": 0
     }
}

2.    将副本数量改回所需数量:

PUT /<yellow-index-name>/_settings
{
     "index": {
          "number_of_replicas": 1
     }
}

如果您的索引位于温节点中,请参阅以下故障排除步骤。

等待自动分配温索引返回绿色状态

当域有足够的资源时,位于温节点中的索引的黄色集群状态将自动恢复为绿色。温索引中的数据由 Amazon Simple Storage Service(Amazon S3)支持,因此当温索引处于黄色或红色状态时,不存在数据丢失的风险。

在以下情况下,请联系 AWS Support 手动重新路由未分配的温索引:

  • 黄色集群状态在几个小时后没有恢复为绿色。
  • 您会看到错误“分片无法为温索引获得内存锁错误”,并且黄色集群状态在几个小时后没有恢复为绿色。

相关信息

为什么我的 Amazon OpenSearch Service 集群处于红色或黄色状态?

为什么我的 Amazon OpenSearch Service 节点崩溃了?

如何排查 Amazon OpenSearch Service 集群上的高 JVM 内存压力问题?

AWS 官方
AWS 官方已更新 1 年前