Используемые термины: Zookeeper , Linux .
В данной инструкции мы рассмотрим установку Zookeeper, выполним настройку его запуска в качестве сервиса и соберем кластер из трех нод. Предположим, что у нас 3 сервера с адресами:
Разобьем процесс на этапы — предварительная настройка, установка и запуск, настройка кластера.
Готовим систему к работе
Устанавливаем и настраиваем Zookeeper
Установка приложения
Настройка
Создание юнита в systemd
Настройка кластера
На всех трех нодах выполняем следующие действия.
Нам важно, чтобы на нодах нашего кластера было одинаковое время. Для этого установим утилиту chrony:
yum install chrony
Запустим ее и разрешим автозапуск:
systemctl enable chronyd —now
Zookeeper разработан на Java, поэтому выполним установку:
yum install java-11-openjdk
Смотрим версию openjdk:
java -version
Мы должны увидеть что-то на подобие:
openjdk version «11.0.13» 2021-10-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing)
Идем дальше.
Для корректной работы приложения нам нужно отключить SELinux и открыть порты в брандмауэре. Рассмотрим процессы по очереди.
Отключаем SELinux.
Выполним 2 команды:
setenforce 0
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config
Настройка брандмауэра.
Для работы Zookeeper требуется открыть порты:
Для открытия портов вводим:
firewall-cmd —permanent —add-port={2181,2888,3888}/tcp
Применяем настройки:
firewall-cmd —reload
Для корректной загрузки и распаковки архива, нам нужно установить некоторые утилиты и обновить корневые сертификаты. Это делается командами:
yum install ca-certificates wget tar nc
update-ca-trust
* где:
Переходим к установке Zookeeper.
Установку с настройкой также будем делать на всех серверах. Так как в репозитории данного программного продукта нет, мы должны будем скачать архив релиза с сайта разработчика и распаковать его на сервере. Запуск приложения будет настроен с использованием systemd.
Как было сказано выше, установка выполняется путем распаковки архива, скачанного с официального сайта. Переходим на страницу загрузки Zookeeper . Кликаем по ссылке для перехода к последней версии Zookeeper:
Копируем ссылку для загрузки архива tar gz:
Используя скопированную ссылку, загружаем архив на все три сервера:
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
Создаем каталог для размещения zookeeper:
mkdir /opt/zookeeper
Распаковываем скачанный архив:
tar zxvf apache-zookeeper-*-bin.tar.gz -C /opt/zookeeper —strip-components=1
Создаем дополнительные каталоги для логов и данных:
mkdir -p /opt/zookeeper/data /var/log/zookeeper
Создаем конфигурационный файл:
vi /opt/zookeeper/conf/zoo.cfg
tickTime = 2000
maxSessionTimeout = 50000
syncLimit = 5
initLimit = 300
autopurge.purgeInterval = 1
autopurge.snapRetainCount = 5
snapCount = 200000
clientPort = 2181
maxClientCnxns = 100
4lw.commands.whitelist=stat
dataDir = /opt/zookeeper/data
dataLogDir = /var/log/zookeeper
* где:
После установки приложения, настроим его запуск в качестве сервиса.
Создаем служебную учетную запись, под которой будет работать zookeeper:
useradd -r -c ‘Zookeeper service’ zookeeper
Зададим владельцем созданного пользователя для всех каталогов, которые мы создали:
chown -R zookeeper:zookeeper /opt/zookeeper /var/log/zookeeper
Создаем файл для юнита в systemd:
vi /etc/systemd/system/zookeeper.service
[Unit]
Description=ZooKeeper Service
Documentation=https://zookeeper.apache.org/
Requires=network.target
After=network.target
[Service]
Type=forking
User=zookeeper
Group=zookeeper
WorkingDirectory=/opt/zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
ExecReload=/opt/zookeeperbin/zkServer.sh restart
TimeoutSec=30
Restart=on-failure
[Install]
WantedBy=default.target
Перечитываем конфигурацию systemd:
systemctl daemon-reload
Разрешаем автозапуск и стразу стартуем сервис:
systemctl enable zookeeper —now
Проверяем, что сервис запустился:
systemctl status zookeeper
Также можно убедиться, что приложение слушает на порту 2181:
ss -tunlp | grep :2181
Мы должны увидеть что-то на подобие:
tcp LISTEN 0 50 *:2181 *:* users:((«java»,pid=2945,fd=51))
И так, мы установили и запустили приложение, но сейчас оно работает отдельно на наших серверах. Сделаем кластер.
На всех серверах открываем конфигурационный файл:
vi /opt/zookeeper/conf/zoo.cfg
Добавим строку:
…
dynamicConfigFile=/opt/zookeeper/conf/zoo.cfg.dynamic
* dynamicConfigFile указывает путь до динамического файла конфигурации, в котором могут меняться параметры «на лету».
Теперь создадим файл динамической конфигурации:
vi /opt/zookeeper/conf/zoo.cfg.dynamic
server.1=192.168.1.10:2888:3888
server.2=192.168.1.20:2888:3888
server.3=192.168.1.30:2888:3888
* как и говорилось в начале, у нас в кластере будет три сервера. В данном файле мы их перечисляем с присваиванием порядковых номеров.
Теперь на каждом сервере создаем свой файл со своим порядковым номером.
а) на сервере 1:
vi /opt/zookeeper/data/myid
1
б) на сервере 2:
vi /opt/zookeeper/data/myid
2
в) на сервере 3:
vi /opt/zookeeper/data/myid
3
Настройка завершена.
Перезапускаем наш сервис на всех серверах:
systemctl restart zookeeper
Для проверки состояния кластера вводим команды на всех нодах:
echo «stat» | nc localhost 2181
На двух из них мы должны увидеть:
…
Mode: follower
…
На одной:
…
Mode: leader
…
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…