sleighzy.zookeeper

Apache ZooKeeper

Lint Code Base Molecule

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]

Acerca del proyecto

Apache ZooKeeper installation for RHEL/CentOS and Debian/Ubuntu

Instalar
ansible-galaxy install sleighzy.zookeeper
Licencia
mit
Descargas
23.2k
Propietario