Перейти к основному содержимому
Версия: 2.0.x

Инструмент миграции данных между cluster

Инструмент миграции данных между cluster Selena предоставляется сообществом Selena. С помощью этого инструмента вы можете легко мигрировать данные из исходного cluster в целевой cluster.

примечание
  • Инструмент миграции данных между cluster Selena поддерживает только миграцию данных из cluster shared-nothing в другой cluster shared-nothing или в cluster shared-data.
  • Версия Selena целевого cluster должна быть v1.5.2 или более поздней.

Подготовка

Следующие подготовительные действия должны быть выполнены на целевом cluster для миграции данных.

Открытие портов

Если вы включили брандмауэр, вам необходимо открыть следующие порты:

КомпонентПортПо умолчанию
FEquery_port9030
FEhttp_port8030
FErpc_port9020
BEbe_http_port8040
BEbe_port9060

Включение режима совместимости для репликации

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

  1. Вы можете проверить, включён ли режим совместимости для репликации, с помощью следующей команды:

    ADMIN SHOW FRONTEND CONFIG LIKE 'enable_legacy_compatibility_for_replication';

    Если возвращается true, это означает, что режим совместимости для репликации включён.

  2. Динамическое включение режима совместимости для репликации:

    ADMIN SET FRONTEND CONFIG("enable_legacy_compatibility_for_replication"="true");
  3. Чтобы предотвратить автоматическое отключение режима совместимости во время процесса миграции данных в случае перезапуска cluster, вам также необходимо добавить следующий параметр конфигурации в файл конфигурации FE fe.conf:

    enable_legacy_compatibility_for_replication = true

После завершения миграции данных вам необходимо удалить конфигурацию enable_legacy_compatibility_for_replication = true из файла конфигурации и динамически отключить режим совместимости для репликации с помощью следующей команды:

ADMIN SET FRONTEND CONFIG("enable_legacy_compatibility_for_replication"="false");

Настройка миграции данных (опционально)

Вы можете настроить операции миграции данных с помощью следующих параметров FE и BE. В большинстве случаев конфигурация по умолчанию может удовлетворить ваши потребности. Если вы хотите использовать конфигурацию по умолчанию, вы можете пропустить этот шаг.

примечание

Обратите внимание, что увеличение значений следующих параметров конфигурации может ускорить миграцию, но также увеличит нагрузку на исходный cluster.

Параметры FE

Следующие параметры FE являются динамическими параметрами конфигурации. О том, как их изменить, см. Настройка динамических параметров FE.

ПараметрПо умолчаниюЕдиницаОписание
replication_max_parallel_table_count100-Максимальное количество параллельных задач синхронизации данных. Selena создаёт одну задачу синхронизации для каждой таблицы.
replication_max_parallel_replica_count10240-Максимальное количество tablet replica, разрешённых для параллельной синхронизации.
replication_max_parallel_data_size_mb1048576МБМаксимальный размер данных, разрешённых для параллельной синхронизации.
replication_transaction_timeout_sec86400СекундыПродолжительность таймаута для задач синхронизации.

Параметры BE

Следующий параметр BE является динамическим параметром конфигурации. О том, как его изменить, см. Настройка динамических параметров BE.

ПараметрПо умолчаниюЕдиницаОписание
replication_threads0-Количество потоков для выполнения задач синхронизации. 0 означает установку количества потоков равным 4-кратному количеству ядер CPU на машине, где находится BE.

Шаг 1: Установка инструмента

Рекомендуется устанавливать инструмент миграции на сервере, где находится целевой cluster.

  1. Запустите терминал и загрузите бинарный пакет инструмента.

    wget https://releases.selena.io/selena/selena-cluster-sync.tar.gz
  2. Распакуйте пакет.

    tar -xvzf selena-cluster-sync.tar.gz

Шаг 2: Настройка инструмента

Конфигурация, связанная с миграцией

Перейдите в распакованную папку и измените файл конфигурации conf/sync.properties.

cd selena-cluster-sync
vi conf/sync.properties

Содержимое файла следующее:

# Если true, все таблицы будут синхронизированы только один раз, и программа автоматически завершится после завершения.
one_time_run_mode=false

source_fe_host=
source_fe_query_port=9030
source_cluster_user=root
source_cluster_password=
source_cluster_password_secret_key=
source_cluster_token=

target_fe_host=
target_fe_query_port=9030
target_cluster_user=root
target_cluster_password=
target_cluster_password_secret_key=

jdbc_connect_timeout_ms=30000
jdbc_socket_timeout_ms=60000

