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

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

Миграция самоуправляемого 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 из исходного сервиса, создайте таблицу в целевом.
Совет

При выполнении оператора CREATE измените ENGINE на ReplicatedMergeTree без указания каких-либо параметров. 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 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:

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

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

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

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

  1. Определите один сервис ClickHouse Cloud как источник, а другой — как назначение
  2. Добавьте пользователя с доступом только для чтения на исходный сервис
  3. Продублируйте структуру исходной таблицы на целевом сервисе
  4. Временно разрешите доступ по IP к исходному сервису
  5. Скопируйте данные с источника на сервис назначения
  6. Восстановите список доступа по IP на целевом сервисе
  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-файл перед тем, как переключиться на доступ откуда угодно; это позволит импортировать список доступа после завершения миграции данных.

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

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

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

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

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

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

Удалите пользователя exporter, имеющего права только на чтение

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