Búsqueda de sitios web

Configurar el clúster Elasticsearch en CentOS/Ubuntu con Ansible |


Elasticsearch es un potente motor de análisis y búsqueda distribuido en tiempo real, RESTful y de código abierto que brinda la capacidad de realizar búsquedas de texto completo. Elasticsearch se basa en Apache Lucene y el software está disponible gratuitamente bajo la licencia Apache 2. En este artículo, instalaremos un Elasticsearch Cluster en CentOS 8/7 y Ubuntu 20.04/18.04 utilizando la herramienta de automatización Ansible.

Este tutorial ayudará a los usuarios de Linux a instalar y configurar un clúster Elasticsearch multinodo de alta disponibilidad en sistemas Linux CentOS 8/CentOS 7 y Ubuntu 20.04/18.04. Algunos de los usos clave de ElasticSearch son análisis de registros, motores de búsqueda, búsqueda de texto completo, análisis de negocios, inteligencia de seguridad, entre muchos otros.

En esta configuración, instalaremos Elasticsearch 7.x Cluster con la función Ansible. El rol que utilizamos es el proyecto oficial de ElasticSearch y le brinda flexibilidad de elección.

Tipo de nodos de Elasticsearch

Hay dos tipos comunes de nodos Elasticsearch:

  • Nodos maestros: responsables de las operaciones de todo el clúster, como la gestión de índices y la asignación de almacenamiento de fragmentos de datos a los nodos de datos.
  • Nodos de datos: contienen los fragmentos reales de datos indexados y manejan todas las operaciones CRUD, de búsqueda y de agregación. Consumen más CPU, Memoria y E/S

Requisitos de configuración

Antes de comenzar, necesitará al menos tres servidores CentOS 8/7 instalados y actualizados. Se requerirá un usuario con privilegios sudo o root para realizar las acciones. Mi configuración se basa en la siguiente estructura de nodos.

Server Name Specs Server role
elk-master-01 16gb ram, 8vpcus Master
elk-master-02 16gb ram, 8vpcus Master
elk-master-03 16gb ram, 8vpcus Master
elk-data01 32gb ram, 16vpcus Data
elk-data02 32gb ram, 16vpcus Data
elk-data03 32gb ram, 16vpcus Data

NOTA :

  • Para entornos pequeños, puede utilizar un nodo para operaciones maestras y de datos.

Consideraciones de almacenamiento

Para los nodos de datos, se recomienda configurar el almacenamiento correctamente teniendo en cuenta la escalabilidad. En mi laboratorio, cada nodo de datos tiene un disco de 500 GB montado en /data. Esto se configuró con los siguientes comandos.

ADVERTENCIA: No copie ni ejecute los comandos, son solo un punto de referencia.

sudo parted -s -a optimal -- /dev/sdb mklabel gpt
sudo parted -s -a optimal -- /dev/sdb mkpart primary 0% 100%
sudo parted -s -- /dev/sdb align-check optimal 1
sudo pvcreate /dev/sdb1
sudo vgcreate vg0 /dev/sdb1
sudo lvcreate -n lv01 -l+100%FREE vg0
sudo mkfs.xfs /dev/mapper/vg0-lv01
echo "/dev/mapper/vg0-lv01 /data xfs defaults 0 0" | sudo tee -a /etc/fstab
sudo mount -a

Paso 1: instale Ansible en la estación de trabajo

Usaremos Ansible para configurar Elasticsearch Cluster en CentOS 8/7. Asegúrese de que Ansible esté instalado en su máquina para facilitar la administración.

En Fedora:

sudo dnf install ansible

En CentOS:

sudo yum -y install epel-release
sudo yum install ansible

RHEL 7/RHEL 8:

### RHEL 8 ###
sudo subscription-manager repos --enable ansible-2.9-for-rhel-8-x86_64-rpms
sudo yum install ansible

### RHEL 7 ###
sudo subscription-manager repos --enable rhel-7-server-ansible-2.9-rpms
sudo yum install ansible

ubuntu:

sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible

Para cualquier otra distribución, consulte la guía de instalación oficial de Ansible.

Confirme la instalación de Ansible en su máquina consultando la versión.

$ ansible --version
ansible 2.9.27
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.17 (default, Jul  1 2022, 15:56:32) [GCC 7.5.0]

Paso 2: Importar el rol ansible de Elasticsearch

