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

Миграция между самоуправляемым ClickHouse и ClickHouse Cloud

Миграция самоуправляемого ClickHouse

В этом руководстве рассказывается, как выполнить миграцию с самоуправляемого сервера ClickHouse в ClickHouse Cloud, а также как выполнять миграцию между сервисами ClickHouse Cloud. Функция remoteSecure используется в запросах SELECT и INSERT для доступа к удалённым серверам ClickHouse, что делает миграцию таблиц столь же простой, как написание запроса INSERT INTO с вложенным SELECT.

Миграция с самоуправляемого ClickHouse на ClickHouse Cloud

Миграция с самоуправляемого ClickHouse

Независимо от того, сегментирована и/или реплицирована ли ваша исходная таблица, в ClickHouse Cloud вам достаточно создать целевую таблицу (для этой таблицы можно опустить параметр Engine — в качестве движка таблицы автоматически будет выбран SharedMergeTree), и ClickHouse Cloud автоматически позаботится о вертикальном и горизонтальном масштабировании. Вам не нужно заботиться о том, как реплицировать и сегментировать таблицу.

В этом примере самоуправляемый сервер ClickHouse является источником, а сервис ClickHouse Cloud — приёмником.

Обзор

Процесс выглядит так:

  1. Добавьте пользователя с правами только на чтение в исходный сервис
  2. Продублируйте структуру исходной таблицы на целевом сервисе
  3. Перенесите данные с исходного сервиса на целевой или отправьте данные с исходного сервиса, в зависимости от его сетевой доступности
  4. Удалите исходный сервер из списка IP-доступа целевого сервиса (если применимо)
  5. Удалите пользователя с правами только на чтение из исходного сервиса

Миграция таблиц из одной системы в другую:

В этом примере переносится одна таблица с самоуправляемого сервера ClickHouse в ClickHouse Cloud.

Совместимость

Если вы замечаете различия в поведении между вашим самостоятельно развернутым ClickHouse и сервисом ClickHouse Cloud, это может быть связано с настройкой совместимости. В Cloud параметр совместимости задается при создании сервиса и в дальнейшем не изменяется на уровне сервиса, чтобы клиенты получали одинаковое поведение даже по мере обновления сервиса. Если вы хотите изменить совместимость, вы можете запросить это через службу поддержки.

На исходной системе ClickHouse (системе, на которой сейчас находятся данные)

  • Добавьте пользователя с правами только на чтение, который может читать исходную таблицу (db.table в этом примере)
CREATE USER exporter
IDENTIFIED WITH SHA256_PASSWORD BY 'password-here'
SETTINGS readonly = 1;
GRANT SELECT ON db.table TO exporter;
  • Скопируйте определение таблицы
SELECT create_table_query
FROM system.tables
WHERE database = 'db' AND table = 'table'

На целевой системе ClickHouse Cloud:

  • Создайте базу данных назначения:
CREATE DATABASE db
  • Используя оператор CREATE TABLE из исходного сервиса, создайте таблицу в целевом сервисе.
Совет

Измените ENGINE на ReplicatedMergeTree без каких‑либо параметров при выполнении оператора CREATE TABLE. ClickHouse Cloud всегда реплицирует таблицы и задаёт корректные параметры. При этом сохраните клаузы ORDER BY, PRIMARY KEY, PARTITION BY, SAMPLE BY, TTL и SETTINGS.

CREATE TABLE db.table ...
  • Используйте функцию remoteSecure, чтобы получать данные из самоуправляемого источника
Перенос самоуправляемого ClickHouse
INSERT INTO db.table SELECT * FROM
remoteSecure('source-hostname', db, table, 'exporter', 'password-here')
Примечание

Если исходная система недоступна из внешних сетей, вы можете отправлять данные (push), а не забирать их (pull), так как функция remoteSecure работает как для select-запросов, так и для insert-запросов. См. следующий вариант.

  • Используйте функцию remoteSecure, чтобы отправить данные в сервис ClickHouse Cloud
Миграция самоуправляемого ClickHouse
Добавьте удалённую систему в IP Access List вашего сервиса ClickHouse Cloud

Чтобы функция remoteSecure смогла подключиться к вашему сервису ClickHouse Cloud, IP-адрес удалённой системы должен быть разрешён в списке доступа по IP (IP Access List). Разверните раздел Manage your IP Access List ниже этой подсказки для получения дополнительной информации.

Управление списком доступа по IP (IP Access List)

В списке сервисов ClickHouse Cloud выберите сервис, с которым вы будете работать, и перейдите в Settings. Если в IP Access List отсутствует IP-адрес или диапазон адресов удалённой системы, которой нужно подключиться к вашему сервису ClickHouse Cloud, вы можете решить эту проблему с помощью Add IPs:

Проверьте, разрешает ли сервис трафик с вашего IP-адреса в IP Access List

Добавьте отдельный IP-адрес или диапазон адресов, которым нужно подключаться к вашему сервису ClickHouse Cloud. При необходимости измените форму и затем нажмите Save.

Добавьте ваш текущий IP-адрес в IP Access List в ClickHouse Cloud
INSERT INTO FUNCTION
remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table',
'default', 'PASS') SELECT * FROM db.table

Миграция между сервисами ClickHouse Cloud

Миграция самоуправляемого ClickHouse

Некоторые примеры сценариев миграции данных между сервисами ClickHouse Cloud:

  • Миграция данных из восстановленной резервной копии
  • Копирование данных с сервиса разработки на staging-сервис (или со staging в production)

В этом примере используются два сервиса ClickHouse Cloud, и далее они будут называться источник и назначение. Данные будут считываться с источника и загружаться в сервис назначения. Хотя при желании можно реализовать и push-сценарий, здесь показан вариант с pull, так как он использует пользователя только для чтения.

Миграция самоуправляемого ClickHouse

Миграция включает несколько шагов:

  1. Определите один сервис ClickHouse Cloud как источник, а другой как назначение
  2. Добавьте пользователя только для чтения на сервисе-источнике
  3. Продублируйте структуру таблицы источника на сервисе-назначении
  4. Временно разрешите IP-доступ к сервису-источнику
  5. Скопируйте данные с источника на назначение
  6. Повторно включите список доступа по IP (IP Access List) на сервисе-назначении
  7. Удалите пользователя только для чтения с сервиса-источника

Добавьте пользователя только для чтения в исходном сервисе

  • Добавьте пользователя с правами только на чтение, который может читать исходную таблицу (db.table в этом примере)

    CREATE USER exporter
    IDENTIFIED WITH SHA256_PASSWORD BY 'password-here'
    SETTINGS readonly = 1;
    
    GRANT SELECT ON db.table TO exporter;
    
  • Скопируйте определение таблицы

    select create_table_query
    from system.tables
    where database = 'db' and table = 'table'
    

Продублируйте структуру таблицы на целевом сервисе

На целевом сервисе создайте базу данных, если она ещё не существует:

  • Создайте целевую базу данных:

    CREATE DATABASE db
    
  • Используя оператор CREATE TABLE с исходного сервиса, создайте целевую таблицу.

    На целевом сервисе создайте таблицу, используя результат запроса select create_table_query... на исходном сервисе:

    CREATE TABLE db.table ...
    

Разрешите удалённый доступ к исходному сервису

Чтобы передавать данные из исходного сервиса в целевой, исходный сервис должен разрешать подключения. Временно отключите функциональность «IP Access List» на исходном сервисе.

Совет

Если вы планируете и дальше использовать исходный сервис ClickHouse Cloud, экспортируйте текущий IP Access List в файл JSON перед переключением на режим доступа из любого места; это позволит импортировать список доступа после завершения миграции данных.

Измените IP Access List и временно разрешите доступ из Anywhere. Подробности см. в документации по IP Access List.

Скопируйте данные из источника в целевой сервис

  • Используйте функцию remoteSecure, чтобы получить данные из исходного сервиса ClickHouse Cloud. Подключитесь к целевому сервису и выполните в нём следующую команду:

    INSERT INTO db.table SELECT * FROM
    remoteSecure('source-hostname', db, table, 'exporter', 'password-here')
    
  • Проверьте данные в целевом сервисе

Повторно настройте список доступа по IP на исходном кластере

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

Удалить пользователя exporter с доступом только на чтение

DROP USER exporter
  • Переключите список IP-доступа сервиса, чтобы ограничить доступ