Установка ZooKeeper на ОС RHEL/CentOS — различия между версиями

Материал из VAAL-WIKI
Перейти к: навигация, поиск
(Новая страница: «== Введение == На данной странице приводится инструкция по установке прикладного ПО Zookeeper…»)
 
м
 
(не показано 17 промежуточных версии этого же участника)
Строка 1: Строка 1:
 
== Введение ==
 
== Введение ==
На данной странице приводится инструкция по установке прикладного ПО Zookeeper на ОС CentOS 7.3.<br />
+
На данной странице приводится инструкция по установке прикладного ПО ''Zookeeper'' на ОС RHEL и CentOS веток 5.x-6.x, 7.x.<br />
ZooKeeper — распределенный сервис конфигурирования и синхронизации, не знаю как вам, но мне данное определение мало что раскрывает. Оглядываясь на свой опыт, могу дать альтернативное определение ZooKeeper, это распределенное key/value хранилище со следующими свойствами:
+
'''''ZooKeeper''''' распределённый сервис конфигурирования и синхронизации, не знаю как вам, но мне данное определение мало что раскрывает. Оглядываясь на свой опыт, могу дать альтернативное определение '''''ZooKeeper''''', это распределенное ''<u>key</u>''/''<u>value</u>''(''<u>ключ</u>''/''<u>значение</u>'') хранилище со следующими свойствами:
* пространство ключей образует дерево (иерархию подобную файловой системе);
+
* ''пространство ключей образует <u>дерево</u> (иерархию подобную файловой системе)'';
* значения могут содержаться в любом узле иерархии, а не только в листьях (как если бы файлы одновременно были бы и каталогами), узел иерархии называется znode;
+
* ''значения могут содержаться в любом <u>узле</u> иерархии, а не только в <u>листьях</u> (как если бы файлы одновременно были бы и каталогами), <u>узел<u/> иерархии называется <u>znode</u>'';
* между клиентом и сервером двунаправленная связь, следовательно, клиент может подписываться как изменение конкретного значения или части иерархии;
+
* ''между клиентом и сервером двунаправленная связь, следовательно, клиент может подписываться как изменение конкретного значения или части иерархии'';
* возможно создать временную пару ключ/значение, которая существует, пока клиент её создавший подключен к кластеру;
+
* ''возможно создать временную пару <u>ключ</u>/<u>значение</u>, которая существует, пока клиент, её создавший, подключен к кластеру'';
* все данные должны помещаться в память;
+
* ''все данные должны помещаться в память'';
* устойчивость к смерти некритического кол-ва узлов кластера.
+
* ''устойчивость к смерти некритического кол-ва узлов кластера(наличие <u>кворума</u>)''.
  
== Установка ПО Zookeeper на CentOS 7.3 ==
+
== Установка ПО Zookeeper на RHEL/CentOS 6.x ==
Для инсталляции будет использоваться [http://apache-mirror.rbc.ru/pub/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz zookeeper версии 3.4.10]. Все действия выполняются требуют выполнения под пользователем root(<span style="color:red">сервер 10.160.20.186</span>, владельцем директорий будет пользователь ''user_dev'', запуск сервиса будет осуществляться из-под пользователя ''user_dev''):  
+
Для инсталляции будет использоваться [http://apache-mirror.rbc.ru/pub/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz zookeeper версии 3.4.6].
* '''Переходим в каталог /opt и скачиваем актуальную версию ПО Zookeeper(в нашем случае — 3.4.10) с официального сайта, или, в нашем случае, с ftp://10.160.20.13/Software/'''
+
В файл ''~/.bash_profile'', пользователя из-под которого планируется запуск сервисов, должны быть внесены переменные окружения ''JAVA''/''JRUBY'':
<span style="color:green">'''# cd /opt && wget ftp://Reader_S:7ujmMJU@10.160.20.13:/Software/zookeeper-3.4.10.tar.gz'''</span>
+
<source lang="bash">
 +
# .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
 +
</source>
 +
 
 +
В данном примере настройка ПО ''ZooKeeper'' выполняется под суперпользователем <span style="color:darkred">root</span>.<br />
 +
В данной главе рассматривается вариант установки ПО ''ZooKeeper'' на 6 хостах(<u>'''официальная документация рекомендует использовать нечётное кол-во хостов — 3, 5, 7 и т.д.'''</u>). При этом, в данном случае, для работы ПО ''ZooKeeper'' необходимо обеспечить <u>постоянную</u> работу любых четырёх узлов ПО ''ZooKeeper'' из шести. <br />
 +
Для установки ПО ''ZooKeeper'' на серверах,  необходимо выполнить следующие команды на сервере:<br />
 +
::::<span style="color:blue">1)</span>'''# wget <nowiki>http://apache-mirror.rbc.ru/pub/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz</nowiki> -O /opt/zookeeper.tar.gz'''<br />
 +
::::::::::::::::::::::или
 +
::::&nbsp;&nbsp;&nbsp;'''# wget <nowiki>http://apache-mirror.rbc.ru/pub/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz</nowiki> -O /opt/zookeeper.tar.gz'''
 +
::::<span style="color:blue">2)</span>'''# cd /opt; tar zxvf zookeeper.tar.gz && mv zookeeper-3.4.6 zookeeper; chmod +x -R zookeeper/ && mkdir -p /opt/zookeeper/{data,log}'''<br />&nbsp;&nbsp;&nbsp;'''# sed -i "s|#!/usr/bin/env bash|#!/usr/bin/env bash \n . ~/.bash_profile|" /opt/zookeeper/bin/zkEnv.sh'''<br />&nbsp;&nbsp;&nbsp;'''# sed -i "s|ZOO_LOG_DIR=\x22\x2E\x22|ZOO_LOG_DIR=\x22/opt/zookeeper/log\x22|" /opt/zookeeper/bin/zkEnv.sh'''<br />&nbsp;&nbsp;&nbsp;'''# sed -i "s|ZOO_LOG4J_PROP=\x22INFO,CONSOLE\x22|ZOO_LOG4J_PROP=\x22INFO,ROLLINGFILE\x22|" /opt/zookeeper/bin/zkEnv.sh'''
 +
