Гид по технологиям

Установка и настройка Apache ZooKeeper на Debian 10 (одиночный узел)

• 5 min read • DevOps • Обновлено 19 Nov 2025
Установка Apache ZooKeeper на Debian 10
Установка Apache ZooKeeper на Debian 10

Схема логической структуры Apache ZooKeeper и пример одноузловой установки

Apache ZooKeeper — это бесплатный и открытый сервис для распределённых систем, который упрощает управление большим набором узлов. Он централизует хранение конфигурации, сервисы именования и групповой информации. ZooKeeper написан на Java и позволяет разработчикам сосредоточиться на функциональности приложения, не заботясь о распределённой природе соединений. Чаще всего ZooKeeper используется в сценариях с доминирующим числом чтений по сравнению с записями.

Ключевые возможности: синхронизация, упорядоченные сообщения, сериализация, надёжность и быстрый ответ, механизмы блокировок и автоматического восстановления после сбоев.

Зачем этот гид

Цель — получить рабочий одиночный узел ZooKeeper на Debian 10 для разработки и тестирования. Для production-кластера используйте минимум три узла и дополнительные настройки отказоустойчивости.

Важно: одиночный узел не даёт отказоустойчивости. Он полезен для разработки, CI и тестов.

Сопутствующие термины

  • ZooKeeper: координатор состояния и конфигурации для распределённых приложений.
  • tickTime: базовая единица времени внутри ZooKeeper в миллисекундах.
  • dataDir: папка для данных состояния ZooKeeper.

Требования

  • Сервер с Debian 10, минимум 2 ГБ ОЗУ.
  • Доступ под root или пользователь с правами sudo.

Шаг 1 — Обновите систему

Перед установкой рекомендуем обновить пакеты:

apt-get update -y
apt-get upgrade -y

После обновлений перезагрузите систему, если это требуется.

Шаг 2 — Установка Java

ZooKeeper написан на Java, поэтому потребуется JDK. В репозиториях Debian 10 доступен default-jdk:

apt-get install default-jdk -y

Проверьте версию Java:

java --version

Ожидаемый результат похож на:

openjdk 11.0.5 2019-10-15
OpenJDK Runtime Environment (build 11.0.5+10-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.5+10-post-Debian-1deb10u1, mixed mode, sharing)

Шаг 3 — Создайте системного пользователя для ZooKeeper

Рекомендуется запускать сервис под отдельным непривилегированным пользователем:

useradd zookeeper -m
usermod --shell /bin/bash zookeeper
passwd zookeeper
usermod -aG sudo zookeeper

Пользователь будет владельцем установки и данных ZooKeeper.

Шаг 4 — Загрузка и распаковка ZooKeeper

Перейдите в /opt и скачайте архив с официального архива Apache. В примере использован релиз 3.5.6:

cd /opt
wget https://archive.apache.org/dist/zookeeper/stable/apache-zookeeper-3.5.6-bin.tar.gz

Распакуйте и переименуйте директорию:

tar -xvzf apache-zookeeper-3.5.6-bin.tar.gz
mv apache-zookeeper-3.5.6-bin zookeeper
chown -R zookeeper:zookeeper /opt/zookeeper

Создайте каталог для хранения данных ZooKeeper и назначьте владельца:

mkdir -p /data/zookeeper
chown -R zookeeper:zookeeper /data/zookeeper

Примечание: в production данные можно хранить на отдельном диске или файловой системе с резервированием.

Шаг 5 — Конфигурация ZooKeeper

Все конфигурационные файлы находятся в /opt/zookeeper/conf/. Создайте основной конфиг:

nano /opt/zookeeper/conf/zoo.cfg

Добавьте следующие строки:

tickTime=2500
dataDir=/data/zookeeper
clientPort=2181
maxClientCnxns=80

Объяснение параметров:

  • tickTime: длительность тика в миллисекундах. Влияет на таймауты слейв-лейдер синхронизации.
  • dataDir: папка для данных состояния и журналов.
  • clientPort: порт для подключений клиентов (по умолчанию 2181).
  • maxClientCnxns: максимальное количество одновременных подключений от одного клиента.

Примечание: эти параметры подходят для тестовой среды. Для production измените tickTime, память JVM и параметры журналирования.

Шаг 6 — Запуск и тестирование ZooKeeper

Запустите сервер вручную для первичной проверки:

/opt/zookeeper/bin/zkServer.sh start

Ожидаемый вывод:

/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

Подключитесь клиентом к локальному серверу:

/opt/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181

После подключения вы увидите приглашение вида:

[zk: 127.0.0.1:2181(CONNECTED) 0]

Выполните help для списка команд клиента:

[zk: 127.0.0.1:2181(CONNECTED) 0] help

После тестирования выйдите:

[zk: 127.0.0.1:2181(CONNECTED) 0] quit

Остановите сервер:

/opt/zookeeper/bin/zkServer.sh stop

Ожидаемый вывод при остановке:

/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

Шаг 7 — Создание systemd-сервиса

Чтобы управлять ZooKeeper через 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

Перезагрузите демона systemd и включите автозапуск:

systemctl daemon-reload
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 2019-12-29 15:12:39 UTC; 8min ago
     Docs: http://zookeeper.apache.org
  Process: 9229 ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg (code=exited, status=0/SUCCESS)
 Main PID: 9245 (java)
    Tasks: 29 (limit: 2359)
   Memory: 49.7M
   CGroup: /system.slice/zookeeper.service
           ??9245 java -Dzookeeper.log.dir=/opt/zookeeper/bin/../logs -Dzookeeper.log.file=zookeeper-zookeeper-server-debian10.log -Dzookeeper.

Dec 29 15:12:38 debian10 systemd[1]: Starting Zookeeper Daemon...
Dec 29 15:12:38 debian10 zkServer.sh[9229]: /usr/bin/java
Dec 29 15:12:38 debian10 zkServer.sh[9229]: ZooKeeper JMX enabled by default
Dec 29 15:12:38 debian10 zkServer.sh[9229]: Using config: /opt/zookeeper/conf/zoo.cfg
Dec 29 15:12:39 debian10 zkServer.sh[9229]: Starting zookeeper ... STARTED
Dec 29 15:12:39 debian10 systemd[1]: Started Zookeeper Daemon.

Безопасность и hardening

  • Права доступа: держите /opt/zookeeper и /data/zookeeper доступными только пользователю zookeeper.
  • Сетевой доступ: закройте порт 2181 снаружи, если к ZooKeeper подключаются только локальные сервисы. Пример правила ufw:
ufw allow from 10.0.0.0/8 to any port 2181 proto tcp
ufw deny 2181/tcp
  • JVM: задайте параметры JVM в переменных окружения запуска, если требуется ограничение памяти и GC:
export JVMFLAGS="-Xms512m -Xmx1g"
  • Аутентификация и ACL: используйте систему ACL ZooKeeper для ограничения операций записи.
  • Логи и мониторинг: включите JMX и интегрируйте с системой мониторинга для отслеживания состояния кворума и латентности.

Переход к production

Минимальные рекомендации для production:

  • Разверните кластер из нечётного числа узлов (3, 5 и т.д.).
  • Разнесите узлы по разным отказоустойчивым зонам.
  • Настройте бэкапы каталога dataDir и журналов транзакций.
  • Настройте мониторинг SLI/SLO: доступность, задержка чтения/записи, нагрузка GC.

Отладка и распространённые проблемы

  1. ZooKeeper не стартует
  • Проверьте права на /opt/zookeeper и /data/zookeeper.
  • Посмотрите логи в /opt/zookeeper/logs или в systemd journal: journalctl -u zookeeper
  1. Клиент не может подключиться
  • Убедитесь, что порт 2181 слушает: ss -ltnp | grep 2181
  • Проверяйте firewall/iptables
  1. Высокая нагрузка на GC
  • Уменьшите heap или настройте GC-флаги JVM.
  1. Потеря кворума в кластере
  • Проверьте сетевое соединение между узлами и настройки сервера в zoo.cfg.

Когда одиночный узел недостаточен

  • Когда нужна высокая доступность и отсутствие единой точки отказа — одиночный узел не подходит.
  • Для важных рабочих нагрузок требуйте минимум 3 узла, распределённых по разным хостам.

Альтернативы и интеграции

  • Etcd: лёгкая key-value хранилище с интеграцией в Kubernetes.
  • Consul: комбинирует сервис-дискавери и KV-хранилище.

Выбор зависит от требований по согласованности, экосистеме и интеграции.

Быстрый чеклист перед релизом

  • Установлен и проверен Java.
  • Пользователь zookeeper создан.
  • dataDir настроен и имеет правильные права.
  • Конфигурация zoo.cfg соответствует окружению.
  • Сервис systemd создан и включён.
  • Мониторинг и бэкапы настроены.

Рекомендации по обновлению версии ZooKeeper

Мини-методология:

  1. Подготовьте резервную копию dataDir и логов.
  2. Тестируйте обновление на staging-кластере.
  3. Если у вас кластер — обновляйте узлы по одному, проверяя восстановление кворума.
  4. После обновления проверьте логи и метрики.

Краткий глоссарий

  • tickTime: единица времени ZooKeeper.
  • dataDir: директория для хранения состояния.
  • clientPort: порт для клиентских подключений.

Заключение

Вы успешно установили и запустили одиночный узел Apache ZooKeeper на Debian 10. Этот сценарий пригоден для разработки и тестов. Для production используйте кластер из нескольких узлов и дополнительные меры безопасности и мониторинга.

Важно: если потребуется — помогу адаптировать конфигурацию под кластерную установку, добавить TLS/JMX или интеграцию с системой мониторинга.

Критерии приёмки

  • ZooKeeper запускается и отвечает на клиентские команды на 127.0.0.1:2181.
  • Каталог dataDir доступен и принадлежит пользователю zookeeper.
  • Сервис systemd стартует и включён для автозапуска.

Вспомогательные команды

  • Просмотр логов systemd: journalctl -u zookeeper -f
  • Проверка порта: ss -ltnp | grep 2181
  • Проверка клиентом: /opt/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181

Важно

Для production избегайте одиночных узлов. Планируйте кластер из минимум трёх узлов и настройте резервирование данных и мониторинг.

Краткое резюме

  • Установите Java, создайте пользователя, скачайте и распакуйте ZooKeeper.
  • Настройте zoo.cfg и dataDir.
  • Управляйте сервисом через systemd.
  • Настройте безопасность и мониторинг перед выводом в production.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро