elastic.elasticsearch

ARCHIVADO

Este proyecto ya no se mantiene.

Te invitamos a seguir usándolo y adaptándolo para tus propias necesidades, incluyendo su uso con Elasticsearch 8.x.

Para experiencias alternativas de inicio, puedes probar una de estas opciones:

ansible-elasticsearch

Ansible Galaxy

ESTE ROL ES PARA 7.x Y 6.x, pero debería funcionar con 8.x (ver nota).

Rol de Ansible para Elasticsearch 7.x/6.x - las pruebas se realizaron y aprobaron en las siguientes plataformas:

  • Ubuntu 16.04
  • Ubuntu 18.04
  • Ubuntu 20.04
  • Debian 8
  • Debian 9
  • Debian 10
  • CentOS 7
  • Amazon Linux 2

CAMBIOS IMPORTANTES

Aviso sobre el soporte multi-instancia

Eliminación de la configuración MAX_THREAD

Ansible-elasticsearch 7.5.2 está eliminando la opción de personalizar el número máximo de hilos que el proceso puede iniciar en #637. Descubrimos que esta opción ya no funcionaba desde la eliminación del soporte multi-instancia en ansible-elasticsearch 7.1.1. Esta opción se volverá a agregar en una futura release si sigue siendo relevante con respecto a las últimas evoluciones de Elasticsearch.

Cambios en los archivos de configuración

Ansible-elasticsearch 7.5.2 está actualizando los archivos de configuración proporcionados por este rol en #637 que contenían algunas opciones obsoletas en 6.x y 7.x:

  • /etc/default/elasticsearch|/etc/sysconfig/elasticsearch: la nueva plantilla refleja el archivo de configuración proporcionado por Elasticsearch >= 6.x, los parámetros que eliminamos no se usaban en 6.x y 7.x.
  • /etc/elasticsearch/jvm.options: la nueva plantilla refleja los archivos de configuración proporcionados por Elasticsearch >= 6.x.
  • /etc/elasticsearch/log4j2.properties:
    • Eliminamos la plantilla log4j2.properties.j2 de este rol de Ansible ya que era un archivo estático que no ofrecía ninguna personalización específica para alguna variable de ansible.
    • La implementación de este rol de Ansible en nuevos servidores obtendrá el log4j2.properties por defecto proporcionado por Elasticsearch sin ninguna sobreescritura.
    • ADVERTENCIA: Para escenarios de actualización donde este archivo ya era gestionado por versiones anteriores de ansible-elasticsearch, este archivo quedará sin gestionar y no se actualizará por defecto. Si deseas actualizarlo a la versión 7.5, puedes recuperarlo aquí y usar este archivo con la variable Ansible es_config_log4j2 (ver abajo).

Eliminación de la distribución OSS para versiones >= 7.11.0

A partir de Elasticsearch 7.11.0, las distribuciones OSS ya no se proporcionarán tras el reciente cambio de licencia de Elasticsearch.

Este rol de Ansible fallará si oss_version se establece en true y es_version es mayor que 7.11.0.

Consulta la publicación del blog Duplicando el enfoque en lo abierto, Parte II para más detalles.

¿Cómo sobreescribir los archivos de configuración proporcionados por ansible-elasticsearch?

Ahora puedes sobreescribir los archivos de configuración con tus propias versiones utilizando las siguientes variables de Ansible:

  • es_config_default: "elasticsearch.j2": reemplaza elasticsearch.j2 por tu propia plantilla para usar un archivo de configuración /etc/default/elasticsearch|/etc/sysconfig/elasticsearch.
  • es_config_jvm: "jvm.options.j2": reemplaza jvm.options.j2 por tu propia plantilla para usar un archivo de configuración /etc/elasticsearch/jvm.options.
  • es_config_log4j2: "": establece esta variable en la ruta de tu propia plantilla para usar un archivo de configuración /etc/elasticsearch/log4j2.properties.

Dependencias

Este rol utiliza el filtro json_query que requiere jmespath en la máquina local.

Uso

Crea tu playbook de Ansible con tus propias tareas e incluye el rol de elasticsearch. Tendrás que tener este repositorio accesible dentro del contexto del playbook.

ansible-galaxy install elastic.elasticsearch,v7.17.0

Luego crea tu archivo de playbook yaml añadiendo el rol elasticsearch. La aplicación del rol de elasticsearch resulta en la instalación de un nodo en un host.

La configuración más simple consiste en:

- name: Ejemplo Simple
  hosts: localhost
  roles:
    - role: elastic.elasticsearch
  vars:
    es_version: 7.17.0

Lo anterior instala Elasticsearch 7.17.0 en un solo nodo 'node1' en los hosts 'localhost'.

Nota: La versión por defecto de Elasticsearch está descrita en es_version. Puedes sobreescribir esta variable en tu playbook para instalar otra versión. Aunque estamos probando este rol solo con una versión 7.x y una 6.x (respectivamente 7.17.0 y 6.8.23 en el momento de escribir esto), este rol debería funcionar con otras versiones también en la mayoría de los casos.

Este rol también utiliza etiquetas de Ansible. Ejecuta tu playbook con la opción --list-tasks para más información.

Pruebas

Este playbook utiliza Kitchen para CI y pruebas locales.

Requisitos

  • Ruby
  • Bundler
  • Docker
  • Make

Ejecución de las pruebas

  • Asegúrate de haber clonado este repositorio como elasticsearch, no como ansible-elasticsearch.
  • Si no tienes una licencia Gold o Platinum para probar, puedes ejecutar las versiones de prueba de las suites xpack-upgrade añadiendo -trial a la variable PATTERN.
  • Puede que necesites especificar explícitamente VERSION=7.x si algunas suites están fallando.

Instala las dependencias de Ruby con bundler

make setup

Si deseas probar las características de X-Pack con una licencia, primero necesitarás exportar la variable ES_XPACK_LICENSE_FILE.

export ES_XPACK_LICENSE_FILE="$(pwd)/license.json"

Para convergir un host Ubuntu 16.04 ejecutando X-Pack

$ make converge

Para ejecutar las pruebas

$ make verify

Para listar todas las diferentes suites de prueba

$ make list

La suite de prueba por defecto es Ubuntu 16.04 con X-Pack. Si deseas probar otra suite, puedes anular esto con la variable PATTERN

$ make converge PATTERN=security-centos-7

El PATTERN es un patrón de cocina que puede coincidir con múltiples suites. Para ejecutar todas las pruebas de CentOS

$ make converge PATTERN=centos-7

La versión por defecto es 7.x. Si deseas probar 6.x, puedes anularlo con la variable VERSION, por ejemplo:

$ make converge VERSION=6.x PATTERN=security-centos-7

Cuando termines de probar, puedes limpiar todo con

$ make destroy-all

Configuración Básica de Elasticsearch

Se admiten todos los parámetros de configuración de Elasticsearch. Esto se logra utilizando un parámetro de mapa de configuración 'es_config' que se serializa en el archivo elasticsearch.yml. El uso de un mapa garantiza que no sea necesario actualizar el playbook de Ansible para reflejar nuevos/deprecated/plugin parámetros de configuración.

Además del mapa es_config, varios otros parámetros se admiten para funciones adicionales, por ejemplo, la instalación de scripts. Estos se pueden encontrar en el archivo defaults/main.yml del rol.

Lo siguiente ilustra la aplicación de parámetros de configuración a una instancia de Elasticsearch.

- name: Elasticsearch con configuración personalizada
  hosts: localhost
  roles:
    - role: elastic.elasticsearch
  vars:
    es_data_dirs:
      - "/opt/elasticsearch/data"
    es_log_dir: "/opt/elasticsearch/logs"
    es_config:
      node.name: "node1"
      cluster.name: "custom-cluster"
      discovery.seed_hosts: "localhost:9301"
      http.port: 9201
      transport.port: 9301
      node.data: false
      node.master: true
      bootstrap.memory_lock: true
    es_heap_size: 1g
    es_api_port: 9201