::::<span style="color:blue">3)</span>'''# 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=<span style="color:darkred">ip_addr_1</span>:3001:3002'''
 +
::::'''server.2=<span style="color:darkred">ip_addr_2</span>:3001:3002'''
 +
::::'''server.3=<span style="color:darkred">ip_addr_3</span>:3001:3002'''
 +
::::'''server.4=<span style="color:darkred">ip_addr_4</span>:3001:3002'''
 +
::::'''server.5=<span style="color:darkred">ip_addr_5</span>:3001:3002'''
 +
::::'''server.6=<span style="color:darkred">ip_addr_6</span>:3001:3002'''
 +
::::'''EOF'''
 +
::::<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 />&ensp;&nbsp;'''# scp -Cqr  /opt/zookeeper/ root@<span style="color:darkred">ip_addr_3</span>:/opt/'''<br />&nbsp;&nbsp;&nbsp;'''# scp -Cqr  /opt/zookeeper/ root@<span style="color:darkred">ip_addr_4</span>:/opt/'''<br />&nbsp;&nbsp;&nbsp;'''# scp -Cqr  /opt/zookeeper/ root@<span style="color:darkred">ip_addr_5</span>:/opt/'''<br />&nbsp;&nbsp;&nbsp;'''# 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 />&nbsp;&nbsp;&nbsp;'''# ssh root@<span style="color:darkred">ip_addr_2</span> "echo 2 > /opt/zookeeper/data/myid && chown user_dev. /opt/zookeeper/data/myid;"'''<br />&nbsp;&nbsp;&nbsp;'''# ssh root@<span style="color:darkred">ip_addr_3</span> "echo 3 > /opt/zookeeper/data/myid && chown user_dev. /opt/zookeeper/data/myid;"'''<br />&nbsp;&nbsp;&nbsp;'''# ssh root@<span style="color:darkred">ip_addr_4</span> "echo 4 > /opt/zookeeper/data/myid && chown user_dev. /opt/zookeeper/data/myid;"'''<br />&nbsp;&nbsp;&nbsp;'''# ssh root@<span style="color:darkred">ip_addr_5</span> "echo 5 > /opt/zookeeper/data/myid && chown user_dev. /opt/zookeeper/data/myid;"'''<br />&nbsp;&nbsp;&nbsp;'''# 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 />&nbsp;&nbsp;&nbsp;'''# 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 />&nbsp;&nbsp;&nbsp;'''# 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 />&nbsp;&nbsp;&nbsp;'''# 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 />&nbsp;&nbsp;&nbsp;'''# 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 />&nbsp;&nbsp;&nbsp;'''# 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"'''
 +
 
 +
== Установка ПО Zookeeper на RHEL/CentOS 7.x ==
 +
