Cómo usar ElasticSearch ILM y ahorrar dinero


En este blog explicaré cómo configurar la rotación automática de índices de ElasticSearch y como automáticamente mover los índices a máquinas que no necesiten tanto poder de cómputo y sean más baratas. Esto lo haré usando la arquitectura Hot-Warm de ElasticSearch.

A grandes rasgos el proceso funciona escribiendo los datos en un alias que apunta al índice actual, cuando el índice cumple con las condiciones de la política entonces un nuevo índice es creado y el alias es actualizado al nuevo índice, luego el índice anterior se mueve a un nuevo servidor de tipo warm que deberia ser mas económico.

Crear una política de rotación de índices

A continuación, definiremos una política de ILM para rotar el índice cuando tenga 60 días o tenga un tamaño de 50 GB.

PUT /_ilm/policy/index-rollover
{
    "policy": {
        "phases": {
            "hot": {
                "actions": {
                    "rollover": {
                        "max_age": "60d",
                        "max_size": "50gb"
                    },
                    "set_priority": {
                        "priority": 50
                    }
                }
            },
            "warm": {
                "min_age": "60d",
                "actions": {
                    "forcemerge": {
                        "max_num_segments": 1
                    },
                    "shrink": {
                        "number_of_shards": 1
                    },
                    "allocate": {
                        "require": {
                            "data": "warm"
                        }
                    },
                    "set_priority": {
                        "priority": 25
                    }
                }
            }
        }
    }
}

Crear un template para los índices

Este template se aplica para todos los índices que empiecen por truora-ilm- y define qué política de ILM debe aplicar y qué alias usar.

PUT /_template/truora-ilm-template
{
    "index_patterns": [
        "truora-ilm-*"
    ],
    "settings": {
        "refresh_interval": "30s",
        "number_of_replicas": 1,
        "index.lifecycle.name": "index-rollover",      
    	"index.lifecycle.rollover_alias": "truora-ilm"
    }
}

Crear el primer índice

Es importante que el índice tenga un sufijo -<número>, porque la política de ILM lo que va a hacer al rotar el índice es incrementar ese número automáticamente.

También, este índice debe hacer match con el índice definido en el template.

PUT /truora-ilm-000000001
{
  "aliases": {
    "truora-ilm": {
      "is_write_index": true
    }
  }
}

Para saber si quedó bien configurado revisar:

GET /truora-ilm-*/_ilm/explain
{
  "indices": {
    "truora-ilm-000000001": {
      "index": "truora-ilm-000000001",
      "managed": true,
      "policy": "index-rollover",
      "lifecycle_date_millis": 1581439470759,
      "age": "5.54m",
      "phase": "hot",
      "phase_time_millis": 1581439476093,
      "action": "unfollow",
      "action_time_millis": 1581439479632,
      "step": "wait-for-follow-shard-tasks",
      "step_time_millis": 1581439482298,
      "phase_execution": {
        "policy": "index-rollover",
        "phase_definition": {
          "min_age": "0ms",
          "actions": {
            "rollover": {
              "max_size": "50gb",
              "max_age": "60d"
            },
            "set_priority": {
              "priority": 50
            }
          }
        },
        "version": 6,
        "modified_date_in_millis": 1577206181905
      }
    }
  }
}

Y listo, ya puedes empezar a escribir en el alias: truora-ilm (o como lo hayas llamado), una vez cumpla las condiciones definidas en la política se va a rotar automáticamente.


Ver también