Mientras que el rol instala Elasticsearch con los parámetros de configuración predeterminados, se deben configurar los siguientes para asegurar que un clúster se forme con éxito:

  • es_config['http.port'] - el puerto http para el nodo.
  • es_config['transport.port'] - el puerto de transporte para el nodo.
  • es_config['discovery.seed_hosts'] - la lista de descubrimiento unicast, en formato separado por comas "<host>:<port>,<host>:<port>" (típicamente los maestros dedicados del clúster).
  • es_config['cluster.initial_master_nodes'] - para 7.x y versiones posteriores, la lista de nodos elegibles para maestro para iniciar el clúster, en formato separado por comas "<node.name>:<port>,<node.name>:<port>" (típicamente los nombres de los nodos maestros dedicados del clúster).
  • es_config['network.host'] - establece tanto network.bind_host como network.publish_host al mismo valor de host. La configuración de network.bind_host permite controlar el host en el que se vincularán diferentes componentes de la red.

La configuración de network.publish_host permite controlar el host en el cual el nodo se publicará dentro del clúster para que otros nodos puedan conectarse a él.

Consulta https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html para más detalles sobre el comportamiento de vinculación por defecto y las opciones disponibles. El rol no intenta imponer la configuración de estos; se requiere que los usuarios las especifiquen adecuadamente. Se recomienda que los nodos maestros se enumeren y por lo tanto se desplieguen primero cuando sea posible.

Un ejemplo más complejo:

- name: Elasticsearch con configuración personalizada
  hosts: localhost
  roles:
    - role: elastic.elasticsearch
  vars:
    es_data_dirs:
      - "/opt/elasticsearch/data"
    es_log_dir: "/opt/elasticsearch/logs"
    es_config:
      node.name: "node1"
      cluster.name: "custom-cluster"
      discovery.seed_hosts: "localhost:9301"
      http.port: 9201
      transport.port: 9301
      node.data: false
      node.master: true
      bootstrap.memory_lock: true
    es_heap_size: 1g
    es_start_service: false
    es_api_port: 9201
    es_plugins:
      - plugin: ingest-attachment

Notas Importantes

El rol utiliza es_api_host y es_api_port para comunicarse con el nodo para acciones que solo se pueden lograr a través de http, por ejemplo, instalar plantillas y verificar que EL NODO ESTÉ ACTIVO. Estos se establecen en "localhost" y 9200 respectivamente. Si el nodo se despliega para vincular en un host o puerto diferente, estos deben cambiarse.

Utiliza solo es_data_dirs y es_log_dir para personalizar los directorios de datos y registros respectivamente. Al usarlos junto con es_config['path.data'] y es_config['path.logs'] se generarán claves duplicadas de data y logs en elasticsearch.yml, lo que hará que Elasticsearch no pueda iniciarse.

Instalaciones de Servidor de Múltiples Nodos

La aplicación del rol de elasticsearch resulta en la instalación de un nodo en un host. Especificar el rol múltiples veces para un host resulta en la instalación de múltiples nodos para ese host.

Un ejemplo de una implementación de tres servidores se muestra a continuación. El primer servidor contiene el maestro y se declara primero. Aunque no es obligatorio, esto se recomienda en cualquier configuración de clúster de múltiples nodos. Los otros dos servidores albergan nodos de datos.

Ten en cuenta que ya no admitimos la instalación de más de un nodo en el mismo host.

- hosts: master_node
  roles:
    - role: elastic.elasticsearch
  vars:
    es_heap_size: "1g"
    es_config:
      cluster.name: "test-cluster"
      cluster.initial_master_nodes: "elastic02"
      discovery.seed_hosts: "elastic02:9300"
      http.host: 0.0.0.0
      http.port: 9200
      node.data: false
      node.master: true
      transport.host: 0.0.0.0
      transport.port: 9300
      bootstrap.memory_lock: false
    es_plugins:
     - plugin: ingest-attachment

- hosts: data_node_1
  roles:
    - role: elastic.elasticsearch
  vars:
    es_data_dirs:
      - "/opt/elasticsearch"
    es_config:
      cluster.name: "test-cluster"
      cluster.initial_master_nodes: "elastic02"
      discovery.seed_hosts: "elastic02:9300"
      http.host: 0.0.0.0
      http.port: 9200
      node.data: true
      node.master: false
      transport.host: 0.0.0.0
      transport.port: 9300
      bootstrap.memory_lock: false
    es_plugins:
      - plugin: ingest-attachment

