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

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

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

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

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

Migrating Self-managed ClickHouse
Примечание

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

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

Обзор

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

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

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

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

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

  • Добавьте пользователя с правами только на чтение, который может читать исходную таблицу (db.table в этом примере)
CREATE USER exporter
IDENTIFIED WITH SHA256_PASSWORD BY 'здесь-ваш-пароль'
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. 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-доступа вашего сервиса ClickHouse Cloud

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

Управление списком доступа по 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:

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

В этом примере используются два сервиса ClickHouse Cloud, которые далее называются source и destination. Данные будут копироваться из source в destination. Хотя вы при желании можете и «толкать» данные (push), здесь показан вариант с выборкой (pull), так как он использует пользователя только для чтения.

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

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

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

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

  • Добавьте пользователя только для чтения, который может читать таблицу source (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'
    

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

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

  • Создайте базу данных destination:

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

    В сервисе destination создайте таблицу, используя вывод select create_table_query... из source:

    CREATE TABLE db.table ...
    

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

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

Совет

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

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

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

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

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

Восстановите IP Access List на сервисе source

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

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

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