Установка ZooKeeper на ОС RHEL/CentOS — различия между версиями
Vaal (обсуждение | вклад) м |
Vaal (обсуждение | вклад) м |
||
Строка 62: | Строка 62: | ||
::::'''server.6=<span style="color:darkred">ip_addr_6</span>:3001:3002''' | ::::'''server.6=<span style="color:darkred">ip_addr_6</span>:3001:3002''' | ||
::::'''EOF''' | ::::'''EOF''' | ||
− | ::::<span style="color:blue">4)</span>'''# chown | + | ::::<span style="color:blue">4)</span>'''# chown user_dev:user_dev -R /opt/zookeeper/ && scp -Cqr /opt/zookeeper/ root@<span style="color:darkred">ip_addr_2</span>:/opt/;'''<br />  '''# scp -Cqr /opt/zookeeper/ root@<span style="color:darkred">ip_addr_3</span>:/opt/'''<br /> '''# scp -Cqr /opt/zookeeper/ root@<span style="color:darkred">ip_addr_4</span>:/opt/'''<br /> '''# scp -Cqr /opt/zookeeper/ root@<span style="color:darkred">ip_addr_5</span>:/opt/'''<br /> '''# scp -Cqr /opt/zookeeper/ root@<span style="color:darkred">ip_addr_6</span>:/opt/''' |
− | ::::<span style="color:blue">5)</span>'''# echo '1' > /opt/zookeeper/data/myid;'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_2</span> "echo 2 > /opt/zookeeper/data/myid && chown | + | ::::<span style="color:blue">5)</span>'''# echo '1' > /opt/zookeeper/data/myid;'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_2</span> "echo 2 > /opt/zookeeper/data/myid && chown user_dev. /opt/zookeeper/data/myid;"'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_3</span> "echo 3 > /opt/zookeeper/data/myid && chown user_dev. /opt/zookeeper/data/myid;"'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_4</span> "echo 4 > /opt/zookeeper/data/myid && chown user_dev. /opt/zookeeper/data/myid;"'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_5</span> "echo 5 > /opt/zookeeper/data/myid && chown user_dev. /opt/zookeeper/data/myid;"'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_6</span> "echo 6 > /opt/zookeeper/data/myid && chown user_dev. /opt/zookeeper/data/myid;"''' |
::::<span style="color:blue">6)</span>'''# chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_2</span> "chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root"'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_3</span> "chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root"'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_4</span> "chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root"'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_5</span> "chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root"'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_6</span> "chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root"''' | ::::<span style="color:blue">6)</span>'''# chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_2</span> "chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root"'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_3</span> "chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root"'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_4</span> "chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root"'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_5</span> "chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root"'''<br /> '''# ssh root@<span style="color:darkred">ip_addr_6</span> "chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root"''' | ||
Текущая версия на 22:29, 16 февраля 2018
Содержание
Введение
На данной странице приводится инструкция по установке прикладного ПО Zookeeper на ОС RHEL и CentOS веток 5.x-6.x, 7.x.
ZooKeeper — распределённый сервис конфигурирования и синхронизации, не знаю как вам, но мне данное определение мало что раскрывает. Оглядываясь на свой опыт, могу дать альтернативное определение ZooKeeper, это распределенное key/value(ключ/значение) хранилище со следующими свойствами:
- пространство ключей образует дерево (иерархию подобную файловой системе);
- значения могут содержаться в любом узле иерархии, а не только в листьях (как если бы файлы одновременно были бы и каталогами), узел<u/> иерархии называется <u>znode;
- между клиентом и сервером двунаправленная связь, следовательно, клиент может подписываться как изменение конкретного значения или части иерархии;
- возможно создать временную пару ключ/значение, которая существует, пока клиент, её создавший, подключен к кластеру;
- все данные должны помещаться в память;
- устойчивость к смерти некритического кол-ва узлов кластера(наличие кворума).
Установка ПО Zookeeper на RHEL/CentOS 6.x
Для инсталляции будет использоваться zookeeper версии 3.4.6. В файл ~/.bash_profile, пользователя из-под которого планируется запуск сервисов, должны быть внесены переменные окружения JAVA/JRUBY:
# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=/opt/java/bin:$PATH:$HOME/bin:/opt/jruby/bin JRUBY_HOME=/opt/jruby PATH=$PATH:$HOME/bin export PATH export JRUBY_HOME
В данном примере настройка ПО ZooKeeper выполняется под суперпользователем root.
В данной главе рассматривается вариант установки ПО ZooKeeper на 6 хостах(официальная документация рекомендует использовать нечётное кол-во хостов — 3, 5, 7 и т.д.). При этом, в данном случае, для работы ПО ZooKeeper необходимо обеспечить постоянную работу любых четырёх узлов ПО ZooKeeper из шести.
Для установки ПО ZooKeeper на серверах, необходимо выполнить следующие команды на сервере:
- 1)# wget http://apache-mirror.rbc.ru/pub/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz -O /opt/zookeeper.tar.gz
- или
- # wget http://apache-mirror.rbc.ru/pub/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz -O /opt/zookeeper.tar.gz
- 2)# cd /opt; tar zxvf zookeeper.tar.gz && mv zookeeper-3.4.6 zookeeper; chmod +x -R zookeeper/ && mkdir -p /opt/zookeeper/{data,log}
# sed -i "s|#!/usr/bin/env bash|#!/usr/bin/env bash \n . ~/.bash_profile|" /opt/zookeeper/bin/zkEnv.sh
# sed -i "s|ZOO_LOG_DIR=\x22\x2E\x22|ZOO_LOG_DIR=\x22/opt/zookeeper/log\x22|" /opt/zookeeper/bin/zkEnv.sh
# sed -i "s|ZOO_LOG4J_PROP=\x22INFO,CONSOLE\x22|ZOO_LOG4J_PROP=\x22INFO,ROLLINGFILE\x22|" /opt/zookeeper/bin/zkEnv.sh - 3)# cat >>/opt/zookeeper/conf/zoo.cfg<<EOF
- # Конфигурационный файл ZooKeeper
- # Порт для подключения клиентов
- clientPort=3000
- # Путь к директории с данными ZooKeeper
- dataDir=/opt/zookeeper/data
- # Длина такта (в миллисекундах)
- tickTime=2000
- # Количество тактов для подключения к лидеру и синхронизации с ним
- initLimit=10
- # Количество тактов для синхронизации с лидером
- syncLimit=5
- # Периодичность удаления старых данных ZooKeeper (в часах). 0 - не удалять.
- autopurge.purgeInterval=1
- # Количество файлов, оставляемое при удалении старых данных
- autopurge.snapRetainCount=3
- # Адреса всех серверов кластера ZooKeeper
- # Формат: server.number=host:leader_port:election_port[:observer]
- server.1=ip_addr_1:3001:3002
- server.2=ip_addr_2:3001:3002
- server.3=ip_addr_3:3001:3002
- server.4=ip_addr_4:3001:3002
- server.5=ip_addr_5:3001:3002
- server.6=ip_addr_6:3001:3002
- EOF
- 4)# chown user_dev:user_dev -R /opt/zookeeper/ && scp -Cqr /opt/zookeeper/ root@ip_addr_2:/opt/;
# scp -Cqr /opt/zookeeper/ root@ip_addr_3:/opt/
# scp -Cqr /opt/zookeeper/ root@ip_addr_4:/opt/
# scp -Cqr /opt/zookeeper/ root@ip_addr_5:/opt/
# scp -Cqr /opt/zookeeper/ root@ip_addr_6:/opt/ - 5)# echo '1' > /opt/zookeeper/data/myid;
# ssh root@ip_addr_2 "echo 2 > /opt/zookeeper/data/myid && chown user_dev. /opt/zookeeper/data/myid;"
# ssh root@ip_addr_3 "echo 3 > /opt/zookeeper/data/myid && chown user_dev. /opt/zookeeper/data/myid;"
# ssh root@ip_addr_4 "echo 4 > /opt/zookeeper/data/myid && chown user_dev. /opt/zookeeper/data/myid;"
# ssh root@ip_addr_5 "echo 5 > /opt/zookeeper/data/myid && chown user_dev. /opt/zookeeper/data/myid;"
# ssh root@ip_addr_6 "echo 6 > /opt/zookeeper/data/myid && chown user_dev. /opt/zookeeper/data/myid;" - 6)# chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root
# ssh root@ip_addr_2 "chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root"
# ssh root@ip_addr_3 "chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root"
# ssh root@ip_addr_4 "chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root"
# ssh root@ip_addr_5 "chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root"
# ssh root@ip_addr_6 "chmod +x /opt/zookeeper/check_zoo.sh; sleep 0.2; echo '*/1 * * * * /opt/zookeeper/check_zoo.sh' >> /var/spool/cron/root"
- 1)# wget http://apache-mirror.rbc.ru/pub/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz -O /opt/zookeeper.tar.gz
Установка ПО Zookeeper на RHEL/CentOS 7.x
Для инсталляции будет использоваться zookeeper версии 3.4.10. В файл ~/.bash_profile, пользователя из-под которого планируется запуск сервисов, должны быть внесены переменные окружения JAVA/JRUBY:
# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi
# User specific environment and startup programs PATH=/opt/java/bin:$PATH:$HOME/bin:/opt/jruby/bin JRUBY_HOME=/opt/jruby PATH=$PATH:$HOME/bin
export PATH export JRUBY_HOME
Все действия выполняются под пользователем root(сервер 10.160.20.186, владельцем директорий будет пользователь user_dev, запуск сервиса будет осуществляться из-под пользователя user_dev):
- Переходим в каталог /opt и скачиваем актуальную версию ПО Zookeeper(в нашем случае — 3.4.10) с официального сайта
# cd /opt && wget http://apache-mirror.rbc.ru/pub/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
- Распаковываем скачанный архив, переименовываем директорию, назначаем владельцем пользователя user_dev
# tar xzvf zookeeper-3.4.10.tar.gz && mv zookeeper-3.4.10 zookeeper && chown user_dev. -R /opt/zookeeper
- Настраиваем инстанс zookeeper на сервере:
a) Добавляем в файл zkEnv.sh строку ". ~/.bash_profile" сразу после строки "#!/usr/bin/env bash" (для упрощения приводится команда sed): # sed -i "s|#!/usr/bin/env bash|#!/usr/bin/env bash \n . ~/.bash_profile|" /opt/zookeeper/bin/zkEnv.sh
b) Изменяем параметр ZOO_LOG_DIR в файле zkEnv.sh(для упрощения приводится команда sed): # sed -i "s|ZOO_LOG_DIR=\x22\x2E\x22|ZOO_LOG_DIR=\x22/opt/zookeeper/log\x22|" /opt/zookeeper/bin/zkEnv.sh
c) Изменяем параметр ZOO_LOG4J_PROP в файле zkEnv.sh(для упрощения приводится команда sed): # sed -i "s|ZOO_LOG4J_PROP=\x22INFO,CONSOLE\x22|ZOO_LOG4J_PROP=\x22INFO,ROLLINGFILE\x22|" /opt/zookeeper/bin/zkEnv.sh
d) Создаём директории data и log: # mkdir -p /opt/zookeeper/{data,log}
e) Создаём файл myid в директории data и в него помещаем значение 1: # echo '1' > /opt/zookeeper/data/myid
f) Настраиваем файл /opt/zookeeper/conf/zoo.cfg, далее приведена настройка для сервера 10.160.22.186: # echo > /opt/zookeeper/conf/zoo.cfg # cat >>/opt/zookeeper/conf/zoo.cfg <<EOF # ZooKeeper node2 #.... clientPort=3010 # ZooKeeper dataDir=/opt/zookeeper/data # ( ) tickTime=2000 #.......... initLimit=20 #...... syncLimit=10 # ZooKeeper ( ). 0 - . autopurge.purgeInterval=1 # ,..... autopurge.snapRetainCount=3 # ZooKeeper # : server.number=host:leader_port:election_port[:observer] server.1=10.160.22.186:3001:3002 server.2=10.160.22.186:3003:3004 server.3=10.160.22.188:3005:3006 server.4=10.160.22.188:3007:3008 EOF
g) Создаём файл сервиса ZooKeeper: # touch /etc/systemd/system/ZooKeeper.service
h) Редактируем созданный на этапе g) файл: # cat >> /etc/systemd/system/ZooKeeper.service <<EOF [Unit] Description=Apache Zookeeper server. Documentation=http://zookeeper.apache.org Requires=network.target remote-fs.target. After=network.target remote-fs.target
[Service] Type=forking User=user_dev Group=user_dev ExecStart=/opt/zookeeper/bin/zkServer.sh start ExecStop=/opt/zookeeper/bin/zkServer.sh stop ExecReload=/opt/zookeeper/bin/zkServer.sh restart Restart=always
[Install] WantedBy=multi-user.target EOF
- Назначаем владельцем директорий /opt/zookeeper пользователя user_dev:
#chown user_dev. -R /opt/zookeeper
- Добавляем сервис ZooKeeper.service в автозагрузку:
# systemctl enable ZooKeeper.service
- Запускаем сервисы:
#systemctl daemon-reload && systemctl start ZooKeeper.service
- Проверяем статусы сервиса:
#systemctl status ZooKeeper.service
* ZooKeeper.service - Apache Zookeeper server Loaded: loaded (/etc/systemd/system/ZooKeeper.service; enabled; vendor preset: disabled) Active: active (running) since Пт 2017-07-28 08:44:33 MSK; 1h 2min ago Docs: http://zookeeper.apache.org Process: 2275 ExecStart=/opt/zookeeper/bin/zkServer.sh start (code=exited, status=0/SUCCESS) Main PID: 2290 (java) CGroup: /system.slice/ZooKeeper.service L-2290 java -Dzookeeper.log.dir=/opt/zookeeper/log -Dzookeeper.root.logger=INFO,ROLLINGFILE -cp /o pt/zookeeper/bin/../build/classes:/opt/zookeeper/bin/../build/lib/*.jar:/op... июл 28 08:44:32 VM-V-App-03 systemd[1]: Starting Apache Zookeeper server... июл 28 08:44:32 VM-V-App-03 zkServer.sh[2275]: ZooKeeper JMX enabled by default июл 28 08:44:32 VM-V-App-03 zkServer.sh[2275]: Using config: /opt/zookeeper/bin/../conf/zoo.cfg июл 28 08:44:33 VM-V-App-03 systemd[1]: Started Apache Zookeeper server.
- Перезагружаем сервер, после чего проверяем загрузились ли сервисы ZooKeeper
P.S.
Для проверки получения ответа с сервера 10.160.22.186 выполним команды на сервере 10.160.22.188(должен быть инсталлирован netcat):
# echo "ruok" | nc 10.160.22.186 3010 ; echo
# echo "ruok" | nc 10.160.22.186 3020 ; echo
Ссылки
Apache Zookeeper Home
Пакет ПО Zookeeper версии 3.4.10
ZooKeeper или пишем сервис распределенных блокировок
Скрипт первоначальной установки ZooKeeper
Репозиторий со скриптами автоматизации установки ZooKeeper