sleighzy.zookeeper
Apache ZooKeeper
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
Apache ZooKeeper installation for RHEL/CentOS and Debian/Ubuntu
ansible-galaxy install sleighzy.zookeeper