Después de instalar Ansible, ahora puede importar la función ansible de Elasticsearch a su sistema local usando galaxy.

$ ansible-galaxy install elastic.elasticsearch
- downloading role 'elasticsearch', owned by elastic
- downloading role from https://github.com/elastic/ansible-elasticsearch/archive/v7.17.0.tar.gz
- extracting elastic.elasticsearch to /root/.ansible/roles/elastic.elasticsearch
- elastic.elasticsearch (v7.17.0) was installed successfully

Donde 7.x.y es la versión de lanzamiento de la función Elasticsearch que se descargará. Puede consultar la página de lanzamientos para encontrar una coincidencia con la versión de Elasticsearch que desea instalar.

El rol se agregará al directorio ~/.ansible/roles.

$ ls ~/.ansible/roles
elastic.elasticsearch

Configure su ssh con hosts de clúster de Elasticsearch.

$ vim ~/.ssh/config

Así se ven mis configuraciones adicionales: actualícelas para adaptarlas a su entorno.

# Elasticsearch master nodes
Host elk-master01
  Hostname 192.168.10.2
  User root
Host elk-master02
  Hostname 192.168.10.3
  User root
Host elk-master03
  Hostname 192.168.10.4
  User root

# Elasticsearch worker nodes
Host elk-data01
  Hostname 192.168.10.2
  User root
Host elk-data02
  Hostname 192.168.10.3
  User root
Host elk-data03
  Hostname 192.168.10.4
  User root

Asegúrese de haber copiado las claves ssh en todas las máquinas.

### Master nodes ###
for host in elk-master0{1..3}; do ssh-copy-id $host; done

### Worker nodes ###
for host in elk-data0{1..3}; do ssh-copy-id $host; done

Confirme que puede realizar ssh sin autenticación de contraseña.

$ ssh elk-master01
Warning: Permanently added '95.216.167.173' (ECDSA) to the list of known hosts.
[root@elk-master-01 ~]# 

Si su clave ssh privada tiene una frase de contraseña, guárdela para evitar que se le solicite en cada máquina.

$ eval `ssh-agent -s` && ssh-add
Enter passphrase for /var/home/jkmutai/.ssh/id_rsa: 
Identity added: /var/home/jkmutai/.ssh/id_rsa (/var/home/jkmutai/.ssh/id_rsa)

Paso 3: cree el libro de jugadas de Elasticsearch y ejecútelo

Ahora que todos los requisitos previos están configurados, creemos un archivo Playbook para la implementación.

$ vim elk.yml

El mío tiene el contenido a continuación.

- hosts: elk-master-nodes
  roles:
    - role: elastic.elasticsearch
  vars:
    es_enable_xpack: false
    es_data_dirs:
      - "/data/elasticsearch/data"
    es_log_dir: "/data/elasticsearch/logs"
    es_java_install: true
    es_heap_size: "1g"
    es_config:
      cluster.name: "elk-cluster"
      cluster.initial_master_nodes: "192.168.10.2:9300,192.168.10.3:9300,192.168.10.4:9300"
      discovery.seed_hosts: "192.168.10.2:9300,192.168.10.3:9300,192.168.10.4:9300"
      http.port: 9200
      node.data: false
      node.master: true
      bootstrap.memory_lock: false
      network.host: '0.0.0.0'
    es_plugins:
     - plugin: ingest-attachment

- hosts: elk-data-nodes
  roles:
    - role: elastic.elasticsearch
  vars:
    es_enable_xpack: false
    es_data_dirs:
      - "/data/elasticsearch/data"
    es_log_dir: "/data/elasticsearch/logs"
    es_java_install: true
    es_config:
      cluster.name: "elk-cluster"
      cluster.initial_master_nodes: "192.168.10.2:9300,192.168.10.3:9300,192.168.10.4:9300"
      discovery.seed_hosts: "192.168.10.2:9300,192.168.10.3:9300,192.168.10.4:9300"
      http.port: 9200
      node.data: true
      node.master: false
      bootstrap.memory_lock: false
      network.host: '0.0.0.0'
    es_plugins:
      - plugin: ingest-attachment

