¿Cómo resuelvo la excepción “failed to obtain in-memory shard lock” (no se pudo obtener el bloqueo de partición en memoria) en Amazon OpenSearch Service?

Última actualización: 06/08/2021

Mi clúster de Amazon OpenSearch Service se volvió de color amarillo con el mensaje de error “failed to obtain in-memory shard lock” (no se pudo obtener el bloqueo de partición en memoria). ¿Por qué recibo este mensaje de error y cómo lo soluciono?

Descripción corta

Si la partición no obtiene un bloqueo en memoria (dentro de los umbrales establecidos para OpenSearch Service) para la asignación de particiones, recibirá el siguiente mensaje de error:

"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]]]"

Nota: En OpenSearch Service, el clúster no debe superar el límite de tiempo (5000 ms) ni el número máximo de reintentos (5) para la asignación de particiones.

Para resolver el mensaje de error, pruebe los siguientes métodos:

  • Solucione los problemas relacionados con el estado del clúster en color amarillo.
  • Modifique la configuración del máximo de reintentos y aumente su número.
  • Actualice el recuento de réplicas.
    Nota: No es recomendable actualizar el recuento de réplicas de los clústeres de OpenSearch Service con cargas de trabajo pesadas.

Resolución

Solucionar los problemas relacionados con el estado del clúster en color amarillo

El clúster de OpenSearch Service puede pasar al estado amarillo debido a un error en el nodo o en la red. Si los nodos del clúster fallan debido a un problema de hardware interno, los nodos existentes se reemplazan por nodos nuevos. Este reemplazo es una característica de detección automática de OpenSearch Service. Sin embargo, en algunos casos, las particiones de réplica de los nodos defectuosos se dejan sin asignar. Las particiones de réplica se dejan sin asignar cuando los recursos utilizados previamente no se liberaron. Durante este tiempo, el nodo líder realiza cinco intentos para asignar las particiones de réplica. Si los cinco intentos del nodo líder de asignar las particiones de réplica no tienen éxito, el clúster pasa al estado rojo o amarillo.

Nota: Se recomienda ejecutar la API cluster allocation explain para diagnosticar particiones no asignadas. Para obtener más información, consulte API cluster allocation explain en el sitio web de Elasticsearch.

Para identificar qué índices están provocando que el clúster esté en estado amarillo, utilice la siguiente consulta:

GET /_cat/indices?v&health=yellow

A continuación, utilice la siguiente consulta para identificar la causa raíz de las particiones no asignadas del clúster:

GET /_cluster/allocation/explain

Nota: OpenSearch Service no reconoce la API cluster reroute. Para obtener más información sobre las operaciones de API compatibles, consulte Diferencias de API notables.

Modificar la configuración del máximo de reintentos y aumentar su número

Para que el clúster de OpenSearch Service vuelva al estado verde, aumente el número máximo de reintentos para cada índice amarillo:

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

Cuando se ejecuta esta llamada a la API, el nodo líder vuelve a intentar la asignación de particiones para un índice específico del clúster.

Nota: Al modificar la configuración del máximo de reintentos y aumentar su número, las particiones no siempre se asignan automáticamente. Es posible que deba asignar las particiones de forma manual.

Actualizar el recuento de réplicas

Importante: No utilice este método si la carga del clúster de OpenSearch Service es elevada. Al quitar todas las réplicas de un índice, este debe basarse únicamente en las particiones principales. Si un nodo falla, el clúster podría pasar al estado de clúster rojo, ya que las particiones principales se dejan sin asignar.

Para cambiar el recuento de réplicas, lleve a cabo los siguientes pasos:

1.    Quite las réplicas para que el recuento de índices afectado sea 0:

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

2.    Cambie el recuento de réplicas al recuento deseado:

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

Amazon OpenSearch Service es el sucesor de Amazon Elasticsearch Service.