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

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

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

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