Notas clave:

  • Los nodos maestros tienen node.masterr establecido en true y node.data establecido en false.
  • Los nodos de datos tienen node.data establecido en true y node.master establecido en false.
  • La variable es_enable_xpack se establece en false para la instalación de la edición de código abierto ElasticSearch.
  • cluster.initial_master_nodes & discovery.seed_hosts apuntan a nodos maestros
  • /data/elasticsearch/data es donde se almacenará el fragmento de datos de Elasticsearch. Se recomienda que sea una partición separada de la instalación del sistema operativo por razones de rendimiento y escalabilidad.
  • /data/elasticsearch/logs es donde se almacenarán los registros de Elasticsearch.
  • Los directorios se crearán automáticamente mediante una tarea ansible. Solo necesita asegurarse de que /data sea un punto de montaje del almacén de datos deseado para Elasticsearch.

Para obtener más opciones de personalización, consulte la documentación de github del proyecto.

Crear archivo de inventario

Cree un nuevo archivo de inventario.

$ vim hosts
[elk-master-nodes]
elk-master01
elk-master02
elk-master03

[elk-data-nodes]
elk-data01
elk-data02
elk-data03

Cuando todo esté configurado, ejecute el Playbook.

$ ansible-playbook -i hosts elk.yml

La ejecución debería comenzar. Tenga paciencia ya que esto podría tardar algunos minutos.

PLAY [elk-master-nodes] ********************************************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************************************************
ok: [elk-master02]
ok: [elk-master01]
ok: [elk-master03]

TASK [elastic.elasticsearch : set_fact] ****************************************************************************************************************
ok: [elk-master02]
ok: [elk-master01]
ok: [elk-master03]

TASK [elastic.elasticsearch : os-specific vars] ********************************************************************************************************
ok: [elk-master01]
ok: [elk-master02]
ok: [elk-master03]
.......

Una ejecución ansible exitosa tendrá un resultado similar al siguiente.

PLAY RECAP *********************************************************************************************************************************************
elk-data01                 : ok=38   changed=10   unreachable=0    failed=0    skipped=119  rescued=0    ignored=0   
elk-data02                 : ok=38   changed=10   unreachable=0    failed=0    skipped=118  rescued=0    ignored=0   
elk-data03                 : ok=38   changed=10   unreachable=0    failed=0    skipped=118  rescued=0    ignored=0   
elk-master01               : ok=38   changed=10   unreachable=0    failed=0    skipped=119  rescued=0    ignored=0   
elk-master02               : ok=38   changed=10   unreachable=0    failed=0    skipped=118  rescued=0    ignored=0   
elk-master03               : ok=38   changed=10   unreachable=0    failed=0    skipped=118  rescued=0    ignored=0   

Vea la siguiente captura de pantalla.

Paso 4: Confirmar la instalación de Elasticsearch Cluster

Inicie sesión en uno de los nodos maestros.

$ ssh elk-master01

Verifique el estado de salud del clúster.

$ curl http://localhost:9200/_cluster/health?pretty
{
  "cluster_name" : "elk-cluster",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 6,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

Verifique los nodos maestros.

$ curl -XGET 'http://localhost:9200/_cat/master'
G9X__pPXScqACWO6YzGx3Q 95.216.167.173 95.216.167.173 elk-master01

Ver nodos de datos:

$ curl -XGET 'http://localhost:9200/_cat/nodes'
192.168.10.4   7 47 1 0.02 0.03 0.02 di - elk-data03
192.168.10.2  10 34 1 0.00 0.02 0.02 im * elk-master01
192.168.10.4  13 33 1 0.00 0.01 0.02 im - elk-master03
192.168.10.3  14 33 1 0.00 0.01 0.02 im - elk-master02
192.168.10.3   7 47 1 0.00 0.03 0.03 di - elk-data02
192.168.10.2   6 47 1 0.00 0.02 0.02 di - elk-data01

Como se confirmó, ahora tiene un clúster Clean Elasticsearch en el sistema Linux CentOS 8/7 y Ubuntu 22.04/20.04/18.04.

Cursos en vídeo de aprendizaje de Elasticsearch

  • Clase magistral completa de Elasticsearch con Logstash y Kibana
  • Elasticsearch 7 y Elastic Stack: en profundidad y práctico
  • Guía completa de Elasticsearch
  • Clase magistral completa de Elasticsearch con Logstash y Kibana
  • Procesamiento de datos con Logstash (y Filebeat)

Guías similares:

  • Instale Graylog 3 con Elasticsearch 6.x en CentOS 8/RHEL 8 Linux
  • Cómo eliminar datos del índice Elasticsearch con curl