sleighzy.zookeeper
Apache ZooKeeper
Rol de Ansible para instalar y configurar Apache ZooKeeper
Este rol se puede utilizar para instalar y agrupar múltiples nodos de ZooKeeper. Por defecto, utiliza todos los hosts definidos para el grupo "zookeeper-nodes" en el archivo de inventario. Todos los servidores se agregan al archivo zoo.cfg junto con los puertos de líder y de elección. Se pueden abrir los puertos del firewall después de establecer true
en la variable zookeeper_firewalld
.
Plataformas Soportadas
- Debian 10.x
- RedHat 7
- RedHat 8
- Ubuntu 18.04.x
- Ubuntu 20.04.x
Requisitos
Java: Java 8 / 11
Las versiones mínimas requeridas de Ansible son 2.9.16 o 2.10.4 para solucionar un problema con ciertos núcleos que han roto la verificación de estado de systemd
. El mensaje de error "El servicio está en estado desconocido
" se mostrará al intentar iniciar el servicio a través del rol de Ansible y la tarea fallará. El servicio comenzará como se espera si se ejecuta el comando systemctl start
en el host físico. Consulte https://github.com/ansible/ansible/issues/71528 para más información.
Variables del Rol
Variable | Predeterminado | Comentario |
---|---|---|
zookeeper_mirror | https://dlcdn.apache.org/zookeeper | |
zookeeper_version | 3.9.1 | |
zookeeper_package | apache-zookeeper-{{ zookeeper_version }}-bin.tar.gz | |
zookeeper_group | zookeeper | |
zookeeper_user | zookeeper | |
zookeeper_root_dir | /usr/share | |
zookeeper_install_dir | '{{ zookeeper_root_dir}}/apache-zookeeper-{{zookeeper_version}}' | |
zookeeper_dir | '{{ zookeeper_root_dir }}/zookeeper' | |
zookeeper_log_dir | /var/log/zookeeper | |
zookeeper_data_dir | /var/lib/zookeeper | |
zookeeper_data_log_dir | /var/lib/zookeeper | |
zookeeper_client_port | 2181 | |
zookeeper_id | 1 | Único por servidor y debe declararse en el archivo de inventario |
zookeeper_leader_port | 2888 | |
zookeeper_election_port | 3888 | |
zookeeper_servers | zookeeper-nodes | Ver más abajo |
zookeeper_servers_use_inventory_hostname | false | Ver más abajo |
zookeeper_environment | "JVMFLAGS": "-javaagent:/opt/jolokia/jolokia-jvm-1.6.0-agent.jar" | |
zookeeper_config_params | Un diccionario de clave-valor que se utilizará para crear el zoo.cfg | |
zookeeper_firewalld | false |
Variable de Inventario y zookeeper_servers
La variable zookeeper_servers arriba acepta una lista de nombres de host del inventario. Estos se usarán en el zoo.cfg
para configurar un clúster de múltiples servidores para que los hosts puedan encontrarse entre sí. Por defecto, el nombre de host que se usará en el zoo.cfg
será el nombre de host informado por el comando hostname
en el servidor (proporcionado por la variable ansible_nodename
). Vea el ejemplo a continuación.
Asumiendo el siguiente archivo de inventario, y que el comando hostname
devuelve solo el nombre de host y no incluye el nombre de dominio.
[zookeeper-nodes]
zoo1.foo.com zookeeper_id=1 #el comando hostname devuelve "zoo1"
zoo2.foo.com zookeeper_id=2 #el comando hostname devuelve "zoo2"
zoo3.foo.com zookeeper_id=3 #el comando hostname devuelve "zoo3"
Y asumiendo las siguientes variables del rol:
---
- role: sleighzy.zookeeper
zookeeper_servers:
- zoo1.foo.com
- zoo2.foo.com
- zoo3.foo.com
El archivo zoo.cfg
generado contendrá las siguientes entradas:
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
Si NO desea este comportamiento y prefiere que el zoo.cfg
utilice el inventory_hostname, establezca zookeeper_servers_use_inventory_hostname a true
.
Puertos Predeterminados
Puerto | Descripción |
---|---|
2181 | Puerto de conexión del cliente |
2888 | Puerto de quórum para agrupamiento |
3888 | Puerto de elección de líder para agrupamiento |
Directorios y Archivos Predeterminados
Descripción | Directorio / Archivo |
---|---|
Directorio de instalación | /usr/share/apache-zookeeper-<versión> |
Enlace simbólico al directorio de instalación | /usr/share/zookeeper |
Enlace simbólico a la configuración | /etc/zookeeper/zoo.cfg |
Archivos de registro | /var/log/zookeeper |
Directorio de datos para instantáneas y archivo myid | /var/lib/zookeeper |
Directorio de datos para archivos de registro de transacciones | /var/lib/zookeeper |
Servicio systemd | /usr/lib/systemd/system/zookeeper.service |
Configuraciones predeterminadas del sistema | /etc/default/zookeeper |
Iniciar y Detener Servicios de ZooKeeper
- El servicio ZooKeeper se puede iniciar con:
systemctl start zookeeper
- El servicio ZooKeeper se puede detener con:
systemctl stop zookeeper
Comandos de Cuatro Letras
ZooKeeper puede usar comandos basados en palabras de cuatro letras, consulte https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_4lw
El siguiente ejemplo utiliza el comando stat para averiguar cuál instancia es la líder:
for i in 1 2 3 ; do
echo "zookeeper0$i es un "$(echo stat | nc zookeeper0$i 2181 | grep ^Mode | awk '{print $2}');
done
Dependencias
No hay dependencias
Ejemplo de Playbook
- hosts: zookeeper-nodes
roles:
- sleighzy.zookeeper
Verificación
La verificación debe realizarse utilizando ansible-lint
pip3 install ansible-lint --user
ansible-lint -c ./.ansible-lint .
Pruebas
Este módulo utiliza el marco de pruebas Ansible Molecule. Esta suite de pruebas crea un clúster de ZooKeeper que consta de tres nodos que se ejecutan dentro de contenedores de Docker. Cada contenedor ejecuta un sistema operativo diferente para probar las plataformas soportadas para este rol de Ansible.
Según la [guía de instalación de Molecule], esto debe hacerse utilizando un entorno virtual. Los siguientes comandos crearán un entorno virtual de Python e instalarán Molecule, incluyendo el controlador de Docker.
$ python3 -m venv molecule-venv
$ source molecule-venv/bin/activate
(molecule-venv) $ pip3 install ansible docker "molecule-plugins[docker]"
Ejecute el playbook y las pruebas. Los errores de verificación deben corregirse antes de que Molecule ejecute alguna prueba. Esto ejecutará todas las pruebas y luego destruirá los contenedores de Docker.
molecule test
El siguiente comando se puede utilizar para ejecutar el playbook sin las pruebas. Esto se puede ejecutar varias veces al realizar cambios en el rol y asegurarse de que las operaciones sean idempotentes.
molecule converge
Los siguientes comandos se pueden utilizar para ejecutar solo las pruebas sin destruir todo. El comando molecule verify
se puede repetir para cada ejecución de prueba.
molecule create
molecule converge
molecule verify
Destruir pruebas de Molecule y contenedores de Docker.
molecule destroy
Licencia
![Licencia MIT]
Apache ZooKeeper installation for RHEL/CentOS and Debian/Ubuntu
ansible-galaxy install sleighzy.zookeeper