sleighzy.zookeeper

Apache ZooKeeper

Lint Code Base Molecule

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

MIT Lizenz

Über das Projekt

Apache ZooKeeper installation for RHEL/CentOS and Debian/Ubuntu

Installieren
ansible-galaxy install sleighzy.zookeeper
Lizenz
mit
Downloads
23.2k
Besitzer