# Список имён баз данных или таблиц через запятую, например <db_name> или <db_name.table_name>
# пример: db1,db2.tbl2,db3
# Порядок применения: 1. include 2. exclude
include_data_list=
exclude_data_list=

# Если нет особых требований, оставьте значения по умолчанию для следующих конфигураций.
target_cluster_storage_volume=
target_cluster_replication_num=-1
target_cluster_max_disk_used_percent=80
# Для соответствия исходному cluster используйте null.
target_cluster_enable_persistent_index=

max_replication_data_size_per_job_in_gb=1024

meta_job_interval_seconds=180
meta_job_threads=4
ddl_job_interval_seconds=10
ddl_job_batch_size=10

# конфигурация таблиц
ddl_job_allow_drop_target_only=false
ddl_job_allow_drop_schema_change_table=true
ddl_job_allow_drop_inconsistent_partition=true
ddl_job_allow_drop_inconsistent_time_partition = true
ddl_job_allow_drop_partition_target_only=true
# конфигурация индексов
enable_bitmap_index_sync=false
ddl_job_allow_drop_inconsistent_bitmap_index=true
ddl_job_allow_drop_bitmap_index_target_only=true
# конфигурация MV
enable_materialized_view_sync=false
ddl_job_allow_drop_inconsistent_materialized_view=true
ddl_job_allow_drop_materialized_view_target_only=false
# конфигурация View
enable_view_sync=false
ddl_job_allow_drop_inconsistent_view=true
ddl_job_allow_drop_view_target_only=false

replication_job_interval_seconds=10
replication_job_batch_size=10
report_interval_seconds=300

enable_table_property_sync=false

Описание параметров следующее:

ПараметрОписание
one_time_run_modeВключить ли режим однократной синхронизации. При включении режима однократной синхронизации инструмент миграции выполняет только полную синхронизацию вместо инкрементной синхронизации.
source_fe_hostIP-адрес или FQDN (полное доменное имя) FE исходного cluster.
source_fe_query_portПорт запросов (query_port) FE исходного cluster.
source_cluster_userИмя пользователя для входа в исходный cluster. Этому пользователю должна быть предоставлена привилегия OPERATE на уровне SYSTEM.
source_cluster_passwordПароль пользователя для входа в исходный cluster.
source_cluster_password_secret_keyСекретный ключ для шифрования пароля пользователя для входа в исходный cluster. Значение по умолчанию — пустая строка, что означает, что пароль не зашифрован. Если вы хотите зашифровать source_cluster_password, вы можете получить зашифрованную строку source_cluster_password с помощью SQL-выражения SELECT TO_BASE64(AES_ENCRYPT('<source_cluster_password>','<source_cluster_password_ secret_key>')).
source_cluster_tokenТокен исходного cluster. О том, как получить токен cluster, см. Получение токена cluster ниже.
target_fe_hostIP-адрес или FQDN (полное доменное имя) FE целевого cluster.
target_fe_query_portПорт запросов (query_port) FE целевого cluster.
target_cluster_userИмя пользователя для входа в целевой cluster. Этому пользователю должна быть предоставлена привилегия OPERATE на уровне SYSTEM.
target_cluster_passwordПароль пользователя для входа в целевой cluster.
target_cluster_password_secret_keyСекретный ключ для шифрования пароля пользователя для входа в целевой cluster. Значение по умолчанию — пустая строка, что означает, что пароль не зашифрован. Если вы хотите зашифровать target_cluster_password, вы можете получить зашифрованную строку target_cluster_password с помощью SQL-выражения SELECT TO_BASE64(AES_ENCRYPT('<target_cluster_password>','<target_cluster_password_ secret_key>')).
jdbc_connect_timeout_msТаймаут JDBC-подключения в миллисекундах для запросов FE. По умолчанию: 30000.
jdbc_socket_timeout_msТаймаут JDBC-сокета в миллисекундах для запросов FE. По умолчанию: 60000.
include_data_listБазы данных и таблицы, которые необходимо мигрировать, с несколькими объектами, разделёнными запятыми (,). Например: db1, db2.tbl2, db3. Этот параметр имеет приоритет над exclude_data_list. Если вы хотите мигрировать все базы данных и таблицы в cluster, вам не нужно настраивать этот параметр.
exclude_data_listБазы данных и таблицы, которые не нужно мигрировать, с несколькими объектами, разделёнными запятыми (,). Например: db1, db2.tbl2, db3. include_data_list имеет приоритет над этим параметром. Если вы хотите мигрировать все базы данных и таблицы в cluster, вам не нужно настраивать этот параметр.
target_cluster_storage_volumeStorage volume, используемый для хранения таблиц в целевом cluster, когда целевой cluster является cluster shared-data. Если вы хотите использовать storage volume по умолчанию, вам не нужно указывать этот параметр.
target_cluster_replication_numКоличество replica, указываемое при создании таблиц в целевом cluster. Если вы хотите использовать то же количество replica, что и в исходном cluster, вам не нужно указывать этот параметр.
target_cluster_max_disk_used_percentПорог использования диска в процентах для узлов BE целевого cluster, когда целевой cluster является shared-nothing. Миграция прекращается, когда использование диска любого BE в целевом cluster превышает этот порог. Значение по умолчанию — 80, что означает 80%.
meta_job_interval_secondsИнтервал в секундах, с которым инструмент миграции получает метаданные из исходного и целевого cluster. Вы можете использовать значение по умолчанию для этого параметра.
meta_job_threadsКоличество потоков, используемых инструментом миграции для получения метаданных из исходного и целевого cluster. Вы можете использовать значение по умолчанию для этого параметра.
ddl_job_interval_secondsИнтервал в секундах, с которым инструмент миграции выполняет DDL-операции на целевом cluster. Вы можете использовать значение по умолчанию для этого параметра.
ddl_job_batch_sizeРазмер пакета для выполнения DDL-операций на целевом cluster. Вы можете использовать значение по умолчанию для этого параметра.
ddl_job_allow_drop_target_onlyРазрешить ли инструменту миграции удалять базы данных или таблицы, которые существуют только в целевом cluster, но не в исходном cluster. Значение по умолчанию — false, что означает, что они не будут удалены. Вы можете использовать значение по умолчанию для этого параметра.
ddl_job_allow_drop_schema_change_tableРазрешить ли инструменту миграции удалять таблицы с несогласованными схемами между исходным и целевым cluster. Значение по умолчанию — true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого параметра. Инструмент миграции автоматически синхронизирует удалённые таблицы во время миграции.
ddl_job_allow_drop_inconsistent_partitionРазрешить ли инструменту миграции удалять partition с несогласованным распределением данных между исходным и целевым cluster. Значение по умолчанию — true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого параметра. Инструмент миграции автоматически синхронизирует удалённые partition во время миграции.
ddl_job_allow_drop_partition_target_onlyРазрешить ли инструменту миграции удалять partition, которые были удалены в исходном cluster, чтобы сохранить согласованность partition между исходным и целевым cluster. Значение по умолчанию — true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого параметра.
replication_job_interval_secondsИнтервал в секундах, с которым инструмент миграции запускает задачи синхронизации данных. Вы можете использовать значение по умолчанию для этого параметра.
replication_job_batch_sizeРазмер пакета, с которым инструмент миграции запускает задачи синхронизации данных. Вы можете использовать значение по умолчанию для этого параметра.
max_replication_data_size_per_job_in_gbПороговое значение размера данных, при котором инструмент миграции запускает задачи синхронизации данных. Единица измерения: ГБ. Если размер partition, которую нужно мигрировать, превышает это значение, будет запущено несколько задач синхронизации данных. Значение по умолчанию — 1024. Вы можете использовать значение по умолчанию для этого параметра.
report_interval_secondsВременной интервал, с которым инструмент миграции выводит информацию о прогрессе. Единица измерения: секунды. Значение по умолчанию: 300. Вы можете использовать значение по умолчанию для этого параметра.
target_cluster_enable_persistent_indexВключить ли persistent index в целевом cluster. Если этот параметр не указан, целевой cluster соответствует исходному cluster.
ddl_job_allow_drop_inconsistent_time_partitionРазрешить ли инструменту миграции удалять partition с несогласованным временем между исходным и целевым cluster. Значение по умолчанию — true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого параметра. Инструмент миграции автоматически синхронизирует удалённые partition во время миграции.
enable_bitmap_index_syncВключить ли синхронизацию Bitmap-индексов.
ddl_job_allow_drop_inconsistent_bitmap_indexРазрешить ли инструменту миграции удалять несогласованные Bitmap-индексы между исходным и целевым cluster. Значение по умолчанию — true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого параметра. Инструмент миграции автоматически синхронизирует удалённые индексы во время миграции.
ddl_job_allow_drop_bitmap_index_target_onlyРазрешить ли инструменту миграции удалять Bitmap-индексы, которые были удалены в исходном cluster, чтобы сохранить согласованность индексов между исходным и целевым cluster. Значение по умолчанию — true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого параметра.
enable_materialized_view_syncВключить ли синхронизацию материализованных представлений.
ddl_job_allow_drop_inconsistent_materialized_viewРазрешить ли инструменту миграции удалять несогласованные материализованные представления между исходным и целевым cluster. Значение по умолчанию — true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого параметра. Инструмент миграции автоматически синхронизирует удалённые материализованные представления во время миграции.
ddl_job_allow_drop_materialized_view_target_onlyРазрешить ли инструменту миграции удалять материализованные представления, которые были удалены в исходном cluster, чтобы сохранить согласованность материализованных представлений между исходным и целевым cluster. Значение по умолчанию — true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого параметра.
enable_view_syncВключить ли синхронизацию представлений (view).
ddl_job_allow_drop_inconsistent_viewРазрешить ли инструменту миграции удалять несогласованные представления между исходным и целевым cluster. Значение по умолчанию — true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого параметра. Инструмент миграции автоматически синхронизирует удалённые представления во время миграции.
ddl_job_allow_drop_view_target_onlyРазрешить ли инструменту миграции удалять представления, которые были удалены в исходном cluster, чтобы сохранить согласованность представлений между исходным и целевым cluster. Значение по умолчанию — true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого параметра.
enable_table_property_syncВключить ли синхронизацию свойств таблиц.

