sleighzy.zookeeper
Apache ZooKeeper
Ansible-Rolle zur Installation und Konfiguration von Apache ZooKeeper
Diese Rolle kann verwendet werden, um mehrere ZooKeeper-Knoten zu installieren und zu clustern. Standardmäßig werden alle Hosts aus der Gruppe „zookeeper-nodes“ in der Inventardatei verwendet. Alle Server werden in die Datei zoo.cfg hinzugefügt, zusammen mit den Leader- und Wahl-Ports. Firewallports können geöffnet werden, indem die Variable zookeeper_firewalld
auf true
gesetzt wird.
Unterstützte Plattformen
- Debian 10.x
- RedHat 7
- RedHat 8
- Ubuntu 18.04.x
- Ubuntu 20.04.x
Anforderungen
Java: Java 8 / 11
Ansible 2.9.16 oder 2.10.4 sind die minimal erforderlichen Versionen, um ein Problem mit bestimmten Kernel zu umgehen, die die systemd
-Statusprüfung beeinträchtigt haben. Die Fehlermeldung „Service is in unknown state
“ wird ausgegeben, wenn versucht wird, den Dienst über die Ansible-Rolle zu starten, und die Aufgabe schlägt fehl. Der Dienst wird wie erwartet gestartet, wenn der Befehl systemctl start
auf dem physischen Host ausgeführt wird. Weitere Informationen finden Sie unter https://github.com/ansible/ansible/issues/71528.
Rollenvariablen
Variable | Standard | Kommentar |
---|---|---|
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 | Eindeutig pro Server und sollte in der Inventardatei angegeben werden |
zookeeper_leader_port | 2888 | |
zookeeper_election_port | 3888 | |
zookeeper_servers | zookeeper-nodes | Siehe unten |
zookeeper_servers_use_inventory_hostname | false | Siehe unten |
zookeeper_environment | "JVMFLAGS": "-javaagent:/opt/jolokia/jolokia-jvm-1.6.0-agent.jar" | |
zookeeper_config_params | Ein Schlüssel-Wert-Wörterbuch, das in die Datei zoo.cfg eingesetzt wird | |
zookeeper_firewalld | false |
Inventar- und zookeeper_servers-Variable
Die Variable zookeeper_servers oben akzeptiert eine Liste von Inventar-Hostnamen. Diese werden in der zoo.cfg
verwendet, um ein Multi-Server-Cluster zu konfigurieren, damit die Hosts einander finden können. Standardmäßig wird der Hostname, der in der zoo.cfg
verwendet wird, der Hostname sein, der von dem Befehl hostname
auf dem Server zurückgegeben wird (bereitgestellt durch die Variable ansible_nodename
). Siehe das folgende Beispiel.
Angenommen, die unten stehende Inventardatei und dass der Befehl hostname
nur den Hostnamen zurückgibt und den Domainnamen nicht einbezieht.
[zookeeper-nodes]
zoo1.foo.com zookeeper_id=1 #hostname-Befehl gibt "zoo1" zurück
zoo2.foo.com zookeeper_id=2 #hostname-Befehl gibt "zoo2" zurück
zoo3.foo.com zookeeper_id=3 #hostname-Befehl gibt "zoo3" zurück
Und angenommen, die folgenden Rollenvariablen:
---
- role: sleighzy.zookeeper
zookeeper_servers:
- zoo1.foo.com
- zoo2.foo.com
- zoo3.foo.com
Die templated zoo.cfg
-Datei wird die folgenden Einträge enthalten:
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
Wenn Sie diese Vorgehensweise NICHT wünschen und möchten, dass die zoo.cfg
den inventory_hostname
einsetzt, setzen Sie zookeeper_servers_use_inventory_hostname
auf true
.
Standard-Ports
Port | Beschreibung |
---|---|
2181 | Client-Verbindungspunkt |
2888 | Quorum-Port für das Clustering |
3888 | Port für die Wahl des Leaders |
Standardverzeichnisse und -dateien
Beschreibung | Verzeichnis / Datei |
---|---|
Installationsverzeichnis | /usr/share/apache-zookeeper-<version> |
Symlink zum Installationsverzeichnis | /usr/share/zookeeper |
Symlink zur Konfiguration | /etc/zookeeper/zoo.cfg |
Protokolldateien | /var/log/zookeeper |
Datenverzeichnis für Snapshots und myid-Datei | /var/lib/zookeeper |
Datenverzeichnis für Transaktionsprotokolle | /var/lib/zookeeper |
systemd-Dienst | /usr/lib/systemd/system/zookeeper.service |
System Standardeinstellungen | /etc/default/zookeeper |
Starten und Stoppen von ZooKeeper-Diensten
- Der ZooKeeper-Dienst kann gestartet werden mit:
systemctl start zookeeper
- Der ZooKeeper-Dienst kann gestoppt werden mit:
systemctl stop zookeeper
Befehle mit vier Buchstaben
ZooKeeper kann Befehle basierend auf vier Buchstaben verwenden, siehe https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_4lw
Das folgende Beispiel verwendet den Befehl stat, um herauszufinden, welche Instanz der Leader ist:
for i in 1 2 3 ; do
echo "zookeeper0$i ist "$(echo stat | nc zookeeper0$i 2181 | grep ^Mode | awk '{print $2}');
done
Abhängigkeiten
Keine Abhängigkeiten
Beispiel-Playbook
- hosts: zookeeper-nodes
roles:
- sleighzy.zookeeper
Linting
Linting sollte mit ansible-lint durchgeführt werden
pip3 install ansible-lint --user
ansible-lint -c ./.ansible-lint .
Tests
Dieses Modul verwendet das Test-Framework Ansible Molecule. Diese Testsuite erstellt ein ZooKeeper-Cluster mit drei Knoten, die in Docker-Containern ausgeführt werden. Jeder Container führt ein anderes Betriebssystem aus, um die unterstützten Plattformen für diese Ansible-Rolle zu testen.
Gemäß der [Molecule-Installationsanleitung] sollte dies in einer virtuellen Umgebung erfolgen. Die folgenden Befehle erstellen eine Python-virtuelle Umgebung und installieren Molecule einschließlich des Docker-Treibers.
$ python3 -m venv molecule-venv
$ source molecule-venv/bin/activate
(molecule-venv) $ pip3 install ansible docker "molecule-plugins[docker]"
Führen Sie das Playbook und die Tests aus. Linting-Fehler müssen behoben werden, bevor Molecule Tests ausführt. Dies führt alle Tests aus und zerstört dann die Docker-Container.
molecule test
Der folgende Befehl kann verwendet werden, um das Playbook ohne Tests auszuführen. Dies kann mehrmals durchgeführt werden, wenn Änderungen an der Rolle vorgenommen werden, um sicherzustellen, dass die Vorgänge idempotent sind.
molecule converge
Die folgenden Befehle können verwendet werden, um nur die Tests auszuführen, ohne alles abzureißen. Der Befehl molecule verify
kann für jeden Testlauf wiederholt werden.
molecule create
molecule converge
molecule verify
Zerstören Sie die Molecule-Tests und Docker-Container.
molecule destroy
Lizenz
Apache ZooKeeper installation for RHEL/CentOS and Debian/Ubuntu
ansible-galaxy install sleighzy.zookeeper