zookeeper

Apache ZooKeeper

Lint Code Base Molecule

Роль 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

Лицензия

MIT license

О проекте

Apache ZooKeeper installation for RHEL/CentOS and Debian/Ubuntu

Установить
ansible-galaxy install sleighzy/ansible-zookeeper
Лицензия
mit
Загрузки
20373
Владелец