Получение токена cluster

Токен cluster доступен в метаданных FE. Войдите на сервер, где находится узел FE, и выполните следующую команду:

cat fe/meta/image/VERSION | grep token

Вывод:

token=wwwwwwww-xxxx-yyyy-zzzz-uuuuuuuuuu

Конфигурация сети (опционально)

Во время миграции данных инструменту миграции необходим доступ ко всем узлам FE как исходного, так и целевого cluster, а целевому cluster необходим доступ ко всем узлам BE и CN исходного cluster.

Вы можете получить сетевые адреса этих узлов, выполнив следующие команды в соответствующем cluster:

-- Получить сетевые адреса узлов FE в cluster.
SHOW FRONTENDS;
-- Получить сетевые адреса узлов BE в cluster.
SHOW BACKENDS;
-- Получить сетевые адреса узлов CN в cluster.
SHOW COMPUTE NODES;

Если эти узлы используют частные адреса, которые недоступны извне cluster, такие как внутренние сетевые адреса внутри cluster Kubernetes, вам необходимо сопоставить эти частные адреса с адресами, которые могут быть доступны извне.

Перейдите в распакованную папку инструмента и измените файл конфигурации conf/hosts.properties.

cd selena-cluster-sync
vi conf/hosts.properties

Содержимое файла по умолчанию следующее, описывающее, как настраивается сопоставление сетевых адресов:

# <SOURCE/TARGET>_<host>=<mappedHost>[;<srcPort>:<dstPort>[,<srcPort>:<dstPort>...]]
примечание

<host> должен соответствовать адресу, показанному в столбце IP, возвращаемом командами SHOW FRONTENDS, SHOW BACKENDS или SHOW COMPUTE NODES.

Следующий пример выполняет эти операции:

  1. Сопоставляет частные сетевые адреса исходного cluster 192.1.1.1 и 192.1.1.2 с 10.1.1.1 и 10.1.1.2.
  2. Сопоставляет порты FE исходного cluster 8030 и 9030 с 38030 и 39030 на 10.1.1.1.
  3. Сопоставляет частный сетевой адрес целевого cluster fe-0.selena.svc.cluster.local с 10.1.2.1 и перенаправляет порт 9030.
# <SOURCE/TARGET>_<host>=<mappedHost>[;<srcPort>:<dstPort>[,<srcPort>:<dstPort>...]]
SOURCE_192.1.1.1=10.1.1.1;8030:38030,9030:39030
SOURCE_192.1.1.2=10.1.1.2
TARGET_fe-0.selena.svc.cluster.local=10.1.2.1;9030:19030

Шаг 3: Запуск инструмента миграции

После настройки инструмента запустите инструмент миграции для начала процесса миграции данных.

./bin/start.sh
примечание
  • Убедитесь, что узлы BE исходного и целевого cluster могут нормально обмениваться данными по сети.
  • Во время работы инструмент миграции регулярно проверяет, отстают ли данные в целевом cluster от исходного cluster. Если есть отставание, он инициирует задачи миграции данных.
  • Если новые данные постоянно загружаются в исходный cluster, синхронизация данных будет продолжаться до тех пор, пока данные в целевом cluster не станут согласованными с данными в исходном cluster.
  • Вы можете запрашивать таблицы в целевом cluster во время миграции, но не загружайте новые данные в таблицы, так как это может привести к несогласованности между данными в целевом cluster и исходном cluster. В настоящее время инструмент миграции не запрещает загрузку данных в целевой cluster во время миграции.
  • Обратите внимание, что миграция данных не завершается автоматически. Вам необходимо вручную проверить и подтвердить завершение миграции, а затем остановить инструмент миграции.

Просмотр прогресса миграции

Просмотр журналов инструмента миграции

Вы можете проверить прогресс миграции через журнал инструмента миграции log/sync.INFO.log.

Пример 1: Просмотр прогресса задачи.

img

Важные метрики следующие:

  • Sync job progress: Прогресс миграции данных. Инструмент миграции регулярно проверяет, отстают ли данные в целевом cluster от исходного cluster. Поэтому прогресс 100% означает только то, что синхронизация данных завершена в текущем интервале проверки. Если новые данные продолжают загружаться в исходный cluster, прогресс может уменьшиться в следующем интервале проверки.
  • total: Общее количество всех типов заданий в этой операции миграции.
  • ddlPending: Количество DDL-заданий, ожидающих выполнения.
  • jobPending: Количество ожидающих заданий синхронизации данных для выполнения.
  • sent: Количество заданий синхронизации данных, отправленных из исходного cluster, но ещё не запущенных. Теоретически это значение не должно быть слишком большим. Если значение продолжает расти, пожалуйста, свяжитесь с нашими инженерами.
  • running: Количество заданий синхронизации данных, которые в данный момент выполняются.
  • finished: Количество завершённых заданий синхронизации данных.
  • failed: Количество неудачных заданий синхронизации данных. Неудачные задания синхронизации данных будут повторно отправлены. Поэтому в большинстве случаев вы можете игнорировать эту метрику. Если это значение значительно велико, пожалуйста, свяжитесь с нашими инженерами.
  • unknown: Количество заданий с неизвестным статусом. Теоретически это значение всегда должно быть 0. Если это значение не 0, пожалуйста, свяжитесь с нашими инженерами.

Пример 2: Просмотр прогресса миграции таблиц.

img

  • Sync table progress: Прогресс миграции таблиц, то есть соотношение таблиц, которые были мигрированы в этой задаче миграции, ко всем таблицам, которые нужно мигрировать.
  • finishedTableRatio: Соотношение таблиц с как минимум одним успешным выполнением задачи синхронизации.
  • expiredTableRatio: Соотношение таблиц с устаревшими данными.
  • total table: Общее количество таблиц, участвующих в этом процессе миграции данных.
  • finished table: Количество таблиц с как минимум одним успешным выполнением задачи синхронизации.
  • unfinished table: Количество таблиц без выполнения задачи синхронизации.
  • expired table: Количество таблиц с устаревшими данными.

Просмотр статуса транзакций миграции

Инструмент миграции открывает транзакцию для каждой таблицы. Вы можете просмотреть статус миграции таблицы, проверив статус соответствующей транзакции.

SHOW PROC "/transactions/<db_name>/running";

<db_name> — это имя базы данных, в которой находится таблица.

Просмотр версий данных partition

Вы можете сравнить версии данных соответствующих partition в исходном и целевом cluster, чтобы просмотреть статус миграции этой partition.

SHOW PARTITIONS FROM <table_name>;

<table_name> — это имя таблицы, которой принадлежит partition.

Просмотр объёма данных

Вы можете сравнить объёмы данных в исходном и целевом cluster, чтобы просмотреть статус миграции.

SHOW DATA;

Просмотр количества строк таблицы

Вы можете сравнить количество строк таблиц в исходном и целевом cluster, чтобы просмотреть статус миграции каждой таблицы.

SELECT
TABLE_NAME,
TABLE_ROWS
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_NAME;

Ограничения

Список объектов, которые в настоящее время поддерживают синхронизацию, следующий (не включённые означают, что синхронизация не поддерживается):

  • Базы данных
  • Внутренние таблицы и их данные
  • Схемы материализованных представлений и их команды создания (Данные в материализованном представлении не будут синхронизированы. И если базовые таблицы материализованного представления не синхронизированы в целевой cluster, фоновая задача обновления материализованного представления сообщит об ошибке.)
  • Логические представления (view)