2) Установка Zookeeper с топологией Zoo3
Кластер будет разворачиваться мимо kubernetes - как отдельные сервисы, управляемым подсистемой systemd.
2.1) Предварительные требование
Необходимо иметь три сервера, на которые будем устанавливать кластер зукипера.
Необходимо иметь ssh-доступ к этим серверам. В нашем случае доступ к серверам будет осуществляться с помощью команд:
ssh worker4
ssh worker5
ssh worker6
Также в дальнейшем используется, что эти сервера имеют следующие IP-адреса:
worker4 - 192.168.17.134
worker5 - 192.168.17.135
worker6 - 192.168.17.136
В вашем случае это может быть иначе, учтите это в дальнейшем.
2.2) Установка OpenJDK
Зукипер написан на языке программирования Java и поэтому он нуждается в JVM-е, и её нужно установить. Для этого запустите команды:
ssh worker4 sudo apt install -y openjdk-17-jre
ssh worker4 sudo apt install -y openjdk-17-jre
ssh worker6 sudo apt install -y openjdk-17-jre
2.3) Скачивание и проверка дистрибутивов
Также зайдите на своём компьютере в директорию dist
cd dist
Если её нет, то создайте. И скачайте последнюю версию программы со страницы:
https://dlcdn.apache.org/zookeeper/zookeeper-3.8.1/
Выполнив команды:
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.1/apache-zookeeper-3.8.1-bin.tar.gz
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.1/apache-zookeeper-3.8.1-bin.tar.gz.sha512
После нужно проверить правильно ли загрузился файл, выполнив команду:
sha512sum -c apache-zookeeper-3.8.1-bin.tar.gz.sha512
Должно вылететь:
apache-zookeeper-3.8.1-bin.tar.gz: OK
Что файл загрузился без ошибок.
2.4) Копирование дистрибутивов на сервера
Предполагается, что на серверах уже есть директория dist в домашней директории пользователя. Если нет, то создайте:
ssh worker4 mkdir dist
ssh worker4 mkdir dist
ssh worker6 mkdir dist
Дальше нужно скопировать скаченный архив на сервера, где он будет устанавливаться:
ssh scp apache-zookeeper-3.8.1-bin.tar.gz worker4:dist/
ssh scp apache-zookeeper-3.8.1-bin.tar.gz worker4:dist/
ssh scp apache-zookeeper-3.8.1-bin.tar.gz worker6:dist/
Теперь его нужно установить. Далее будет описано как установить его на один сервер. Вам нужно будут это сделать для всех серверов, кластера Zookeeper.
2.5) Установка на один сервер
Заходим на сервер и в папку dist:
ssh worker4
cd dist
Все программы в системах Unix, которые устанавливаются вручную, устанавливаются в директорию /opt. (Ubuntu является Linux-ом, а Linux является Unix-ом)
2.5.1) Подготовка директории /opt/zookeeper/
Убедитесь, что она существует. Если нет, то создайте её.
sudo mkdir -p /opt/
Вы находитесь в директории ~/dist. Распакуйте дистрибутив:
tar xvf apache-zookeeper-3.8.1-bin.tar.gz
Появиться директория:
apache-zookeeper-3.8.1-bin
Перенесите её в opt:
sudo mv ./apache-zookeeper-3.8.1-bin /opt/
Далее перейдём в папку /opt
cd /opt
Меняем владельца файлов на root:
sudo chown -Rv root: ./apache-zookeeper-3.8.1-bin
Делаем символическую ссылку (чтобы в последствии было проще обновлять версию)
sudo ln -s ./apache-zookeeper-3.8.1-bin zookeeper
2.5.2) Настройка конфигурации и директории для данных
Теперь переходим в папку zookeeper
cd /opt/zookeeper/
Создаём пользователя, из под которого будет работать сервер:
sudo useradd zookeeper
Создаём директорию, где будут храниться данные:
sudo mkdir -p /data/zookeeper
У вас эта директория может оказаться где-то в другом месте. Если так, то в дальнейшем не забудьте менять эту директорию на нужную вам.
Создадим директорию для логирования:
sudo mkdir -p /data/zookeeper/logs
Передадим их в собственность пользователя zookeeper:
sudo chown -Rv zookeeper: /data/zookeeper
Мы находимся в директории /opt/zookeeper - сделаем символическую ссылку на директорию логирования:
sudo ln -s /data/zookeeper/logs logs
Теперь настроим конфиг:
sudo mcedit -b conf/zoo.cfg
И вставим туда текст:
tickTime = 2000
dataDir=/data/zookeeper
clientPort = 2181
initLimit = 5
syncLimit = 2
server.1=192.168.17.134:2888:3888
server.2=192.168.17.135:2888:3888
server.3=192.168.17.136:2888:3888
Здесь указаны IP-адреса серверов: worker4 - 192.168.17.134, worker4 - 192.168.17.135, worker6 - 192.168.17.136 Подставьте те, которые у вас.
Обратите внимание на строку dataDir=/data/zookeeper - поставьте здесь нужный вам путь.
Теперь нужно создать файл идентификации сервера
Для сервера worker4:
echo 1 | sudo tee /data/zookeeper/myid
Для сервера worker4:
echo 2 | sudo tee /data/zookeeper/myid
Для сервера worker6:
echo 3 | sudo tee /data/zookeeper/myid
ВНИМАНИЕ! Иметь одинаковый идентификатор для двух серверов - недопустимо.
2.5.3) Пробный запуск сервера
Теперь можно сделать пробный запуск сервера:
sudo -u zookeeper bin/zkServer.sh start
Если есть ошибки - исправить их. Если всё нормально - остановить сервер:
sudo -u zookeeper bin/zkServer.sh stop
Проверьте папку /data/zookeeper - там должна появиться директория version-2.
2.5.4) Настройка системного сервиса systemd
Теперь нужно настроить автоматический запуск с помощью systemd. Для этого создайте файл:
sudo mcedit -b /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
MemoryHigh=500M
MemoryMax=500M
[Install]
WantedBy=default.target
После этого запустите:
sudo systemctl daemon-reload
И активируйте новый сервис:
sudo systemctl enable zookeeper
Ну а теперь запустите сам сервер как сервис в операционной системе:
sudo systemctl start zookeeper
Посмотреть статус сервиса можно командой:
sudo systemctl status zookeeper
Должно вылететь что-то типа:
● zookeeper.service - Zookeeper Daemon
Loaded: loaded (/etc/systemd/system/zookeeper.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-03-15 03:46:56 UTC; 1h 53min ago
Docs: http://zookeeper.apache.org
Main PID: 273020 (java)
Tasks: 49 (limit: 9402)
Memory: 56.2M (high: 500.0M max: 500.0M available: 443.7M)
CPU: 9.983s
CGroup: /system.slice/zookeeper.service
└─273020 java -Dzookeeper.log.dir=/opt/zookeeper/bin/../logs -Dzookeeper.log.file=zookeeper-zookeeper
-server-worker6.log
......................
om.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.
quorum.QuorumPeerMain /opt/zookeeper/conf/zoo.cfg
Mar 15 03:46:55 worker6 systemd[1]: Starting Zookeeper Daemon...
Mar 15 03:46:55 worker6 zkServer.sh[273005]: /usr/bin/java
Mar 15 03:46:55 worker6 zkServer.sh[273005]: ZooKeeper JMX enabled by default
Mar 15 03:46:55 worker6 zkServer.sh[273005]: Using config: /opt/zookeeper/conf/zoo.cfg
Mar 15 03:46:56 worker6 zkServer.sh[273005]: Starting zookeeper ... STARTED
Mar 15 03:46:56 worker6 systemd[1]: Started Zookeeper Daemon.
Выйдите туда где есть yaml-файлы и запустите команду:
kubectl apply -f yaml-files/030-Zookeeper-Kafka/10-zoo-navigator.yaml
В kubernetes запуститься zoo-navigator и его можно посмотреть в браузере по адресу:
http://192.168.17.137:30302
Здесь указан плавающий IP-адрес.