Configuración de un clúster Elasticsearch
Requisitos
- Primero debe seguir los pasos de instalación y configuración en cada nodo.
- El tamaño mínimo de un clúster de servidores Elasticsearch es de 3 nodos y siempre debe ir creciendo en números impares para poder hacer uso del sistema de quorum y garantizar la integridad de los datos.
- Asegúrese de que tiene conectividad entre los 3 nodos y que los puertos 9200 y 9300 son accesibles entre todos y cada uno de los nodos.
Recuerde configurar el cortafuegos (firewall) de cada nodo para que permita conexión por dichos números de puertos.
Configuración
Detenga el servicio Elasticsearch en todos y cada uno de los nodos:
systemctl stop elasticsearch.service
Modifique en el fichero de configuración /etc/elasticsearch/elasticsearch.yml
las siguientes líneas:
#discovery.seed_hosts: ["host1", "host2"] #cluster.initial_master_nodes: ["host1", "host2"]
Descomente las líneas y agregue las direcciones IP o URL de cada uno de los nodos :
discovery.seed_hosts: ["host1", "host2", "host3"] cluster.initial_master_nodes: ["host1", "host2", "host3"]
Ejemplo con direcciones IP:
discovery.seed_hosts: ["172.42.42.101", "172.42.42.102", "172.42.42.103"] cluster.initial_master_nodes: ["172.42.42.101", "172.42.42.102", "172.42.42.103"]
Asegúrese que la línea cluster.initial_master_nodes
esté definida solo una vez en el fichero de configuración, en algunos casos la misma línea aparece en dos bloques diferentes del mismo fichero.
Antes de iniciar el servicio, debido a que los nodos se iniciaron por primera vez por sí solos (standalone), debe borrarse el contenido de la carpeta data (por defecto /var/lib/elasticsearch/
) para poder iniciar por primera vez el clúster. Hágalo con el comando:
rm -rf /var/lib/elasticsearch/*
Ahora es momento de iniciar los servicios en todos y cada uno de los nodos. Inicie y compruebe que se están ejecutando con los comandos:
systemctl start elasticsearch.service && systemctl status elasticsearch.service
Debe obtener una salida similar a:
Una vez iniciados los servicios debe confirmar que los 3 nodos están unidos al clúster correctamente, por lo que al ejecutar en cualquiera de los nodos el siguiente comando debe dar la misma respuesta:
curl -XGET http://127.0.0.1:9200/_cat/nodes
Vuelva a revisar la configuración del firewall siempre tomando en cuanta que los nodos deben comunicarse por los puertos 9200
y 9300
y que desde el servidor PFMS y la Consola web PFMS debe poder accederse al puerto 9200
también. Con estos pasos ya tendrá instalado y configurado el clúster de Elasticsearch para ser usado como motor de almacenamiento de logs de Pandora FMS.
Modelos de datos y plantillas
Antes de poner en producción un entorno, bien sea de un solo nodo o un clúster de datos, se recomienda aplicar las configuraciones correspondientes a este nodo o clúster en función a su utilización. En el caso de los índices generados por Pandora FMS la forma más efectiva de hacerlos es definiendo una plantilla (template) para definir la configuración de los campos y los datos almacenados.
Las plantillas o templates son configuraciones que solo se aplican en el momento de la creación del índice. Cambiar un template no tendrá ningún impacto en los índices ya existentes.
- Para crear un template básico siga los instrucciones en “Modelos de datos y plantillas para un nodo”:
- Para definir un template multinodo debe tener en cuenta la siguiente información:
- Cuando realice la configuración del template (formato JSON), necesita configurar tantos search como nodos tenga, sin embargo para configurar correctamente las réplicas debe restar 1 al número de nodos del entorno.
Por ejemplo, en un entorno de Pandora FMS con Elasticsearch con 3 nodos configurados, cuando modifique los campos number_of_search
y number_of_replicas
debe quedar de la siguiente manera:
{ "index_patterns": ["pandorafms*"], "settings": { "number_of_shards": 3, "auto_expand_replicas" : "0-1", "number_of_replicas" : "2" },
Esto es una definición muy básica, para poder definir correctamente el dimensionamiento del entorno de Elasticsearch es recomendable tener en cuenta los factores descritos en este artículo:
Desde la línea de comando puede listar los templates del entorno ejecutando:
curl -X GET "localhost:9200/_cat/templates/*?v=true&s=name&pretty"
También puede ver los detalles de un, template, por ejemplo el que hemos creado para pandorafms ejecutando:
curl -X GET "localhost:9200/_template/pandorafms*?pretty"
el cual devolverá en formato JSON la configuración que tenga definida.
Puede realizar estas operaciones a través de la interfaz de Elasticsearch en Pandora FMS utilizando los comandos nativos de Elasticsearch.
- PUT _template/<nombre_del_template> {json_data}: permite introducir los datos del template a crear.
- GET _template/><nombre_del_template>: permite visualizar el template creado.