¿Por qué sigue fallando la acción de sustitución de índice en mi política de ISM en Amazon OpenSearch Service?

Última actualización: 05-08-2021

Quiero utilizar la administración de estados de índice (ISM) para sustituir los índices en mi clúster de Amazon OpenSearch Service (sucesor de Amazon Elasticsearch Service). Sin embargo, el índice no se puede sustituir y recibo un mensaje de error. ¿Por qué sucede esto y cómo puedo resolverlo?

Descripción breve

Si recibió el error “Failed to rollover index” (No se pudo sustituir el índice), es posible que la acción de sustitución haya fallado por alguno de los siguientes motivos:

  • El objetivo de sustitución no existe.
  • Falta el alias de sustitución.
  • El nombre del índice no coincide con el patrón de índices.
  • El alias de sustitución apunta a un alias duplicado en una plantilla de índices.
  • Ha alcanzado la utilización máxima de los recursos en el clúster.

Para resolver este problema, use la API explain (API de explicación) para identificar la causa del error. A continuación, verifique su política de ISM. Para obtener más información acerca de la configuración de la acción de sustitución en la política de ISM, consulte ¿Cómo utilizo Index State Management (ISM) para administrar el bajo espacio de almacenamiento en Amazon OpenSearch Service?

Resolución

Uso de la API de explicación

Para identificar la causa raíz del error “Failed to rollover index” (No se pudo sustituir el índice), use la API explain (de explicación):

GET _opendistro/_ism/explain/logs-000001?pretty

A continuación, se encuentra un ejemplo de resultado de la API explain (de explicación):

{
  "logs-000001" : {
    "index.opendistro.index_state_management.policy_id" : "rollover-workflow",
    "index" : "logs-000001",
    "index_uuid" : "JUWl2CSES2mWYXqpJJ8qlA",
    "policy_id" : "rollover-workflow",
    "policy_seq_no" : 2,
    "policy_primary_term" : 1,
    "rolled_over" : false,
    "state" : {
      "name" : "open",
      "start_time" : 1614738037066
    },
    "action" : {
      "name" : "rollover",
      "start_time" : 1614739372091,
      "index" : 0,
      "failed" : true,
      "consumed_retries" : 0,
      "last_retry_time" : 0
    },
    "retry_info" : {
      "failed" : false,
      "consumed_retries" : 0
    },
    "info" : {
      "cause" : "rollover target [rolling-indices] does not exist",
      "message" : "Failed to rollover index [index=logs-000001]"
    }
  }
}

Este resultado de ejemplo indica que los índices no se pudieron sustituir porque el alias de sustitución objetivo (rolling-indices) no existía.

El objetivo de sustitución no existe

Si la API de explicación devuelve la causa como “rollover target [rolling-indices] does not exist” (el objetivo de sustitución [rolling-indices] no existe), verifique si el índice se inició con el alias de sustitución:

GET _cat/aliases

El resultado muestra todos los alias actuales del clúster y sus índices asociados. Si la ISM indica que el objetivo de sustitución no existe, entonces faltan un nombre de alias de sustitución y una asociación de índices fallida.

Para resolver la asociación de índices fallida, adjunte el alias de sustitución al índice:

POST /_aliases
{
    "actions" : [
        { "add" : { "index" : "logs-000001", "alias" : "my-data" } }
    ]
}

Después de adjuntar el alias de sustitución, vuelva a intentar la acción de sustitución en el índice administrado en OpenSearch Service:

POST _opendistro/_ism/retry/logs-000001

Para obtener más información, consulte Retry failed index en el sitio web de Open Distro para Elasticsearch.

Si vuelve a intentar el índice fallido, es posible que reciba un mensaje de estado “Attempting to retry” (Intentando volver a ejecutarlo). Si OpenSearch Service intenta volver a ejecutarlo, espere a que se ejecute el siguiente ciclo de ISM. Los ciclos de ISM se ejecutan cada 30 a 48 minutos. Si la acción de sustitución se realiza correctamente, recibirá el siguiente mensaje: “Successfully rolled over index” (Se sustituyó correctamente el índice).

Falta el alias de sustitución

Si el resultado de la API explain (de explicación) identifica que la causa del error de sustitución es la falta de un alias de sustitución, verifique la configuración del índice que da error:

GET <failed-index-name>/_settings

Si ve que falta la configuración index.opendistro.index_state_management.rollover_alias, agregue la configuración al índice de forma manual:

PUT /<failed-index-name>/_settings
{
  "index.opendistro.index_state_management.rollover_alias":"<rollover-alias>"
}

Utilice la API retry failed index (reintentar el índice fallido) para volver a intentar ejecutar la operación de sustitución en el índice con errores. Mientras se vuelve a intentar la acción de sustitución, actualice la plantilla de políticas:

PUT _template/<template-name>

Asegúrese de utilizar la misma configuración de la plantilla de políticas existente para que el alias de sustitución se aplique a los índices recién creados. Por ejemplo:

PUT _template/<existing-template>
{
  "index_patterns": ["<index-pattern*>"], 
  "settings": {
    "index.opendistro.index_state_management.policy_id": "<policy_id>",
    "index.opendistro.index_state_management.rollover_alias":"<rollover-alias>"
  }
}

El nombre del índice no coincide con el patrón de índices

Si la política de ISM indica que la operación de sustitución falló porque el nombre del índice y el patrón de índices no coinciden, verifique el nombre del índice que da error. Para que las sustituciones tengan éxito, los nombres de los índices deben coincidir con el siguiente patrón de expresiones regulares (regex):

`^.*-\\d+$`

