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

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

Migrating Self-managed 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. Перенесите данные из источника в назначение или отправьте данные из источника, в зависимости от доступности сети источника
  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. ClickHouse Cloud всегда реплицирует таблицы и предоставляет правильные параметры. Тем не менее, сохраните ключи ORDER BY, PRIMARY KEY, PARTITION BY, SAMPLE BY, TTL и SETTINGS.

CREATE TABLE db.table ...
  • Используйте функцию remoteSecure, чтобы загрузить данные из самоуправляемого источника
Migrating Self-managed ClickHouse
INSERT INTO db.table SELECT * FROM
remoteSecure('source-hostname', db, table, 'exporter', 'password-here')
примечание

Если исходная система недоступна из внешних сетей, вы можете отправить данные, а не загрузить их, так как функция remoteSecure работает как для выборок, так и для вставок. Посмотрите следующий вариант.

  • Используйте функцию remoteSecure, чтобы отправить данные в сервис ClickHouse Cloud
Migrating Self-managed ClickHouse
Добавьте удалённую систему в список управления доступом по IP вашего сервиса ClickHouse Cloud

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

Управление вашим списком доступа по IP

Из списка ваших сервисов ClickHouse Cloud выберите сервис, с которым будете работать, и перейдите в Настройки. Если список доступа по IP не содержит IP-адрес или диапазон удаленной системы, который должен подключаться к вашему сервису ClickHouse Cloud, то вы можете решить эту проблему с помощью Добавить IP:

Проверьте, разрешает ли сервис трафик с вашего IP-адреса в списке доступа по IP

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

Добавьте ваш текущий IP-адрес в список доступа по IP в ClickHouse Cloud
INSERT INTO FUNCTION
remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table',
'default', 'PASS') SELECT * FROM db.table

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

Migrating Self-managed ClickHouse

Некоторые примеры использования для миграции данных между сервисами ClickHouse Cloud:

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

В этом примере есть два сервиса ClickHouse Cloud, и они будут называться источником и назначением. Данные будут перенесены с источника на назначение. Хотя вы можете отправить данные, если хотите, показан способ загрузки, так как он использует пользователя с правами только для чтения.

Migrating Self-managed ClickHouse

В миграции несколько шагов:

  1. Определите один сервис ClickHouse Cloud как источник, а другой как назначение
  2. Добавьте пользователя с правами только для чтения в исходный сервис
  3. Дублируйте структуру исходной таблицы в целевом сервисе
  4. Временно разрешите IP-доступ к источнику
  5. Скопируйте данные из источника на назначение
  6. Восстановите список управления доступом по IP на назначении
  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 в файл JSON перед переключением на разрешение доступа откуда угодно; это позволит вам импортировать список доступа после миграции данных.

Измените список разрешений и временно разрешите доступ от Anywhere. См. документацию по IP Access List для получения подробной информации.

Скопируйте данные из источника на назначение

  • Используйте функцию remoteSecure, чтобы получить данные из сервиса ClickHouse Cloud источника Подключитесь к назначению. Выполните эту команду на целевом сервисе ClickHouse Cloud:
INSERT INTO db.table SELECT * FROM
remoteSecure('source-hostname', db, table, 'exporter', 'password-here')
  • Проверьте данные в целевом сервисе

Восстановите список управления доступом по IP на источнике

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

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

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