Всех приветствую! Недавно перед нашей командой DBA предстала задача по перемещению ансамбля ZooKeeper на другие сервера. Проблема оказалась в том, что в просторах интернета нет доступного руководства для ZooKeeper версии 3.6.2 и выше. Нашлось руководство для версии 3.4.5, но таким образом расширить и переместить наш ансамбль мы не решились.

Может появиться вопрос: Почему нельзя просто переместить файлы на другой сервер и запустить ансамбль там? Наш ансамбль хранит данные по слиянию и реплицированию данных кластера Clickhouse.

План работы

У нас имеется ансамбль из 3 инстансов, расположенных на 3 отдельных серверах, и нам предоставили другие 3 сервера для переезда. С целью поддержания кворума мы нашли 1 дополнительный временный сервер. Первым делом мы расширим кластер до 7 инстансов:
3 (id: 1, 2, 3) +1 (id: 4) + 3 (id: 5, 6, 7)

После расширения и синхронизации, выводим из ансамбля ненужные инстансы. Останутся только id: 5, 6, 7.

Расширение существующего ансамбля

В официальной документации описан метод расширения, но мы хотим это наглядно показать.
Наш ансамбль работает на CentOS 7 и состоит из 3 инстансов:

server.1=zk-1:2888:3888
server.2=zk-2:2888:3888
server.3=zk-3:2888:3888	

Если у Вас нет в конфигурационном файле нет

reconfigEnabled=true

то, необходимо перезапустить Ваш ансамбль с данной строкой. Так же в файл $ZK_HOME/bin/zkEnv.sh можете добавить:

Dzookeeper.skipACL=yes
export SERVER_JVMFLAGS="$SERVER_JVMFLAGS -Dzookeeper.skipACL=yes"

данные строки понадобятся при выполнении динамической реконфигурации ансамбля.
После перезапуска ансамбля, мы можем приступать к расширению. Для этого подготовим все необходимое:

  1. Загрузим архив с apache-zookeeper (в нашем случае apache-zookeeper-3.6.2-bin.tar.gz);

  2. Распакуем и создадим пользователя ОС для ZooKeeper;

  3. Создаем директорию для файлов ZooKeeper и файл myid, который будет идентификатором инстанса. У нас уже есть 3 инстанса server.1=zk-1:2888:3888 server.2=zk-2:2888:3888 server.3=zk-3:2888:3888. Для расширения мы планируем добавить еще 4 инстанса. Поэтому myid будут содержать числа 4, 5, 6, 7;

  4. Открываем порты в firewalld;

  5. Создаем service файл.

После подготовки нам понадобится $ZK_HOME/bin/zkCli.sh

reconfig -add server.4=zk-4:2888:3888:participant;2181

Успешность выполнения можно проверить в $ZK_HOME/conf. Появится файл zoo.conf.dynamic.100000000 и соответствующая ссылка на данный файл в zoo.conf:

dynamicConfigFile=/home/zookeeper/apache-zookeeper-3.6.2-bin/conf/zoo.conf.dynamic.100000000

Цифра после zoo.conf.dynamic. будет отличаться. Далее запускаем инстанс ZooKeeper на сервере zk-4. Данный инстанс получит такие же конфигурационные файлы. Можно следить за ходом синхронизации в логах. Такую же операцию выполняем для серверов zk-5, zk-6, zk-7.

Вывод из ансамбля

Для вывода zk-1, zk-2, zk-3, zk-4 из ансамбля, воспользуемся тем же $ZK_HOME/bin/zkCli.sh

reconfig -remove 1
reconfig -remove 2
reconfig -remove 3
reconfig -remove 4

После выполнения, Вы так же увидите как поменяется файл zoo.conf.dynamic.XXXXXXX. Теперь можно выключить сервис ZooKeeper на серверах zk-1, zk-2, zk-3, zk-4. Не забудьте убрать из автозапуска.

Итого

Итого мы с помощью расширения новыми инстансами и выводом старых, переместили ансамбль из серверов zk-1, zk-2, zk-3 на сервера zk-5, zk-6, zk-7.
Дополнительно советую добавить в zoo.conf и открыть 7000 порт

metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider

Таким образом, у Вас будет возможность собирать метрики через Prometheus.

Комментарии (3)


  1. lnuynxa
    18.10.2021 07:50

    Есть хорошее руководство, не раз опробованное на практике, по миграции ZooKeeper который используется для ClickHouse.


    1. Yersin_DBA Автор
      18.10.2021 07:52

      В руководстве миграция для версии 3.4.9 без dynamic reconfiguration. Тут же 3.6.2 и с dynamic reconfiguration


      1. lnuynxa
        18.10.2021 10:49

        Проблема в том, что dynamic reconfiguration не позволяет "прозрачно" передать лидера, так что ее наличие к сожалению не решает нашу главную проблему: незаметно для ClickHouse перенести кластер ZooKeeper. В любом случае будет временная потеря кворума и наша задача сделать так, что бы это минимальным образом отразилось на времени простоя ClickHouse для вставок.

        Так что тот план можно использовать и для миграций старших версий ZooKeeper.