- hosts: data_node_2
  roles:
    - role: elastic.elasticsearch
  vars:
    es_config:
      cluster.name: "test-cluster"
      discovery.seed_hosts: "elastic02:9300"
      http.host: 0.0.0.0
      http.port: 9200
      node.data: true
      node.master: false
      transport.host: 0.0.0.0
      transport.port: 9300
      bootstrap.memory_lock: false
    es_plugins:
      - plugin: ingest-attachment

Los parámetros también se pueden asignar a los hosts utilizando el archivo de inventario si se desea.

Asegúrate de que tus hosts estén definidos en tu archivo inventory con los valores apropiados de ansible_ssh_host, ansible_ssh_user y ansible_ssh_private_key_file.

Luego ejecútalo:

ansible-playbook -i hosts ./tu-playbook.yml

Instalación de Características de X-Pack

  • es_role_mapping Archivo de asignaciones de roles declarado como yml, como se describe aquí
es_role_mapping:
  power_user:
    - "cn=admins,dc=example,dc=com"
  user:
    - "cn=users,dc=example,dc=com"
    - "cn=admins,dc=example,dc=com"
  • es_users - Los usuarios pueden declararse aquí como yml. Dos subclaves 'native' y 'file' determinan el ámbito bajo el cual se crea el usuario. Bajo cada una de estas claves, los usuarios deben declararse como entradas yml. por ejemplo:
es_users:
  native:
    kibana4_server:
      password: changeMe
      roles:
        - kibana4_server
  file:
    es_admin:
      password: changeMe
      roles:
        - admin
    testUser:
      password: changeMeAlso!
      roles:
        - power_user
        - user
  • es_roles - Los roles de Elasticsearch se pueden declarar aquí como yml. Dos subclaves 'native' y 'file' determinan cómo se crea el rol, es decir, a través de un archivo o llamada http (nativa). Bajo cada clave, lista los roles con los permisos apropiados, utilizando el formato basado en archivos descrito aquí, por ejemplo:
es_roles:
  file:
    admin:
      cluster:
        - all
      indices:
        - names: '*'
          privileges:
            - all
    power_user:
      cluster:
        - monitor
      indices:
        - names: '*'
          privileges:
            - all
    user:
      indices:
        - names: '*'
          privileges:
            - read
    kibana4_server:
      cluster:
          - monitor
      indices:
        - names: '.kibana'
          privileges:
            - all
  native:
    logstash:
      cluster:
        - manage_index_templates
      indices:
        - names: 'logstash-*'
          privileges:
            - write
            - delete
            - create_index
  • es_xpack_license - Licencia de X-Pack. La licencia es un blob json. Establece la variable directamente (posiblemente protegida por Ansible vault) o desde un archivo en el proyecto de Ansible en la máquina de control a través de una búsqueda:
es_xpack_license: "{{ lookup('file', playbook_dir + '/files/' + es_cluster_name + '/license.json') }}"

Si no tienes una licencia, puedes habilitar la prueba de 30 días estableciendo es_xpack_trial en true.

Los parámetros de configuración de X-Pack se pueden agregar al archivo elasticsearch.yml utilizando el parámetro normal es_config.

Para un ejemplo completo, consulta aquí.

Nota Importante para la Configuración del Ámbito Nativo

Para que los usuarios y roles nativos sean configurados, el rol llama a la API de Elasticsearch. Dado que la seguridad está instalada, esto requiere la definición de dos parámetros:

  • es_api_basic_auth_username - nombre de usuario de admin
  • es_api_basic_auth_password - contraseña de admin

Estos pueden ser establecidos en un usuario declarado en el ámbito basado en archivo, con permisos de admin, o el superusuario predeterminado "elastic" (la contraseña predeterminada es changeme).

SSL/TLS de Seguridad de X-Pack

Configuración Adicional

