sleighzy.zookeeper

Apache ZooKeeper

Lint Code Base Molecule

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

Licencja MIT

O projekcie

Apache ZooKeeper installation for RHEL/CentOS and Debian/Ubuntu

Zainstaluj
ansible-galaxy install sleighzy.zookeeper
Licencja
mit
Pobrania
23.2k
Właściciel