sleighzy.zookeeper
Apache ZooKeeper
Rola Ansible do instalacji i konfiguracji Apache ZooKeeper
Ta rola może być używana do instalacji i klasteryzacji wielu węzłów ZooKeeper. Domyślnie korzysta ze wszystkich hostów zdefiniowanych w grupie "zookeeper-nodes" w pliku inwentaryzacyjnym. Wszystkie serwery są dodawane do pliku zoo.cfg wraz z portami lidera i wyborów. Porty zapory mogą być otwarte po ustawieniu wartości true
dla zmiennej zookeeper_firewalld
.
Obsługiwane platformy
- Debian 10.x
- RedHat 7
- RedHat 8
- Ubuntu 18.04.x
- Ubuntu 20.04.x
Wymagania
Java: Java 8 / 11
Minimalne wymagane wersje to Ansible 2.9.16 lub 2.10.4, aby obejść problem z niektórymi jądrami, które psują sprawdzanie statusu systemd
. Komunikat o błędzie "Service is in unknown state
" pojawi się podczas próby uruchomienia usługi za pomocą roli Ansible, a zadanie zakończy się niepowodzeniem. Usługa uruchomi się zgodnie z oczekiwaniami, jeśli polecenie systemctl start
zostanie uruchomione na fizycznym hoście. Zobacz https://github.com/ansible/ansible/issues/71528 po więcej informacji.
Zmienne roli
Zmienna | Domyślna | Komentarz |
---|---|---|
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 | Unikalny dla serwera i powinien być określony w pliku inwentaryzacyjnym |
zookeeper_leader_port | 2888 | |
zookeeper_election_port | 3888 | |
zookeeper_servers | zookeeper-nodes | Zobacz poniżej |
zookeeper_servers_use_inventory_hostname | false | Zobacz poniżej |
zookeeper_environment | "JVMFLAGS": "-javaagent:/opt/jolokia/jolokia-jvm-1.6.0-agent.jar" | |
zookeeper_config_params | Słownik klucz-wartość, który zostanie wstawiony do zoo.cfg | |
zookeeper_firewalld | false |
Inwentaryzacja i zmienna zookeeper_servers
Zmienna zookeeper_servers powyżej akceptuje listę nazw hostów inwentaryzacyjnych. Zostaną one użyte w zoo.cfg
do skonfigurowania klastra wieloserwerowego, aby hosty mogły się odnaleźć. Domyślnie, nazwa hosta użyta w zoo.cfg
będzie nazwą hosta zgłaszaną przez polecenie hostname
na serwerze (dostarczoną przez zmienną ansible_nodename
). Zobacz przykład poniżej.
Zakładając poniższy plik inwentaryzacyjny i że polecenie hostname
zwraca tylko nazwę hosta i nie zawiera nazwy domeny.
[zookeeper-nodes]
zoo1.foo.com zookeeper_id=1 #polecenie hostname zwraca "zoo1"
zoo2.foo.com zookeeper_id=2 #polecenie hostname zwraca "zoo2"
zoo3.foo.com zookeeper_id=3 #polecenie hostname zwraca "zoo3"
I zakładając poniższe zmienne roli:
---
- rola: sleighzy.zookeeper
zookeeper_servers:
- zoo1.foo.com
- zoo2.foo.com
- zoo3.foo.com
Wstawiony plik zoo.cfg
będzie zawierał poniższe wpisy:
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
Jeśli NIE chcesz tego zachowania i chcesz, aby zoo.cfg
używał inventory_hostname, ustaw zookeeper_servers_use_inventory_hostname
na true
.
Domyślne porty
Port | Opis |
---|---|
2181 | Port połączenia klientów |
2888 | Port kworum dla klasteryzacji |
3888 | Port wyborów lidera dla klasteryzacji |
Domyślne katalogi i pliki
Opis | Katalog / Plik |
---|---|
Katalog instalacji | /usr/share/apache-zookeeper-<wersja> |
Dowiązanie do katalogu instalacji | /usr/share/zookeeper |
Dowiązanie do konfiguracji | /etc/zookeeper/zoo.cfg |
Pliki dziennika | /var/log/zookeeper |
Katalog danych dla zrzutów i pliku myid | /var/lib/zookeeper |
Katalog danych dla plików dziennika | /var/lib/zookeeper |
Usługa systemd | /usr/lib/systemd/system/zookeeper.service |
Ustawienia systemowe | /etc/default/zookeeper |
Uruchamianie i zatrzymywanie usług ZooKeeper
- Usługę ZooKeeper można uruchomić poleceniem:
systemctl start zookeeper
- Usługę ZooKeeper można zatrzymać poleceniem:
systemctl stop zookeeper
Komendy Czteroliterowe
ZooKeeper może używać komend opartych na czteroliterowych słowach. Zobacz https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_4lw
Poniższy przykład używa komendy stat, aby sprawdzić, który instance jest liderem:
for i in 1 2 3 ; do
echo "zookeeper0$i jest "$(echo stat | nc zookeeper0$i 2181 | grep ^Mode | awk '{print $2}');
done
Zależności
Brak zależności
Przykład Playbooka
- hosts: zookeeper-nodes
roles:
- sleighzy.zookeeper
Linting
Linting należy wykonać za pomocą ansible-lint
pip3 install ansible-lint --user
ansible-lint -c ./.ansible-lint .
Testowanie
Ten moduł używa frameworka testowego Ansible Molecule. Ten zestaw testowy tworzy klaster ZooKeeper składający się z trzech węzłów działających w kontenerach Docker. Każdy kontener uruchamia różny system operacyjny, aby przetestować obsługiwane platformy dla tej roli Ansible.
Zgodnie z [Przewodnikiem instalacji Molecule] powinno to być wykonane w wirtualnym środowisku. Poniższe polecenia utworzą wirtualne środowisko Pythona i zainstalują Molecule, w tym sterownik Docker.
$ python3 -m venv molecule-venv
$ source molecule-venv/bin/activate
(molecule-venv) $ pip3 install ansible docker "molecule-plugins[docker]"
Uruchom playbook i testy. Błędy lintingu muszą zostać poprawione przed wykonaniem jakichkolwiek testów przez Molecule. To uruchomi wszystkie testy, a następnie zniszczy kontenery Docker.
molecule test
Poniższe polecenie można użyć do uruchomienia playbooka bez testów. Można je uruchamiać wielokrotnie przy wprowadzaniu zmian w roli, aby upewnić się, że operacje są idempotentne.
molecule converge
Poniższe polecenia można użyć tylko do uruchomienia testów bez niszczenia wszystkiego. Polecenie molecule verify
można powtarzać dla każdego uruchomienia testu.
molecule create
molecule converge
molecule verify
Zniszcz testy Molecule i kontenery Docker.
molecule destroy
Licencja
Apache ZooKeeper installation for RHEL/CentOS and Debian/Ubuntu
ansible-galaxy install sleighzy.zookeeper