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:
- Comenzar un trial gratuito en Elastic Cloud, nuestro servicio alojado.
- Echar un vistazo a Elastic Cloud en Kubernetes (ECK) para lanzar el stack a través de Kubernetes.
- Leer nuestra guía sobre Ejecutar el Elastic Stack en Docker.
- Echar un vistazo al proveedor de Elastic Stack Terraform.
ansible-elasticsearch
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
- Si usas solo una instancia pero deseas actualizar desde una versión anterior de ansible-elasticsearch, sigue el procedimiento de actualización.
- Si instalas más de una instancia de Elasticsearch en el mismo host (con diferentes puertos, directorios y archivos de configuración), no actualices a ansible-elasticsearch >= 7.1.1, sigue este trabajo alrededor en su lugar.
- Para casos de uso de múltiples instancias, ahora recomendamos el uso de contenedores Docker con nuestras imágenes oficiales (https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html).
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).
- Eliminamos la plantilla
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"
: reemplazaelasticsearch.j2
por tu propia plantilla para usar un archivo de configuración/etc/default/elasticsearch
|/etc/sysconfig/elasticsearch
.es_config_jvm: "jvm.options.j2"
: reemplazajvm.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 comoansible-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 variablePATTERN
. - 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 admines_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
- Para configurar tu clúster con SSL/TLS para comunicaciones HTTP y/o de transporte, sigue el procedimiento de configuración de SSL/TLS.
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 defectofalse
. Establecer esto entrue
instalará la versión oss de Elasticsearch (solo para versiones <7.11.0).es_xpack_trial
Por defectofalse
. Establecer esto entrue
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 enes_api_basic_auth_username
.es_delete_unmanaged_file
Por defectotrue
. Establecer en false para mantener los usuarios del ámbito de archivos que se han agregado fuera de ansible.es_delete_unmanaged_native
Por defectotrue
. 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 enfalse
detendrá a Ansible de usar el paquete oficial de Elastic de cualquier repositorio configurado en el sistema.es_add_repository
Establecer esto enfalse
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 estableceres_use_repository: false
y asegurarte de que laes_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 estableciendoes_xpack_trial
entrue
.
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.
ansible-galaxy install elastic.elasticsearch