mxshift

1 Описание

Инструмент mxshift в настоящее время поддерживает следующие функции:

  • Полная миграция: параллельный перенос данных из кластера Greenplum 5 / Greenplum 6 / MatrixDB в новый кластер MatrixDB на уровне базы данных.
  • Обратная миграция: перенос данных из MatrixDB обратно в Greenplum 5 / Greenplum 6.
  • Инкрементальная миграция: выполнение инкрементальной миграции данных с использованием условий WHERE.
  • Миграция реплицированных таблиц: поддержка миграции реплицированных таблиц.

2 Использование

В данном разделе описывается, как написать файл конфигурации config.json, необходимый для запуска инструмента mxshift, включая параметры и опции командной строки.

2.1 Написание файла конфигурации

Для использования mxshift необходимо сначала подготовить JSON-файл конфигурации с именем config.json. Пример приведён ниже:

{
    "mode":            "normal",
    "verify":          true,
    "bothway":         true,
    "concurrency":     5,
    "compress_method": "lz4",
    "log_level":       "info",
    "gphome":          "/usr/local/greenplum-db-6.7.1",
    "src_host":        "sdw3",
    "src_db":          "testdb",
    "src_user":        "gpadmin",
    "src_password":    "xxxx",
    "src_port":        54322,
    "target_host":     "172.16.100.32",
    "target_db":       "destdb",
    "target_user":     "mxadmin",
    "target_password": "yyyy",
    "target_port":     5432,
    "where": {
        "enabled":  false,
        "global":   "txdate >= '2022-10-01' AND batchnum >= 100000000",
        "override": [
            {
                "schema": "test_schema_1",
                "name":   "table_001",
                "where":  "abc > 10"
            },
            {
                "schema": "test_schema_2",
                "name":   "another_table",
                "where":  "tag != 'aabbcc' AND ts > '2022-01-01'"
            }
        ]
    },
    "schema_list": [
        "test_schema_1",
        "test_schema_2"
    ],
    "exclude_schema_list": [
         "test_schema_5",
         "test_schema_8"
    ],
    "table_list": [
        {
            "schema": "test_schema_1",
            "name":   "table_001"
        },
        {
            "schema": "test_schema_2",
            "name":   "table_002"
        }
    ],
    "exclude_table_list":[
        {
            "schema": "test_schema_3",
            "name":   "table_003"
        }
    ]
}

Ниже приведено подробное описание каждого параметра в файле конфигурации:

Параметр Описание
mode Режим работы. Допустимые значения: normal, dryrun, fetch, motion.
normal: значение по умолчанию; выполняет обычную миграцию данных.
dryrun: проверяет подключение к обеим базам данных и производит проверку простыми DDL-операциями, но не читает и не записывает данные.
fetch: на основе dryrun считывает данные из источника и отправляет их на целевые сегменты, но отбрасывает без обработки. Используется для тестирования производительности чтения из источника и скорости передачи по сети.
motion: расширяет fetch, выполняя разбор данных на стороне цели и их перераспределение по соответствующим целевым сегментам. Используется для тестирования скорости перераспределения данных на стороне цели.
verify По умолчанию false. Если включено, проверяет совпадение количества строк до и после миграции.
bothway По умолчанию mxshift мигрирует сначала самые большие таблицы, чтобы завершить полную миграцию как можно быстрее. При установке значения true mxshift одновременно обрабатывает как самые большие, так и самые маленькие таблицы с обоих концов.
concurrency Максимальное количество таблиц, мигрируемых параллельно. По умолчанию — 5; максимально допустимое значение — 10.
compress_method Метод сжатия: gzip, zstd, lz4 или 0 (без сжатия). По умолчанию — 0. При включении любого сжатия пользователь mxadmin на каждом целевом сегменте должен иметь возможность подключения по SSH без пароля к каждому исходному сегменту. Рекомендуется протестировать эту настройку с помощью dryrun.
deduplicate (Экспериментально) Если предыдущая миграция mxshift была прервана, включение этой опции позволяет mxshift возобновить процесс и завершить миграцию только оставшихся таблиц, пропуская уже успешно перенесённые. Эта функция является экспериментальной.
log_level Уровень логирования. По умолчанию установлено значение info, которое выводит сообщения о ходе выполнения, ошибках и предупреждениях. Для более детального лога, полезного при разработке и диагностике, установите значение debug.
gphome Абсолютный путь к каталогу GPHOME на исходной базе данных.
src_host Имя хоста или IP-адрес Master-узла исходного кластера GP.
src_db Исходная база данных GP, из которой будут переноситься данные.
src_user Имя пользователя для подключения к исходной базе данных GP.
src_password Пароль пользователя исходной базы данных GP.
src_port Порт исходной базы данных GP.
target_host Имя хоста или IP-адрес Master-узла целевого кластера MatrixDB.
target_db Целевая база данных MatrixDB, в которую будут переноситься данные.
target_user Имя пользователя для подключения к целевой базе данных MatrixDB.
target_password Пароль пользователя целевой базы данных MatrixDB.
target_port Порт целевой базы данных MatrixDB.
table_list Список таблиц GP-источника для миграции. Для секционированных таблиц укажите родительскую секционированную таблицу. Чтобы перенести всю базу данных, оставьте это поле пустым и вместо него настройте schema_list. В этом случае mxshift автоматически выполнит миграцию всех непустых таблиц в порядке убывания размера.
exclude_table_list Список имён схем и таблиц, которые следует исключить из миграции.
schema_list Список схем в исходной базе данных GP, которые нужно включить. Порядок приоритета: если указан table_list, мигрируются только эти таблицы; в противном случае, если задан schema_list, мигрируются все таблицы в указанных схемах; если ни один из них не задан, рассматриваются все таблицы в базе данных.
exclude_schema_list Список схем, которые следует исключить из миграции. Таблицы в этих схемах не будут перенесены. Если схема присутствует одновременно в schema_list и exclude_schema_list, она будет исключена.
no-color Отключает цветной вывод в логах.