Además de es_config, los siguientes parámetros permiten la personalización de las versiones de Java y Elasticsearch, así como el comportamiento del rol. Las opciones incluyen:

  • oss_version Por defecto false. Establecer esto en true instalará la versión oss de Elasticsearch (solo para versiones <7.11.0).

  • es_xpack_trial Por defecto false. Establecer esto en true iniciará la prueba de 30 días una vez que se inicie el clúster.

  • es_version (por ejemplo, "7.17.0").

  • es_api_host El nombre de host utilizado para acciones que requieren HTTP, por ejemplo, instalar plantillas. Por defecto es "localhost".

  • es_api_port El puerto utilizado para acciones que requieren HTTP, por ejemplo, instalar plantillas. Por defecto es 9200. CAMBIA SI EL PUERTO HTTP NO ES 9200.

  • es_api_basic_auth_username El nombre de usuario de Elasticsearch para realizar acciones de administración. Se utiliza si la seguridad está habilitada. Asegúrate de que este usuario sea admin.

  • es_api_basic_auth_password La contraseña asociada con el usuario declarado en es_api_basic_auth_username.

  • es_delete_unmanaged_file Por defecto true. Establecer en false para mantener los usuarios del ámbito de archivos que se han agregado fuera de ansible.

  • es_delete_unmanaged_native Por defecto true. Establecer en false para mantener los usuarios del ámbito nativo que se han agregado fuera de ansible.

  • es_start_service (true (predeterminado) o false).

  • es_plugins_reinstall (true o false (predeterminado)).

  • es_plugins un array de definiciones de complemento, por ejemplo:

      es_plugins:
        - plugin: ingest-attachment
    
  • es_path_repo Establece la lista blanca para permitir repositorios de respaldo local.

  • es_action_auto_create_index Establece el valor para la creación automática de índices, utiliza la siguiente sintaxis para especificar índices (de lo contrario, true/false): es_action_auto_create_index: '[".watches", ".triggered_watches", ".watcher-history-*"]'.

  • es_allow_downgrades Solo para fines de desarrollo. (true o false (predeterminado)).

  • es_java_install Si está configurado en true, Java se instalará. (false (predeterminado para 7.x) o true (predeterminado para 6.x)).

  • update_java Actualiza Java a la última versión. (true o false (predeterminado)).

  • es_max_map_count número máximo de VMA (Áreas de Memoria Virtual) que un proceso puede poseer. Por defecto es 262144.

  • es_max_open_files el número máximo de descriptores de archivos que este proceso puede abrir. Por defecto es 65536.

  • es_debian_startup_timeout cuánto tiempo esperan los scripts de inicio de SysV de la familia Debian para que el servicio se inicie, en segundos. Por defecto es de 10 segundos.

  • es_use_repository Establecer esto en false detendrá a Ansible de usar el paquete oficial de Elastic de cualquier repositorio configurado en el sistema.

  • es_add_repository Establecer esto en false detendrá a Ansible de añadir los repositorios de paquetes oficiales de Elastic (si es_use_repository es verdadero) si deseas usar un repo ya presente.

  • es_custom_package_url la URL para el paquete rpm o deb que Ansible deberá instalar. Al usar esto, también necesitarás establecer es_use_repository: false y asegurarte de que la es_version coincida con la versión que se está instalando desde tu URL personalizada. Por ejemplo: es_custom_package_url: https://downloads.ejemplo.com/elasticsearch.rpm.

Los ejemplos anteriores ilustran la instalación de complementos utilizando es_plugins. Para los complementos oficialmente admitidos, no se necesita ningún delimitador de versión o fuente. El script del complemento determinará la versión de complemento apropiada según la versión de Elasticsearch objetivo. Para complementos de la comunidad, incluye la URL completa. Este enfoque NO debe usarse para el complemento X-Pack. Consulta X-Pack a continuación para obtener detalles sobre esto.

Si se instala Monitoring o Alerting, asegúrate de que también se especifique el complemento de licencia. La configuración de seguridad actualmente tiene soporte limitado, pero se planea más soporte para versiones posteriores.