Este patrón de expresiones regulares indica que los nombres de los índices deben incluir texto seguido de un guion (-) y uno o más dígitos. Si el nombre del índice no sigue este patrón y el primer índice contiene datos escritos, considere la posibilidad de volver a indexar los datos. Cuando vuelva a indexar los datos, utilice el nombre correcto para el nuevo índice. Por ejemplo:

POST _reindex
{
  "source": {
    "index": "<failed-index>"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

Mientras se ejecuta la API reindex data (reindexar datos), desasocie el alias de sustitución del índice que da error. Luego, agregue el alias de sustitución al nuevo índice para que el origen de datos pueda seguir escribiendo los datos entrantes en un nuevo índice.

Por ejemplo:

POST /_aliases
{
    "actions" : [
        { "remove" : { "index" : "<failed-index>", "alias" : "<rollover-alias>" } },
        { "add" : { "index" : "my-new-index-000001", "alias" : "<rollover-alias>" } }
    ]
}

Adjunte manualmente la política de ISM al nuevo índice mediante la siguiente llamada a la API:

POST _opendistro/_ism/add/my-new-index-* { "policy_id": "<policy_id>" }

Actualice la plantilla existente para reflejar el nuevo nombre de patrón de índices:

PUT _template/<existing temaplate>

Nota: La política de ISM y el alias de sustitución deben reflejar los índices sucesivos creados con el mismo patrón de índices.

El alias de sustitución apunta a un alias duplicado en una plantilla de índices

Si la API explain (de explicación) indica que la sustitución del índice falló porque un alias de sustitución apunta a un alias duplicado, verifique la configuración de la plantilla de índices:

GET _template/<template-name>

Verifique si la plantilla contiene una sección de alias adicional (con otro alias que apunta al mismo índice):

"index_patterns": ["my-index*"],
 "settings": {
        "index.opendistro.index_state_management.policy_id": "rollover-policy",
        "index.opendistro.index_state_management.rollover_alias": "rollover-alias"
        },
 "aliases": {
        "another_alias": {
            "is_write_index": true
        }
    }

La presencia de un alias adicional confirma el motivo del error de la operación de sustitución, ya que varios alias provocan que la sustitución devuelva error. Para resolver este error, actualice la configuración de la plantilla sin especificar ningún alias:

PUT _template/<template-name>

A continuación, ejecute la API retry (reintentar) en el índice con error:

POST _opendistro/_ism/retry/my-index-000001

Importante: Si un alias apunta a varios índices, asegúrese de que solo un índice tenga habilitado el acceso de escritura. La API rollover (sustituir) habilita automáticamente el acceso de escritura para el índice al que apunta el alias de sustitución. Esto significa que no es necesario especificar ningún alias para la configuración “is_write_index” a la hora de ejecutar la operación de sustitución en la ISM.

Ha alcanzado la utilización máxima de los recursos en el clúster

La utilización máxima de recursos en el clúster podría deberse a una excepción de interrupción o a la falta de espacio de almacenamiento.

Excepción de interrupción

Si la API explain (de explicación) devuelve una excepción de interrupción, es probable que el clúster experimentara una presión alta en la memoria de JVM cuando se llamó a la API rollover (sustituir). Para solucionar problemas de presión en la memoria de JVM, consulte ¿Cómo puedo solucionar problemas de presión elevada de memoria de la JVM en mi clúster de Amazon OpenSearch Service?

Una vez que la presión en la memoria de JVM cae a menos del 75 %, puede volver a intentar la actividad en el índice fallido con la siguiente llamada a la API:

POST _opendistro/_ism/retry/<failed-index-name>

Nota: Puede utilizar patrones de índices (*) para volver a intentar las actividades en varios índices con errores.

Si experimenta picos de JVM poco frecuentes en el clúster, también puede actualizar la política de ISM con el siguiente bloque de reintentos para la acción de sustitución:

"actions": {
    "retry": {
        "count": 3,
        "backoff": "exponential",
        "delay": "10m"
    }
}

En la política de ISM, cada acción tiene un reintento automatizado basado en el parámetro “count” (de recuento). Si la operación anterior falla, verifique el parámetro “delay” (retraso) para ver cuánto tiempo tendrá que esperar para que la ISM vuelva a intentar la acción.

Falta de espacio de almacenamiento

Si el clúster se está quedando sin espacio de almacenamiento, OpenSearch Service activará un bloqueo de escritura en el clúster para que todas las operaciones de escritura devuelvan una excepción ClusterBlockException. Los valores de la métrica ClusterIndexWritesBlocked mostrarán el valor “1”, lo que indica que el clúster está bloqueando las solicitudes. Por lo tanto, cualquier intento de crear un nuevo índice fallará. La llamada a la API explain (de explicación) también devolverá IndexCreateBlockException 403, lo que indica que el clúster no tiene espacio de almacenamiento. Para solucionar el problema de la excepción de bloqueo del clúster, consulte ¿Cómo resuelvo el error 403 “index_create_block_exception” en Amazon OpenSearch Service?

Una vez que la métrica ClusterIndexWritesBlocked vuelva a “0”, vuelva a intentar la acción de ISM en el índice que dio error. Si la presión en la memoria de JVM supera el 92 % durante más de 30 minutos, podría activarse un bloqueo de escritura. Si encuentra un bloqueo de escritura, deberá solucionar los problemas de presión en la memoria de JVM. Para obtener más información sobre cómo solucionar los problemas de presión de memoria de la JVM, consulte ¿Cómo puedo solucionar problemas de presión elevada de memoria de la JVM en mi clúster de Amazon OpenSearch Service?


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?