Для инсталляции будет использоваться [http://apache-mirror.rbc.ru/pub/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz zookeeper версии 3.4.10].  
 +
В файл ~/.bash_profile, пользователя из-под которого планируется запуск сервисов, должны быть внесены переменные окружения JAVA/JRUBY:
 +
# .bash_profile
 +
# Get the aliases and functions
 +
if [ -f ~/.bashrc ]; then
 +
      . ~/.bashrc
 +
fi<br />
 +
# User specific environment and startup programs
 +
PATH=/opt/java/bin:$PATH:$HOME/bin:/opt/jruby/bin
 +
JRUBY_HOME=/opt/jruby
 +
PATH=$PATH:$HOME/bin<br />
 +
export PATH
 +
export JRUBY_HOME
 +
 
 +
Все действия выполняются под пользователем root(<span style="color:red">сервер 10.160.20.186</span>, владельцем директорий будет пользователь ''user_dev'', запуск сервиса будет осуществляться из-под пользователя ''user_dev''):  
 +
* '''Переходим в каталог /opt и скачиваем актуальную версию ПО Zookeeper(в нашем случае — 3.4.10) с официального сайта'''
 +
<span style="color:green">'''# cd /opt && wget <nowiki>http://apache-mirror.rbc.ru/pub/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz</nowiki>'''</span>
 
* '''Распаковываем скачанный архив, переименовываем директорию, назначаем владельцем пользователя ''user_dev'' '''
 
* '''Распаковываем скачанный архив, переименовываем директорию, назначаем владельцем пользователя ''user_dev'' '''
 
<span style="color:green">'''# tar xzvf zookeeper-3.4.10.tar.gz && mv zookeeper-3.4.10 zookeeper && chown user_dev. -R /opt/zookeeper'''</span>
 
<span style="color:green">'''# tar xzvf zookeeper-3.4.10.tar.gz && mv zookeeper-3.4.10 zookeeper && chown user_dev. -R /opt/zookeeper'''</span>
 
* '''Настраиваем инстанс ''zookeeper'' на сервере''':  
 
* '''Настраиваем инстанс ''zookeeper'' на сервере''':  
  '''a)''' Добавляем в файл zkEnv.sh строку ". ~/.bash_profile" сразу после строки "#!/usr/bin/env bash" (для упрощения приводится команда [sed]):
+
  '''a)''' Добавляем в файл zkEnv.sh строку ". ~/.bash_profile" сразу после строки "#!/usr/bin/env bash" (для упрощения приводится команда [[sed]]):
  <span style="color:green"># sed -i "s|#!/usr/bin/env bash|#!/usr/bin/env bash \n . ~/.bash_profile|" /opt/zookeeper01/bin/zkEnv.sh</span><br />
+
  <span style="color:green"># sed -i "s|#!/usr/bin/env bash|#!/usr/bin/env bash \n . ~/.bash_profile|" /opt/zookeeper/bin/zkEnv.sh</span><br />
 
  '''b)''' Изменяем параметр ZOO_LOG_DIR в файле zkEnv.sh(для упрощения приводится команда sed):
 
  '''b)''' Изменяем параметр ZOO_LOG_DIR в файле zkEnv.sh(для упрощения приводится команда sed):
  <span style="color:green"># sed -i "s|ZOO_LOG_DIR=\x22\x2E\x22|ZOO_LOG_DIR=\x22/opt/zookeeper01/log\x22|" /opt/zookeeper01/bin/zkEnv.sh</span><br />
+
  <span style="color:green"># sed -i "s|ZOO_LOG_DIR=\x22\x2E\x22|ZOO_LOG_DIR=\x22/opt/zookeeper/log\x22|" /opt/zookeeper/bin/zkEnv.sh</span><br />
  '''c)''' Изменяем параметр ZOO_LOG4J_PROP в файле zkEnv.sh(для упрощения приводится команда sed):
+
  '''c)''' Изменяем параметр ZOO_LOG4J_PROP в файле zkEnv.sh(для упрощения приводится команда [[sed]]):
  <span style="color:green"># sed -i "s|ZOO_LOG4J_PROP=\x22INFO,CONSOLE\x22|ZOO_LOG4J_PROP=\x22INFO,ROLLINGFILE\x22|" /opt/zookeeper01/bin/zkEnv.sh</span><br />
+
  <span style="color:green"># sed -i "s|ZOO_LOG4J_PROP=\x22INFO,CONSOLE\x22|ZOO_LOG4J_PROP=\x22INFO,ROLLINGFILE\x22|" /opt/zookeeper/bin/zkEnv.sh</span><br />
 
  '''d)''' Создаём директории data и log:
 
  '''d)''' Создаём директории data и log:
 
  <span style="color:green">#  mkdir -p /opt/zookeeper/{data,log}</span><br />
 
  <span style="color:green">#  mkdir -p /opt/zookeeper/{data,log}</span><br />
 
  '''e)''' Создаём файл myid в директории data и в него помещаем значение 1:
 
  '''e)''' Создаём файл myid в директории data и в него помещаем значение 1:
  <span style="color:green"># echo '1' > /opt/zookeeper01/data/myid</span><br />
+
  <span style="color:green"># echo '1' > /opt/zookeeper/data/myid</span><br />
  '''f)''' Настраиваем файл /opt/zookeeper/conf/zoo.cfg, далее приведена настройка для сервера 10.160.22.186, который располагается на НК:
+
  '''f)''' Настраиваем файл /opt/zookeeper/conf/zoo.cfg, далее приведена настройка для сервера 10.160.22.186:
 
  <span style="color:green"># echo > /opt/zookeeper/conf/zoo.cfg</span>
 
  <span style="color:green"># echo > /opt/zookeeper/conf/zoo.cfg</span>
 
  <span style="color:green"># cat >>/opt/zookeeper/conf/zoo.cfg <<EOF</span>
 
  <span style="color:green"># cat >>/opt/zookeeper/conf/zoo.cfg <<EOF</span>
Строка 57: Строка 128:
 
  <span style="color:green">[Unit]</span>
 
  <span style="color:green">[Unit]</span>
 
  <span style="color:green">Description=Apache Zookeeper server.</span>
 
  <span style="color:green">Description=Apache Zookeeper server.</span>
  <span style="color:green">Documentation=http://zookeeper.apache.org</span>
+
  <span style="color:green"><nowiki>Documentation=http://zookeeper.apache.org</nowiki></span>
 
  <span style="color:green">Requires=network.target remote-fs.target.</span>
 
  <span style="color:green">Requires=network.target remote-fs.target.</span>
 
  <span style="color:green">After=network.target remote-fs.target</span>
 
  <span style="color:green">After=network.target remote-fs.target</span>
Строка 86: Строка 157:
 
     Loaded: loaded (/etc/systemd/system/ZooKeeper.service; enabled; vendor preset: disabled)
 
     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
 
     Active: active (running) since Пт 2017-07-28 08:44:33 MSK; 1h 2min ago
     Docs: http://zookeeper.apache.org
+
     Docs: <nowiki>http://zookeeper.apache.org</nowiki>
 
   Process: 2275 ExecStart=/opt/zookeeper/bin/zkServer.sh start (code=exited, status=0/SUCCESS)
 
   Process: 2275 ExecStart=/opt/zookeeper/bin/zkServer.sh start (code=exited, status=0/SUCCESS)
 
   Main PID: 2290 (java)
 
   Main PID: 2290 (java)
Строка 99: Строка 170:
 
* '''Перезагружаем сервер, после чего проверяем загрузились ли сервисы ZooKeeper'''
 
* '''Перезагружаем сервер, после чего проверяем загрузились ли сервисы ZooKeeper'''
 
<br />
 
<br />
<span style="color:red">'''P.S.</span><br />
+
 
 +
== <span style="color:red">P.S.</span><br /> ==
 
'''''Для проверки получения ответа с сервера 10.160.22.186 выполним команды на сервере 10.160.22.188(должен быть инсталлирован netcat):'''''<br />
 
'''''Для проверки получения ответа с сервера 10.160.22.186 выполним команды на сервере 10.160.22.188(должен быть инсталлирован netcat):'''''<br />
 
<span style="color:green">'''# echo "ruok" | nc 10.160.22.186 3010  ; echo '''</span><br />
 
<span style="color:green">'''# echo "ruok" | nc 10.160.22.186 3010  ; echo '''</span><br />
 
<span style="color:green">'''# echo "ruok" | nc 10.160.22.186 3020  ; echo '''</span><br />
 
<span style="color:green">'''# echo "ruok" | nc 10.160.22.186 3020  ; echo '''</span><br />
 +
 +
== Ссылки ==
 +
[http://zookeeper.apache.org Apache Zookeeper Home]<br />
 +
[http://apache-mirror.rbc.ru/pub/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz Пакет ПО Zookeeper версии 3.4.10]<br />
 +
[https://habrahabr.ru/post/144708/ ZooKeeper или пишем сервис распределенных блокировок ]<br />
 +
[http://10.160.22.182:9009/scripts/Var_Scripts/blob/master/zk_inst_kbsh_tk2.sh Скрипт первоначальной установки ZooKeeper]<br />
 +
[http://10.160.22.182:9009/scripts/Var_Scripts/tree/master Репозиторий со скриптами автоматизации установки ZooKeeper]

Текущая версия на 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"

Установка ПО 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