Перейти к основному содержимому

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

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

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

Подготовка

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

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

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

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

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

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

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

    ADMIN SHOW FRONTEND CONFIG LIKE 'enable_legacy_compatibility_for_replication';

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

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

    ADMIN SET FRONTEND CONFIG("enable_legacy_compatibility_for_replication"="true");
  3. Чтобы предотвратить автоматическое отключение совместимости с устаревшими версиями для репликации во время процесса миграции данных в случае перезапуска кластера, также необходимо добавить следующий параметр конфигурации в файл конфигурации 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");

Отключение Compaction

Если целевой кластер для миграции данных является shared-data кластером, необходимо вручную отключить Compaction перед началом миграции данных и повторно включить его после завершения миграции.

подсказка

Вы можете пропустить этот шаг, если используете Selena v3.3.10 или более позднюю версию.

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

    ADMIN SHOW FRONTEND CONFIG LIKE 'lake_compaction_max_tasks';

    Если возвращается 0, это означает, что Compaction отключен.

  2. Динамически отключить Compaction:

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

    lake_compaction_max_tasks = 0

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

ADMIN SET FRONTEND CONFIG("lake_compaction_max_tasks"="-1");

Отключение фильтрации столбцов

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

подсказка

Вы можете пропустить этот шаг, если используете Selena v3.3.10, v3.2.15, v3.1.17 или более позднюю версию.

SET GLOBAL enable_filter_unused_columns_in_scan_stage=false;

enable_filter_unused_columns_in_scan_stage

  • Описание: Фильтровать ли неиспользуемые столбцы на этапе сканирования.
  • По умолчанию: true
  • Введен в: v3.1

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

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

примечание

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

Параметры FE

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

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

Параметры BE

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

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

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

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

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

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

    tar -xvzf starrocks-cluster-sync.tar.gz

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

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

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

cd starrocks-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=

# Список имен баз данных или таблиц, разделенных запятыми, например <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
# Для поддержания согласованности с исходным кластером используйте 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
# конфигурация представления
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 исходного кластера.
source_fe_query_portПорт запросов (query_port) FE исходного кластера.
source_cluster_userИмя пользователя для входа в исходный кластер. Этому пользователю должна быть предоставлена привилегия OPERATE на уровне SYSTEM.
source_cluster_passwordПароль пользователя для входа в исходный кластер.
source_cluster_password_secret_keyСекретный ключ для шифрования пароля пользователя для входа в исходный кластер. Значение по умолчанию - пустая строка, что означает, что пароль для входа не зашифрован. Если вы хотите зашифровать source_cluster_password, вы можете получить зашифрованную строку source_cluster_password, используя SQL-запрос SELECT TO_BASE64(AES_ENCRYPT('<source_cluster_password>','<source_cluster_password_ secret_key>')).
source_cluster_tokenТокен исходного кластера. Информацию о том, как получить токен кластера, см. в разделе Получение токена кластера ниже.
target_fe_hostIP-адрес или FQDN (полное доменное имя) FE целевого кластера.
target_fe_query_portПорт запросов (query_port) FE целевого кластера.
target_cluster_userИмя пользователя для входа в целевой кластер. Этому пользователю должна быть предоставлена привилегия OPERATE на уровне SYSTEM.
target_cluster_passwordПароль пользователя для входа в целевой кластер.
target_cluster_password_secret_keyСекретный ключ для шифрования пароля пользователя для входа в целевой кластер. Значение по умолчанию - пустая строка, что означает, что пароль для входа не зашифрован. Если вы хотите зашифровать target_cluster_password, вы можете получить зашифрованную строку target_cluster_password, используя SQL-запрос SELECT TO_BASE64(AES_ENCRYPT('<target_cluster_password>','<target_cluster_password_ secret_key>')).
include_data_listБазы данных и таблицы, которые необходимо мигрировать, с несколькими объектами, разделенными запятыми (,). Например: db1, db2.tbl2, db3. Этот элемент имеет приоритет над exclude_data_list. Если вы хотите мигрировать все базы данных и таблицы в кластере, вам не нужно настраивать этот элемент.
exclude_data_listБазы данных и таблицы, которые не нужно мигрировать, с несколькими объектами, разделенными запятыми (,). Например: db1, db2.tbl2, db3. include_data_list имеет приоритет над этим элементом. Если вы хотите мигрировать все базы данных и таблицы в кластере, вам не нужно настраивать этот элемент.
target_cluster_storage_volumeТом хранения, используемый для хранения таблиц в целевом кластере, когда целевой кластер является shared-data кластером. Если вы хотите использовать том хранения по умолчанию, вам не нужно указывать этот элемент.
target_cluster_replication_numКоличество реплик, указанное при создании таблиц в целевом кластере. Если вы хотите использовать то же количество реплик, что и в исходном кластере, вам не нужно указывать этот элемент.
target_cluster_max_disk_used_percentПороговое значение процента использования диска для узлов BE целевого кластера, когда целевой кластер является shared-nothing. Миграция прекращается, когда использование диска любого BE в целевом кластере превышает этот порог. Значение по умолчанию - 80, что означает 80%.
meta_job_interval_secondsИнтервал в секундах, с которым инструмент миграции получает метаданные из исходного и целевого кластеров. Вы можете использовать значение по умолчанию для этого элемента.
meta_job_threadsКоличество потоков, используемых инструментом миграции для получения метаданных из исходного и целевого кластеров. Вы можете использовать значение по умолчанию для этого элемента.
ddl_job_interval_secondsИнтервал в секундах, с которым инструмент миграции выполняет DDL-запросы на целевом кластере. Вы можете использовать значение по умолчанию для этого элемента.
ddl_job_batch_sizeРазмер пакета для выполнения DDL-запросов на целевом кластере. Вы можете использовать значение по умолчанию для этого элемента.
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_partition_target_onlyРазрешить ли инструменту миграции удалять разделы, которые удалены в исходном кластере, чтобы поддерживать согласованность разделов между исходным и целевым кластерами. По умолчанию true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого элемента.
replication_job_interval_secondsИнтервал в секундах, с которым инструмент миграции запускает задачи синхронизации данных. Вы можете использовать значение по умолчанию для этого элемента.
replication_job_batch_sizeРазмер пакета, с которым инструмент миграции запускает задачи синхронизации данных. Вы можете использовать значение по умолчанию для этого элемента.
max_replication_data_size_per_job_in_gbПороговое значение размера данных, при котором инструмент миграции запускает задачи синхронизации данных. Единица: ГБ. Несколько задач синхронизации данных будут запущены, если размер раздела для миграции превышает это значение. Значение по умолчанию - 1024. Вы можете использовать значение по умолчанию для этого элемента.
report_interval_secondsВременной интервал, с которым инструмент миграции выводит информацию о прогрессе. Единица: секунды. Значение по умолчанию: 300. Вы можете использовать значение по умолчанию для этого элемента.
target_cluster_enable_persistent_indexВключить ли постоянный индекс в целевом кластере. Если этот элемент не указан, целевой кластер согласован с исходным кластером.
ddl_job_allow_drop_inconsistent_time_partitionРазрешить ли инструменту миграции удалять разделы с несогласованным временем между исходным и целевым кластерами. По умолчанию true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого элемента. Инструмент миграции автоматически синхронизирует удаленные разделы во время миграции.
enable_bitmap_index_syncВключить ли синхронизацию для Bitmap индексов.
ddl_job_allow_drop_inconsistent_bitmap_indexРазрешить ли инструменту миграции удалять несогласованные Bitmap индексы между исходным и целевым кластерами. По умолчанию true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого элемента. Инструмент миграции автоматически синхронизирует удаленные индексы во время миграции.
ddl_job_allow_drop_bitmap_index_target_onlyРазрешить ли инструменту миграции удалять Bitmap индексы, которые удалены в исходном кластере, чтобы поддерживать согласованность индексов между исходным и целевым кластерами. По умолчанию true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого элемента.
enable_materialized_view_syncВключить ли синхронизацию для материализованных представлений.
ddl_job_allow_drop_inconsistent_materialized_viewРазрешить ли инструменту миграции удалять несогласованные материализованные представления между исходным и целевым кластерами. По умолчанию true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого элемента. Инструмент миграции автоматически синхронизирует удаленные материализованные представления во время миграции.
ddl_job_allow_drop_materialized_view_target_onlyРазрешить ли инструменту миграции удалять материализованные представления, которые удалены в исходном кластере, чтобы поддерживать согласованность материализованных представлений между исходным и целевым кластерами. По умолчанию true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого элемента.
enable_view_syncВключить ли синхронизацию для представлений.
ddl_job_allow_drop_inconsistent_viewРазрешить ли инструменту миграции удалять несогласованные представления между исходным и целевым кластерами. По умолчанию true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого элемента. Инструмент миграции автоматически синхронизирует удаленные представления во время миграции.
ddl_job_allow_drop_view_target_onlyРазрешить ли инструменту миграции удалять представления, которые удалены в исходном кластере, чтобы поддерживать согласованность представлений между исходным и целевым кластерами. По умолчанию true, что означает, что они будут удалены. Вы можете использовать значение по умолчанию для этого элемента.
enable_table_property_syncВключить ли синхронизацию для свойств таблиц.

Получение токена кластера

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

cat fe/meta/image/VERSION | grep token

Вывод:

token=wwwwwwww-xxxx-yyyy-zzzz-uuuuuuuuuu

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

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

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

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

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

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

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

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

# <SOURCE/TARGET>_<domain>=<IP>

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

  1. Сопоставляет частные сетевые адреса исходного кластера 192.1.1.1 и 192.1.1.2 с 10.1.1.1 и 10.1.1.2.
  2. Сопоставляет частный сетевой адрес целевого кластера fe-0.starrocks.svc.cluster.local с 10.1.2.1.
# <SOURCE/TARGET>_<domain>=<IP>
SOURCE_192.1.1.1=10.1.1.1
SOURCE_192.1.1.2=10.1.1.2
TARGET_fe-0.starrocks.svc.cluster.local=10.1.2.1

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

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

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

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

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

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

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

img

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

  • Sync job progress: Прогресс миграции данных. Инструмент миграции регулярно проверяет, отстают ли данные в целевом кластере от исходного кластера. Поэтому прогресс 100% означает только то, что синхронизация данных завершена в текущем интервале проверки. Если новые данные продолжают загружаться в исходный кластер, прогресс может уменьшиться в следующем интервале проверки.
  • total: Общее количество всех типов заданий в этой операции миграции.
  • ddlPending: Количество DDL заданий, ожидающих выполнения.
  • jobPending: Количество ожидающих выполнения заданий синхронизации данных.
  • sent: Количество заданий синхронизации данных, отправленных из исходного кластера, но еще не запущенных. Теоретически это значение не должно быть слишком большим. Если значение продолжает увеличиваться, обратитесь к нашим инженерам.
  • 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> - это имя базы данных, где находится таблица.

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

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

SHOW PARTITIONS FROM <table_name>;

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

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

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

SHOW DATA;

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

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

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

Ограничения

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

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