Установка Apache ZooKeeper на Ubuntu 20.04

TL;DR
Краткая пошаговая инструкция по установке Apache ZooKeeper на сервер с Ubuntu 20.04: установите Java, создайте отдельного пользователя и директорию данных, загрузите и распакуйте дистрибутив, настройте режим standalone и создайте systemd‑сервис. Проверяйте работу через zkCli.sh и systemctl.
Требования
- Сервер с Ubuntu 20.04.
- Доступ с правами root или пользователь с sudo.
Что такое ZooKeeper (в одном предложении)
ZooKeeper — это распределённый сервис для хранения конфигурации, синхронизации и именования сервисов в кластере.
Установка Java
Apache ZooKeeper написан на Java, поэтому сначала установите JDK:
apt-get install default-jdk -yПроверьте установленную версию Java:
java --versionПример ожидаемого вывода:
openjdk 11.0.8 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu120.04, mixed mode, sharing)Важно: для ZooKeeper 3.6.x и большинства современных версий рекомендуется Java 8 или 11. Если у вас другая версия, проверьте совместимость.
Установка ZooKeeper
Создайте системного пользователя для запуска ZooKeeper и домашнюю директорию:
useradd zookeeper -mЗадайте пароль и добавьте пользователя в группу sudo (при необходимости):
usermod --shell /bin/bash zookeeper
passwd zookeeper
usermod -aG sudo zookeeperСоздайте директорию для данных и назначьте владельца:
mkdir /zookeeper
chown -R zookeeper:zookeeper /zookeeperСкачайте дистрибутив в /opt и распакуйте его (пример для 3.6.2):
cd /opt
wget https://mirrors.estointernet.in/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gztar -xvzf apache-zookeeper-3.6.2-bin.tar.gzПереименуйте директорию и назначьте права:
mv apache-zookeeper-3.6.2-bin zookeeper
chown -R zookeeper:zookeeper /opt/zookeeperНастройка ZooKeeper в автономном режиме
Создайте конфигурационный файл:
nano /opt/zookeeper/conf/zoo.cfgДобавьте следующие строки:
tickTime=2500
dataDir=/zookeeper
clientPort=2181
maxClientCnxns=80Сохраните файл и запустите ZooKeeper вручную для проверки:
cd /opt/zookeeper
bin/zkServer.sh startОжидаемый вывод при запуске:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTEDПроверьте, что ZooKeeper слушает на порту 2181:
ss -ntpl | grep 2181Пример вывода (обратите внимание на процесс java):
LISTEN 0 50 *:2181 *:* users:(("java",pid=12749,fd=53)) Подключитесь к локальному серверу ZooKeeper:
bin/zkCli.sh -server 127.0.0.1:2181Ожидаемый вывод при подключении:
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181(CONNECTED) 0] Выйдите из клиента командой:
quitОстановите сервер ZooKeeper:
bin/zkServer.sh stopОжидаемый ответ при остановке:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPEDСоздание systemd‑сервиса для ZooKeeper
Создайте unit-файл systemd:
nano /etc/systemd/system/zookeeper.serviceВставьте содержимое:
[Unit]
Description=Zookeeper Daemon
Documentation=http://zookeeper.apache.org
Requires=network.target
After=network.target
[Service]
Type=forking
WorkingDirectory=/opt/zookeeper
User=zookeeper
Group=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
ExecStop=/opt/zookeeper/bin/zkServer.sh stop /opt/zookeeper/conf/zoo.cfg
ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
TimeoutSec=30
Restart=on-failure
[Install]
WantedBy=default.targetПримените изменения и назначьте владельца на директории:
systemctl daemon-reload
chown -R zookeeper:zookeeper /opt/zookeeper
chown -R zookeeper:zookeeper /zookeeperЗапустите сервис и включите автозапуск:
systemctl start zookeeper
systemctl enable zookeeperПроверьте статус сервиса:
systemctl status zookeeperПример ожидаемого состояния:
? zookeeper.service - Zookeeper Daemon
Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled; vendor preset: enabled)
Active: active (running) since Sun 2020-09-27 06:43:28 UTC; 8s ago
Docs: http://zookeeper.apache.org
Process: 13915 ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg (code=exited, status=0/SUCCESS)
Main PID: 13946 (java)
Tasks: 37 (limit: 4691)
Memory: 50.6M
CGroup: /system.slice/zookeeper.service
13946 java -Dzookeeper.log.dir=/opt/zookeeper/bin/../logs -Dzookeeper.log.file=zookeeper-zookeeper-server-ubuntu2004.log -Dzook>
Sep 27 06:43:27 ubuntu2004 systemd[1]: Starting Zookeeper Daemon...
Sep 27 06:43:27 ubuntu2004 zkServer.sh[13915]: /usr/bin/java
Sep 27 06:43:27 ubuntu2004 zkServer.sh[13915]: ZooKeeper JMX enabled by default
Sep 27 06:43:27 ubuntu2004 zkServer.sh[13915]: Using config: /opt/zookeeper/conf/zoo.cfg
Sep 27 06:43:28 ubuntu2004 zkServer.sh[13915]: Starting zookeeper ... STARTED
Sep 27 06:43:28 ubuntu2004 systemd[1]: Started Zookeeper Daemon.Важно
- Запускайте ZooKeeper под непользовательской учётной записью (мы создали пользователя zookeeper).
- Для продакшна используйте кластерный режим (несколько узлов), а не standalone.
Критерии приёмки
- Сервис запускается и находится в состоянии active (running). Команда: systemctl status zookeeper — ожидается Active: active (running).
- Порт 2181 слушается. Команда: ss -ntpl | grep 2181 — в выводе присутствует процесс java.
- Удалённое подключение можно установить с помощью bin/zkCli.sh. Команда: bin/zkCli.sh -server 127.0.0.1:2181 — ожидается строка [zk: 127.0.0.1:2181(CONNECTED) 0].
Мини‑методология развертывания (быстро)
- Подготовьте ОС и откройте порты в firewall.
- Установите Java и проверьте версию.
- Создайте системного пользователя и директории для данных.
- Скачайте и распакуйте ZooKeeper; настройте zoo.cfg.
- Протестируйте ручной запуск; подключитесь через клиент.
- Создайте systemd‑unit, включите и проверьте автозапуск.
- Перейдите в кластерный режим и настройте безопасность.
Роль‑основанные чеклисты
- Системный администратор:
- Настроить пользователя zookeeper
- Открыть и контролировать порт 2181 в firewall
- Назначить права на /opt/zookeeper и /zookeeper
- DevOps:
- Автоматизировать установку через шаблон/Ansible
- Настроить systemd и мониторинг (Prometheus/JMX)
- Разработчик:
- Проверить подключение клиентской библиотеки к 127.0.0.1:2181
- Тестировать обработку ошибок при недоступности сервера
- Инженер по безопасности:
- Ограничить доступ по IP
- Настроить аутентификацию и ACL при необходимости
Меры безопасности и рекомендации
- Ограничьте доступ к порту 2181 межсетевыми правилами.
- Не запускайте ZooKeeper от root.
- Рассмотрите включение аутентификации (SASL) и ACL для критичных сред.
- Регулярно делайте бэкапы директории dataDir (/zookeeper).
- Настройте мониторинг метрик JVM и JMX.
Совместимость и миграция
- Проверяйте поддерживаемые версии Java для выбранной версии ZooKeeper.
- При обновлении версии ZooKeeper ознакомьтесь с официальными заметками о выпуске (release notes).
- Для перехода с standalone на кластерную конфигурацию потребуется изменить zoo.cfg и добавить server.N записи и файлы myid в dataDir.
Однострочный глоссарий
- ZooKeeper — распределённый сервис синхронизации и конфигурации.
- tickTime — базовый интервал времени для синхронизации (в миллисекундах).
- dataDir — директория для хранения данных ZooKeeper.
- clientPort — порт для клиентских подключений (по умолчанию 2181).
- systemd — менеджер служб в современных дистрибутивах Linux.
Примеры случаев, когда этот подход не подходит
- Если вам нужен production‑кластер с высокой доступностью — не используйте standalone, разверните несколько узлов.
- Если требуется шифрование трафика — дополнительно настройте TLS между клиентами и серверами.
Заключение
Вы успешно установили и настроили Apache ZooKeeper в автономном режиме на Ubuntu 20.04. Для промышленного использования переведите конфигурацию в кластерный режим, настройте безопасность и мониторинг.
Сводка действий (в порядке выполнения): установить Java → создать пользователя и директории → скачать и распаковать → настроить zoo.cfg → проверить запуск → создать systemd‑сервис → включить автозапуск.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента