sleighzy.zookeeper

Apache ZooKeeper

Lint Code Base Molecule

Rôle Ansible pour l'installation et la configuration d'Apache ZooKeeper

Ce rôle peut être utilisé pour installer et regrouper plusieurs nœuds ZooKeeper. Par défaut, il utilise tous les hôtes définis pour le groupe "zookeeper-nodes" dans le fichier d'inventaire. Tous les serveurs sont ajoutés au fichier zoo.cfg avec les ports de leader et d'élection. Les ports du pare-feu peuvent être ouverts en mettant true à la variable zookeeper_firewalld.

Plateformes prises en charge

  • Debian 10.x
  • RedHat 7
  • RedHat 8
  • Ubuntu 18.04.x
  • Ubuntu 20.04.x

Exigences

Java : Java 8 / 11

Les versions minimales requises d'Ansible sont 2.9.16 ou 2.10.4 pour contourner un problème avec certains noyaux qui ont cassé la vérification de l'état systemd. Lorsqu'on essaie de démarrer le service via le rôle Ansible, le message d'erreur "Le service est dans un état inconnu" sera affiché et la tâche échouera. Le service démarrera comme prévu si la commande systemctl start est exécutée sur l'hôte physique. Voir https://github.com/ansible/ansible/issues/71528 pour plus d'informations.

Variables du rôle

Variable Valeur par défaut Commentaire
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 Unique par serveur et doit être déclaré dans le fichier d'inventaire
zookeeper_leader_port 2888
zookeeper_election_port 3888
zookeeper_servers zookeeper-nodes Voir ci-dessous
zookeeper_servers_use_inventory_hostname false Voir ci-dessous
zookeeper_environment "JVMFLAGS": "-javaagent:/opt/jolokia/jolokia-jvm-1.6.0-agent.jar"
zookeeper_config_params Un dictionnaire clé-valeur qui sera intégré dans zoo.cfg
zookeeper_firewalld false

Inventaire et variable zookeeper_servers

La variable zookeeper_servers ci-dessus accepte une liste de noms d'hôtes d'inventaire. Ceux-ci seront utilisés dans le zoo.cfg pour configurer un cluster multi-serveurs afin que les hôtes puissent se trouver mutuellement. Par défaut, le nom d'hôte utilisé dans le zoo.cfg sera celui rapporté par la commande hostname sur le serveur (fourni par la variable ansible_nodename). Voir l'exemple ci-dessous.

En supposant le fichier d'inventaire ci-dessous, et que la commande hostname ne renvoie que le nom d'hôte sans inclure le nom de domaine.

[zookeeper-nodes]
zoo1.foo.com zookeeper_id=1       # la commande hostname renvoie "zoo1"
zoo2.foo.com zookeeper_id=2       # la commande hostname renvoie "zoo2"
zoo3.foo.com zookeeper_id=3       # la commande hostname renvoie "zoo3"

Et en supposant les variables de rôle suivantes :

---
- role: sleighzy.zookeeper
  zookeeper_servers:
    - zoo1.foo.com
    - zoo2.foo.com
    - zoo3.foo.com

Le fichier zoo.cfg intégré contiendra les entrées suivantes :

server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

Si vous NE voulez PAS ce comportement et souhaitez que le zoo.cfg utilise les noms d'hôtes d'inventaire, mettez zookeeper_servers_use_inventory_hostname sur true.

Ports par défaut

Port Description
2181 Port de connexion client
2888 Port du quorum pour le cluster
3888 Port d'élection du leader pour le cluster

Répertoires et fichiers par défaut

Description Répertoire / Fichier
Répertoire d'installation /usr/share/apache-zookeeper-<version>
Lien symbolique vers le répertoire d'installation /usr/share/zookeeper
Lien symbolique vers la configuration /etc/zookeeper/zoo.cfg
Fichiers de journal /var/log/zookeeper
Répertoire de données pour les instantanés et le fichier myid /var/lib/zookeeper
Répertoire de données pour les fichiers de journal de transaction /var/lib/zookeeper
Service Systemd /usr/lib/systemd/system/zookeeper.service
Paramètres par défaut /etc/default/zookeeper

Démarrage et arrêt des services ZooKeeper

  • Le service ZooKeeper peut être démarré via : systemctl start zookeeper
  • Le service ZooKeeper peut être arrêté via : systemctl stop zookeeper

Commandes à quatre lettres

ZooKeeper peut utiliser des commandes basées sur des mots de quatre lettres, voir https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_4lw

L'exemple ci-dessous utilise la commande stat pour trouver quel instance est le leader :

for i in 1 2 3 ; do
  echo "zookeeper0$i est un "$(echo stat | nc zookeeper0$i 2181 | grep ^Mode | awk '{print $2}');
done

Dépendances

Aucune dépendance

Exemple de Playbook

- hosts: zookeeper-nodes
  roles:
    - sleighzy.zookeeper

Linting

Le linting doit être effectué avec ansible-lint

pip3 install ansible-lint --user

ansible-lint -c ./.ansible-lint .

Tests

Ce module utilise le framework de test Ansible Molecule. Ce suite de test crée un cluster ZooKeeper composé de trois nœuds fonctionnant dans des conteneurs Docker. Chaque conteneur exécute un système d'exploitation différent pour tester les plateformes prises en charge par ce rôle Ansible.

Selon le [guide d'installation de Molecule], cela doit être fait en utilisant un environnement virtuel. Les commandes ci-dessous créeront un environnement virtuel Python et installeront Molecule, y compris le pilote Docker.

$ python3 -m venv molecule-venv
$ source molecule-venv/bin/activate
(molecule-venv) $ pip3 install ansible docker "molecule-plugins[docker]"

Exécutez le playbook et les tests. Les erreurs de linting doivent être corrigées avant que Molecule n'exécute des tests. Cela exécutera tous les tests, puis détruira les conteneurs Docker.

molecule test

La commande ci-dessous peut être utilisée pour exécuter le playbook sans les tests. Cela peut être exécuté plusieurs fois lors des modifications du rôle, afin de garantir que les opérations sont idempotentes.

molecule converge

Les commandes ci-dessous peuvent être utilisées pour exécuter uniquement les tests sans tout détruire. La commande molecule verify peut être répétée pour chaque exécution de test.

molecule create
molecule converge
molecule verify

Détruire les tests de Molecule et les conteneurs Docker.

molecule destroy

Licence

Licence MIT

À propos du projet

Apache ZooKeeper installation for RHEL/CentOS and Debian/Ubuntu

Installer
ansible-galaxy install sleighzy.zookeeper
Licence
mit
Téléchargements
23.2k
Propriétaire