Команда ZK2PG для переноса системных данных из ZooKeeper в PostgreSQL
Содержание раздела
Команда ZK2PG
предназначена для переноса системных данных (сервисной БД) из ZooKeeper в Postgres-совместимые СУБД при обновлении кластера Prostore с версии 6.* на версию 7.*.
В команде должны быть перечислены все логические базы данных, для которых нужно перенести системные данные. Перенос данных по частям с несколькими запусками команды не поддерживается.
На время переноса системных данных должны быть доступны оба кластера: старый кластер версии 6.* (источник) и новый кластер версии 7.* (приемник).
Использование команды
- Запустите все ноды кластера-приемника и дождитесь их полного запуска. Система создаст системные схемы и таблицы в тех СУБД, которые выделены для размещения сервисных БД (см. секцию конфигурации
raft.servicedb
). - Выключите все ноды кластера-приемника и дождитесь их полной остановки.
- В каждой мигрируемой логической БД кластера-источника:
- Дождитесь завершения всех активных операций записи и операций по изменению схемы.
- Выполните GET_WRITE_OPERATIONS и убедитесь, что в ответе возвращается пустой список.
- Выполните GET_CHANGES и убедитесь, что в ответе все операции имеют заполненное поле
end_time
. - Если дельта открыта, закройте ее.
- Создайте пустую дельту, выполнив последовательно команды BEGIN DELTA и COMMIT DELTA.
- Выключите все ноды кластера-источника.
- Запустите команду
ZK2PG
с указанием необходимых параметров. - Если команда вернула успешный ответ, запустите все ноды кластера-приемника.
- Если команда вернула неуспешный ответ:
- Удалите из СУБД кластера-приемника все системные схемы, созданные командой
ZK2PG
, выполнив для каждойDROP SCHEMA <имя_схемы>
. - Повторите все шаги, начиная с первого.
- Удалите из СУБД кластера-приемника все системные схемы, созданные командой
Синтаксис
java -jar <dtm_tools_file_name>.jar zk2pg \
--zk <zk_host:zk_port/chroot/env> \
--datamarts <logical_db_name[ ...]> \
--pg <pg_host1:pg_port1/db_name1>[?user=<username1>&password=<password1>] --schema <sys_schema_name1> \
[--pg <pg_host2:pg_port2/db_name2>[?user=<username2>&password=<password2>] --schema <sys_schema_name2>] \
[--pg <pg_host3:pg_port3/db_name3>[?user=<username3>&password=<password3>] --schema <sys_schema_name3>] \
[ ... ]
Параметры
dtm_tools_file_name
-
Имя jar-файла утилиты DTM Tools.
Ключевые слова
--zk
Задает строку подключения к сервисной БД в кластере-источнике.
Строка подключения состоит из параметров, перечисленных в таблице ниже. Для каждого параметра указан соответствующий параметр конфигурации в кластере-источнике; их значения должны быть равны.
Параметр | Описание | Соответствующий параметр конфигурации ноды |
---|---|---|
zk_host | Сетевой адрес хоста с ZooKeeper, откуда нужно перенести сервисную БД | ZOOKEEPER_DS_ADDRESS |
zk_port | Номер порта на хосте zk_host | – |
chroot | Корневой путь к сервисной БД | ZOOKEEPER_DS_CHROOT |
env | Имя окружения | DTM_NAME |
--datamarts
Задает имена логических БД, для которых переносятся системные данные. Имена перечисляются через пробел.
--pg
Задает строку подключения к сервисной БД ноды в кластере-приемнике.
Строка подключения состоит из параметров, перечисленных в таблице ниже. Для каждого параметра указан соответствующий параметр конфигурации в кластере-приемнике; их значения должны быть равны.
Параметр | Описание | Соответствующий параметр конфигурации ноды |
---|---|---|
pg_host | Сетевой адрес хоста с СУБД, где будет размещаться сервисная БД ноды | RAFT_SERVICEDB_HOST |
pg_port | Номер порта на хосте pg_host | RAFT_SERVICEDB_PORT |
db_name | Имя базы данных, в которой будет размещаться схема <sys_schema_name> | RAFT_SERVICEDB_DATABASE |
username | Имя пользователя для авторизации в СУБД | RAFT_SERVICEDB_USER |
password | Пароль для авторизации в СУБД | RAFT_SERVICEDB_PASS |
Количество ключевых слов --pg
в команде должно соответствовать количеству нод в кластере-приемнике. Если требуется разместить все сервисные БД в одной СУБД, укажите для каждой ключевое слово --pg
с одинаковым значением.
Подробнее о вариантах развертывания сервисных БД см. в разделе Схемы развертывания.
--schema
Задает имя схемы СУБД, где будет размещаться сервисная БД ноды.
Количество ключевых слов --schema
в команде должно соответствовать количеству нод в кластере-приемнике. Значение ключевого слова, указываемое для ноды, должно быть равно значению ее параметра конфигурации RAFT_SERVICEDB_SCHEMA
.
Ограничения
- На момент запуска команды мигрируемые логические БД источника должны находиться в следующем состоянии:
- все операции записи и операции по изменению схемы завершены;
- все операции записи замыкает закрытая дельта, и после нее нет открытой дельты.
- На момент запуска команды в кластере-приемнике должны отсутствовать логические БД.
- Команда не переносит:
- статистику,
- информацию об отключенных датасорсах,
- информация об удаленных операциях по изменению схемы,
- журналы tslog таблиц, удаленных на логическом уровне.
Примеры
Перенос данных в три отдельные СУБД
Без указания учетной записи и пароля СУБД:
java -jar dtm-tools-1.20.jar zk2pg --zk 10.92.100.01:2181/adtm/dtm --datamarts marketing marketing_new moscow --pg 10.92.145.1:5432/dtm --schema sys1 --pg 10.92.145.2:5432/dtm --schema sys2 --pg 10.92.145.3:5432/dtm --schema sys3
С указанием учетной записи и пароля СУБД:
java -jar dtm-tools-1.20.jar zk2pg --zk 10.92.100.01:2181/adtm/dtm --datamarts marketing marketing_new moscow --pg 10.92.145.1:5432/dtm?user=prostore&password=prostore_pass --schema sys1 --pg 10.92.145.2:5432/dtm?user=prostore&password=prostore_pass --schema sys2 --pg 10.92.145.3:5432/dtm?user=prostore&password=prostore_pass --schema sys3
Перенос данных в три схемы одной СУБД
java -jar dtm-tools-1.20.jar zk2pg --zk 10.92.100.01:2181/adtm/dtm --datamarts marketing marketing_new moscow --pg 10.92.145.1:5432/dtm --schema sys1 --pg 10.92.145.1:5432/dtm --schema sys2 --pg 10.92.145.1:5432/dtm --schema sys3
Перенос данных в одну схему одной СУБД
java -jar dtm-tools-1.20.jar zk2pg --zk 10.92.100.01:2181/adtm/dtm --datamarts marketing marketing_new moscow --pg 10.92.145.1:5432/dtm --schema sys1
Варианты вывода команды
При успешном выполнении команды выводится текст Transfer from zookeeper to pg successfully finished
, при неуспешном — текст ошибки.