Если вы хотите выполнить инкрементальную миграцию с использованием условий WHERE, используйте следующие дополнительные параметры:

Параметр Описание
enabled По умолчанию отключено. Установите значение true, чтобы включить фильтрацию по условию WHERE.
global SQL-выражение WHERE, применяемое ко всем таблицам миграции. Если таблица не содержит столбцы, указанные в условии WHERE, фильтр для этой таблицы пропускается, и mxshift помечает её как SKIPPED.
override Массив объектов, каждый из которых содержит schema, name и пользовательское условие where. Эти условия переопределяют глобальное условие WHERE для конкретных таблиц.

2.2 Опции командной строки

Опции командной строки mxshift следующие:

Опция Описание
-c или --config_path Путь к файлу конфигурации mxshift (например, config.json).
-n или --no-color Отключает цветной вывод в логах.
-v или --version Отображает версию инструмента mxshift.

3 Примеры

3.1 Полная миграция

Пример файла конфигурации config.json для полной миграции:

{
    "mode": "normal",
    "verify": false,
    "bothway": true,
    "concurrency": 5,
    "compress_method": "",
    "log_level": "info",
    "gphome": "/usr/local/greenplum-db-6.7.1",
    "src_host": "sdw3",
    "src_db": "testdb",
    "src_user": "gpadmin",
    "src_password": "greenplum@2020",
    "src_port": 54322,
    "target_host": "172.16.100.32",
    "target_db": "ms",
    "target_user": "mxadmin",
    "target_password": "xxxx",
    "target_port": 5432,
    "schema_list":["test_schema_1", "test_schema_2"],
    "exclude_schema_list":["test_schema_5", "test_schema_8"],
    "table_list":[
        {
           "schema":"test_schema_1",
           "name":"table_001"
        },
        {
           "schema":"test_schema_2",
           "name":"table_002"
        }
    ],
    "exclude_table_list":[
        {
            "name":"test_schema_3",
            "schema":"table_003"
        }
    ]
}

После подготовки JSON-файла выполните следующую команду для запуска полной миграции:

mxshift -c config_path.json

3.2 Инкрементальная миграция

Используйте условия WHERE для выполнения инкрементальной миграции:

{
    "mode": "normal",
    "verify": false,
    "bothway": true,
    "concurrency": 5,
    "compress_method": "",
    "log_level": "info",
    "gphome": "/usr/local/greenplum-db-6.7.1",
    "src_host": "sdw3",
    "src_db": "testdb",
    "src_user": "gpadmin",
    "src_password": "greenplum@2020",
    "src_port": 54322,
    "target_host": "172.16.100.32",
    "target_db": "ms",
    "target_user": "mxadmin",
    "target_password": "xxxx",
    "target_port": 5432,
    "where": {
        "enabled": true,
        "global": "txdate >= '2022-10-01' AND batchnum >= 100000000",
        "override": [
            {
                "schema":"test_schema_1",
                "name":"table_001",
                "where": "abc > 10"
            }
        ]
    },
    "schema_list":["test_schema_1", "test_schema_2"],
    "exclude_schema_list":["test_schema_5", "test_schema_8"],
    "table_list":[
        ...
    ],
    "exclude_table_list":[
        ...
    ]
}

После подготовки JSON-файла выполните следующую команду для запуска инкрементальной миграции:

mxshift -c config_path.json

Примечание: Убедитесь, что "enabled" установлено в true, чтобы активировать фильтр WHERE.

3.3 Миграция реплицированных таблиц

  • При миграции всей базы данных или всех таблиц в схеме дополнительная конфигурация не требуется. mxshift автоматически определяет реплицированные таблицы и применяет соответствующую логику миграции, чтобы избежать дублирования данных.
  • Если конкретная таблица в table_list является реплицированной, вы должны явно объявить это, добавив поле policyType со значением "r".

Пример фрагмента конфигурации:

"table_list":[
    {
        "schema":"public",
        "name":"tbl_test_replica",
        "policyType":"r"
    }
],

После подготовки JSON-файла выполните следующую команду для запуска миграции реплицированных таблиц:

mxshift -c config_path.json

Внимание!
Полный обзор стратегий и процедур миграции данных см. в разделе Миграция данных.