Para configurar X-pack para enviar correo, se puede agregar la siguiente configuración al rol. Cuando require_auth es verdadero, también necesitarás proporcionar el usuario y la contraseña. Si no, estos pueden eliminarse:

    es_mail_config:
        account: <nombre funcional>
        profile: standard
        from: <dirección de origen>
        require_auth: <true o false>
        host: <dominio de correo>
        port: <número de puerto>
        user: <dirección de correo electrónico> --opcional
        pass: <contraseña> --opcional
  • es_user - por defecto es elasticsearch.
  • es_group - por defecto es elasticsearch.
  • es_user_id - por defecto es indefinido.
  • es_group_id - por defecto es indefinido.

Tanto es_user_id como es_group_id deben establecerse para que se configuren las identificaciones de usuario y grupo.

  • es_restart_on_change - por defecto es verdadero. Si es falso, los cambios no resultarán en un reinicio de Elasticsearch.
  • es_plugins_reinstall - por defecto es falso. Si es verdadero, todos los complementos actualmente instalados serán eliminados de un nodo. Los complementos enumerados luego serán reinstalados.

Para añadir, actualizar o eliminar entradas de elasticsearch.keystore, usa la siguiente variable:

# el estado es opcional y predeterminado es presente.
es_keystore_entries:
- key: someKeyToAdd
  value: someValue
  state: present

- key: someKeyToUpdate
  value: newValue
  # state: present
  force: Yes

- key: someKeyToDelete
  state: absent

Este rol se envía con plantillas de muestra ubicadas en el directorio test/integration/files/templates-7.x. La variable es_templates_fileglob se usa con el bucle de Ansible with_fileglob. Al establecer los globs, asegúrate de usar una ruta absoluta.

Proxy

Para definir un proxy globalmente, establece las siguientes variables:

  • es_proxy_host - host del proxy global.
  • es_proxy_port - puerto del proxy global.

Notas

  • El rol asume que el usuario/grupo existe en el servidor. Los paquetes de elasticsearch crean el usuario elástico predeterminado. Si esto necesita cambiar, asegúrate de que el usuario exista.
  • El playbook se basa en el nombre de inventario de cada host para asegurar que sus directorios sean únicos.
  • KitchenCI ha sido utilizado para pruebas. Esto se usa para confirmar que las imágenes alcanzan el estado correcto después de que se aplica primero una ejecución. Actualmente probamos la última versión de 7.x y 6.x en todas las plataformas admitidas.
  • El rol tiene como objetivo ser idempotente. Ejecutar el rol múltiples veces, sin cambios, debería resultar en ningún cambio de estado en el servidor. Si se cambian las configuraciones, estas se aplicarán y Elasticsearch se reiniciará donde sea necesario.
  • Con el fin de ejecutar pruebas de x-pack, se requiere un archivo de licencia con seguridad habilitada. Establece la variable de entorno ES_XPACK_LICENSE_FILE en la ruta completa del archivo de licencia antes de ejecutar pruebas. Una licencia de prueba es adecuada y se puede usar estableciendo es_xpack_trial en true.

NOTAS IMPORTANTES SOBRE LA GESTIÓN DE COMPLEMENTOS

  • Si se cambia la versión de ES, se eliminarán todos los complementos. Los que se enumeran en el playbook se volverán a instalar. Este comportamiento es requerido en ES 6.x.
  • Si no hay complementos listados en el playbook para un nodo, todos los complementos actualmente instalados serán eliminados.
  • El rol admite la detección automática de diferencias entre complementos instalados y listados: instalando aquellos listados pero no instalados y eliminando aquellos instalados pero no listados. Si los usuarios desean reinstalar complementos, deben establecer es_plugins_reinstall en verdadero. Esto hará que se eliminen todos los complementos actualmente instalados y se instalen los listados.

Preguntas sobre el uso

Agradecemos las preguntas sobre cómo usar el rol. Sin embargo, para mantener la lista de problemas de GitHub centrada en "problemas", pedimos a la comunidad que plantee preguntas en https://discuss.elastic.co/c/elasticsearch. Esto es monitoreado por los mantenedores.

Acerca del proyecto

Elasticsearch for Linux

Instalar
ansible-galaxy install elastic.elasticsearch
Licencia
other
Descargas
4.2M
Propietario