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

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

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

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

Миграция включает несколько шагов:
- Определите один сервис ClickHouse Cloud как источник, а другой как назначение
- Добавьте пользователя только для чтения на сервисе-источнике
- Продублируйте структуру таблицы источника на сервисе-назначении
- Временно разрешите IP-доступ к сервису-источнику
- Скопируйте данные с источника на назначение
- Повторно включите список доступа по IP (IP Access List) на сервисе-назначении
- Удалите пользователя только для чтения с сервиса-источника
Добавьте пользователя только для чтения в исходном сервисе
-
Добавьте пользователя с правами только на чтение, который может читать исходную таблицу (
db.tableв этом примере) -
Скопируйте определение таблицы
Продублируйте структуру таблицы на целевом сервисе
На целевом сервисе создайте базу данных, если она ещё не существует:
-
Создайте целевую базу данных:
-
Используя оператор CREATE TABLE с исходного сервиса, создайте целевую таблицу.
На целевом сервисе создайте таблицу, используя результат запроса
select create_table_query...на исходном сервисе:
Разрешите удалённый доступ к исходному сервису
Чтобы передавать данные из исходного сервиса в целевой, исходный сервис должен разрешать подключения. Временно отключите функциональность «IP Access List» на исходном сервисе.
Если вы планируете и дальше использовать исходный сервис ClickHouse Cloud, экспортируйте текущий IP Access List в файл JSON перед переключением на режим доступа из любого места; это позволит импортировать список доступа после завершения миграции данных.
Измените IP Access List и временно разрешите доступ из Anywhere. Подробности см. в документации по IP Access List.
Скопируйте данные из источника в целевой сервис
-
Используйте функцию
remoteSecure, чтобы получить данные из исходного сервиса ClickHouse Cloud. Подключитесь к целевому сервису и выполните в нём следующую команду: -
Проверьте данные в целевом сервисе
Повторно настройте список доступа по IP на исходном кластере
Если вы ранее экспортировали список доступа, вы можете импортировать его обратно с помощью Share, в противном случае заново добавьте свои записи в список доступа.
Удалить пользователя exporter с доступом только на чтение
- Переключите список IP-доступа сервиса, чтобы ограничить доступ