zookeeper
Apache ZooKeeper
Роль Ansible для установки и настройки Apache ZooKeeper
Эта роль может использоваться для установки и объединения нескольких узлов ZooKeeper. По умолчанию используются все хосты, определенные в группе "zookeeper-nodes" в файле инвентаризации. Все серверы добавляются в файл zoo.cfg вместе с портами лидера и выборов. Порты брандмауэра могут быть открыты после установки значения true
для переменной zookeeper_firewalld
.
Поддерживаемые платформы
- Debian 10.x
- RedHat 7
- RedHat 8
- Ubuntu 18.04.x
- Ubuntu 20.04.x
Требования
Java: Java 8 / 11
Минимальные требуемые версии Ansible — 2.9.16 или 2.10.4, чтобы обойти проблему с определенными ядрами, которые сломали проверку статуса systemd
. Сообщение об ошибке "Service is in unknown state
" будет выдано при попытке запустить службу через роль Ansible, и задача завершится неудачей. Служба начнется, как ожидается, если команда systemctl start
будет выполнена на физическом хосте. Подробности см. на https://github.com/ansible/ansible/issues/71528.
Переменные роли
Переменная | Значение по умолчанию | Комментарий |
---|---|---|
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 | Уникальный для каждого сервера и должен быть указан в файле инвентаризации |
zookeeper_leader_port | 2888 | |
zookeeper_election_port | 3888 | |
zookeeper_servers | zookeeper-nodes | См. ниже |
zookeeper_servers_use_inventory_hostname | false | См. ниже |
zookeeper_environment | "JVMFLAGS": "-javaagent:/opt/jolokia/jolokia-jvm-1.6.0-agent.jar" | |
zookeeper_config_params | Словарь ключ-значение, который будет шаблонизирован в zoo.cfg | |
zookeeper_firewalld | false |
Переменная инвентаризации и zookeeper_servers
Переменная zookeeper_servers принимает список имен хостов из инвентаризации. Они будут использованы в zoo.cfg
для настройки многосерверного кластера, чтобы хосты могли находить друг друга. По умолчанию имя хоста, используемое в zoo.cfg
, будет соответствовать тому, которое возвращает команда hostname
на сервере (предоставлено переменной ansible_nodename
). См. пример ниже.
Предположим, что файл инвентаризации ниже, и команда hostname
возвращает только имя хоста и не включает доменное имя.
[zookeeper-nodes]
zoo1.foo.com zookeeper_id=1 # Команда hostname возвращает "zoo1"
zoo2.foo.com zookeeper_id=2 # Команда hostname возвращает "zoo2"
zoo3.foo.com zookeeper_id=3 # Команда hostname возвращает "zoo3"
И предположим, что следующее значение переменных роли:
---
- role: sleighzy.zookeeper
zookeeper_servers:
- zoo1.foo.com
- zoo2.foo.com
- zoo3.foo.com
Шаблонизированный файл zoo.cfg
будет содержать следующие записи:
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
Если вы НЕ хотите этого поведения и хотите, чтобы zoo.cfg
использовал имена хостов из инвентаризации, установите zookeeper_servers_use_inventory_hostname
в true
.
Порты по умолчанию
Порт | Описание |
---|---|
2181 | Порт подключения клиента |
2888 | Порт кворума для кластеризации |
3888 | Порт выборов лидера для кластеризации |
Папки и файлы по умолчанию
Описание | Папка / Файл |
---|---|
Директория установки | /usr/share/apache-zookeeper-<version> |
Символическая ссылка на директорию установки | /usr/share/zookeeper |
Символическая ссылка на конфигурацию | /etc/zookeeper/zoo.cfg |
Лог-файлы | /var/log/zookeeper |
Директория данных для снимков и файла myid | /var/lib/zookeeper |
Директория данных для файлов журнала транзакций | /var/lib/zookeeper |
Служба systemd | /usr/lib/systemd/system/zookeeper.service |
Значения по умолчанию системы | /etc/default/zookeeper |
Запуск и остановка служб ZooKeeper
- Служба ZooKeeper может быть запущена с помощью:
systemctl start zookeeper
- Служба ZooKeeper может быть остановлена с помощью:
systemctl stop zookeeper
Команды из четырех букв
ZooKeeper может использовать команды, основанные на четырех буквах. См. https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_4lw
Следующий пример использует команду stat, чтобы узнать, какая инстанция является лидером:
for i in 1 2 3 ; do
echo "zookeeper0$i is a "$(echo stat | nc zookeeper0$i 2181 | grep ^Mode | awk '{print $2}');
done
Зависимости
Нет зависимостей.
Пример плейбука
- hosts: zookeeper-nodes
roles:
- sleighzy.zookeeper
Линтинг
Линтинг следует выполнять с использованием ansible-lint.
pip3 install ansible-lint --user
ansible-lint -c ./.ansible-lint .
Тестирование
Этот модуль использует тестовый фреймворк Ansible Molecule. Этот тестовый набор создает кластер ZooKeeper, состоящий из трех узлов, работающих в контейнерах Docker. Каждый контейнер работает на другой ОС для тестирования поддерживаемых платформ для этой роли Ansible.
Согласно [Руководству по установке Molecule], это следует делать с использованием виртуальной среды. Команды ниже создадут виртуальную среду Python и установят Molecule, включая драйвер Docker.
$ python3 -m venv molecule-venv
$ source molecule-venv/bin/activate
(molecule-venv) $ pip3 install ansible docker "molecule-plugins[docker]"
Запустите плейбук и тесты. Ошибки линтинга необходимо исправить перед выполнением любых тестов Molecule. Это выполнит все тесты и затем уничтожит контейнеры Docker.
molecule test
Следующая команда может быть использована для запуска плейбука без тестов. Это можно выполнять несколько раз в процессе внесения изменений в роль и обеспечения идемпотентности операций.
molecule converge
Следующие команды могут быть использованы просто для запуска тестов без уничтожения всего. Команда molecule verify
может быть повторена для каждой серии тестов.
molecule create
molecule converge
molecule verify
Уничтожьте тесты Molecule и контейнеры Docker.
molecule destroy
Лицензия
ansible-galaxy install sleighzy/ansible-zookeeper