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

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

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

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

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

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

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

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

Обзор

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

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

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

В этом примере переносится одна таблица с самоуправляемого сервера ClickHouse в ClickHouse 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-доступа сервиса, чтобы ограничить доступ