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

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

Независимо от того, шардирована и/или реплицирована ваша исходная таблица, в ClickHouse Cloud вы просто создаёте целевую таблицу (для этой таблицы можно опустить параметр Engine — по умолчанию будет использована таблица ReplicatedMergeTree), и ClickHouse Cloud автоматически позаботится о вертикальном и горизонтальном масштабировании. Вам не нужно думать о том, как реплицировать и шардировать таблицу.
В этом примере самостоятельно управляемый сервер ClickHouse является источником, а сервис ClickHouse Cloud — приёмником.
Обзор
Процесс выглядит следующим образом:
- Добавить пользователя с правами только на чтение в исходный сервис
- Продублировать структуру исходной таблицы в целевом сервисе
- Перенести данные из источника в приёмник (pull) или отправить данные из источника (push) в зависимости от сетевой доступности источника
- Удалить исходный сервер из IP Access List на целевой стороне (если применимо)
- Удалить пользователя с правами только на чтение из исходного сервиса
Миграция таблиц из одной системы в другую:
Этот пример переносит одну таблицу с самостоятельно управляемого сервера ClickHouse в ClickHouse Cloud.
На исходной системе ClickHouse (системе, которая в данный момент хранит данные)
- Добавьте пользователя с правами только на чтение, который может читать исходную таблицу (
db.tableв этом примере)
- Скопируйте описание таблицы
В целевой системе ClickHouse Cloud:
- Создайте целевую базу данных:
- Используя оператор CREATE TABLE из исходной базы данных, создайте таблицу в целевой базе данных.
Измените ENGINE на ReplicatedMergeTree без каких-либо параметров при выполнении оператора CREATE. ClickHouse Cloud всегда реплицирует таблицы и задаёт корректные параметры. При этом сохраните клаузы ORDER BY, PRIMARY KEY, PARTITION BY, SAMPLE BY, TTL и SETTINGS.
- Используйте функцию
remoteSecure, чтобы получить данные из самостоятельно управляемого источника

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

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

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

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

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

Миграция состоит из нескольких шагов:
- Определите один сервис ClickHouse Cloud как source, а другой как destination
- Добавьте пользователя только для чтения в сервис source
- Продублируйте структуру таблицы source в сервисе destination
- Временно разрешите доступ по IP к сервису source
- Скопируйте данные из source в destination
- Восстановите IP Access List на сервисе destination
- Удалите пользователя только для чтения из сервиса source
Добавьте пользователя только для чтения в сервис source
-
Добавьте пользователя только для чтения, который может читать таблицу source (
db.tableв этом примере) -
Скопируйте определение таблицы
Продублируйте структуру таблицы в сервисе destination
В сервисе destination создайте базу данных, если её ещё нет:
-
Создайте базу данных destination:
-
Используя оператор CREATE TABLE из source, создайте таблицу в destination.
В сервисе destination создайте таблицу, используя вывод
select create_table_query...из source:
Разрешите удалённый доступ к сервису 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: -
Проверьте данные в сервисе destination
Восстановите IP Access List на сервисе source
Если вы ранее экспортировали список доступа, то можете повторно импортировать его с помощью Share, иначе заново добавьте свои записи в список доступа.
Удалите пользователя только для чтения exporter
- Измените список IP‑адресов доступа к сервису, чтобы ограничить доступ