Миграция с самоуправляемого ClickHouse на ClickHouse Cloud с использованием команд резервного копирования
Обзор
Существует два основных способа миграции данных из самоуправляемого ClickHouse (OSS) в ClickHouse Cloud:
- С использованием функции
remoteSecure(), при которой данные напрямую считываются/записываются. - С использованием команд
BACKUP/RESTOREчерез объектное хранилище в облаке
В этом руководстве по миграции основное внимание уделяется подходу с использованием
BACKUP/RESTOREи приводится практический пример миграции базы данных или полного сервиса из самоуправляемого ClickHouse с открытым исходным кодом в Cloud через бакет S3.
Предварительные требования
- Установлен Docker
- У вас есть бакет S3 и IAM-пользователь
- Вы можете создать новый сервис ClickHouse Cloud
Чтобы шаги в этом руководстве было легко повторять и воспроизводить, мы будем использовать одну из конфигураций docker compose для кластера ClickHouse с двумя сегментами и двумя репликами.
Этот метод резервного копирования требует кластера ClickHouse, поскольку таблицы должны быть преобразованы из движка MergeTree в ReplicatedMergeTree.
Если вы запускаете одиночный экземпляр, вместо этого выполните шаги из раздела "Migrating between self-managed ClickHouse and ClickHouse Cloud using remoteSecure".
Подготовка OSS
Сначала мы развернём кластер ClickHouse с использованием конфигурации Docker Compose из нашего репозитория с примерами. Вы можете пропустить развертывание кластера ClickHouse, если он у вас уже запущен.
- Клонируйте репозиторий с примерами на локальную машину.
- В терминале выполните команду
cdв каталогexamples/docker-compose-recipes/recipes/cluster_2S_2R. - Убедитесь, что Docker запущен, затем запустите кластер ClickHouse:
Вы должны увидеть следующее:
В новом окне терминала в корневом каталоге проекта выполните следующую команду, чтобы подключиться к первому узлу кластера:
Создание демонстрационных данных
ClickHouse Cloud работает с SharedMergeTree.
При восстановлении резервной копии ClickHouse автоматически преобразует таблицы с ReplicatedMergeTree в таблицы SharedMergeTree.
Скорее всего, ваши таблицы уже используют движок ReplciatedMergeTree, если вы запускаете кластер.
Если нет, вам нужно будет преобразовать все таблицы MergeTree в ReplicatedMergeTree перед созданием резервной копии.
В целях демонстрации того, как преобразовывать таблицы MergeTree в ReplicatedMergeTree, мы начнём с таблицы MergeTree и затем преобразуем её в ReplicatedMergeTree.
Мы воспользуемся первыми двумя шагами из руководства по данным такси Нью‑Йорка, чтобы создать пример таблицы и загрузить в неё данные.
Эти шаги приведены ниже для вашего удобства.
Выполните следующие команды, чтобы создать новую базу данных и вставить данные из бакета S3 в новую таблицу:
Выполните следующую команду, чтобы отсоединить таблицу с помощью DETACH.
Затем подключите её как реплицированную таблицу:
Наконец, восстановите метаданные реплики:
Убедитесь, что таблица была преобразована в ReplicatedMergeTree:
Теперь вы готовы перейти к настройке сервиса Cloud в рамках подготовки к последующему восстановлению резервной копии из вашего S3-бакета.
Подготовка Cloud
Вы будете восстанавливать данные в новый сервис в Cloud. Выполните шаги ниже, чтобы создать новый сервис в Cloud.
Откройте Cloud Console
Перейдите по адресу https://console.clickhouse.cloud/
Создайте новый сервис

Создайте роль доступа
Откройте SQL‑консоль.

Настройка доступа к S3
Чтобы восстановить резервную копию из S3, необходимо настроить защищённый доступ между ClickHouse Cloud и вашим бакетом S3.
-
Следуйте шагам из раздела "Accessing S3 data securely", чтобы создать роль доступа и получить ARN роли.
-
Обновите политику бакета S3, созданную в разделе "How to create an S3 bucket and IAM role", добавив ARN роли из предыдущего шага.
Обновлённая политика для бакета S3 будет выглядеть примерно так:
Политика включает оба ARN:
- IAM user (
docs-s3-user): разрешает вашему самоуправляемому кластеру ClickHouse создавать резервные копии в S3 - Роль ClickHouse Cloud (
ClickHouseAccess-001): разрешает вашему сервису в Cloud выполнять восстановление из S3
Создание резервной копии (в самоуправляемом развертывании)
Чтобы создать резервную копию одной базы данных, выполните следующую команду из clickhouse-client, подключённого к вашему развертыванию OSS:
Замените BUCKET_URL, KEY_ID и SECRET_KEY на ваши собственные учётные данные AWS.
Руководство "How to create an S3 bucket and IAM role"
объясняет, как получить эти данные, если у вас их ещё нет.
Если всё настроено правильно вы увидите ответ похожий на приведённый ниже содержащий уникальный id присвоенный бэкапу и статус этого бэкапа.
Если вы проверите ранее пустой бакет S3, то теперь увидите, что в нём появились некоторые папки:

Если вы выполняете полную миграцию, вы можете выполнить следующую команду, чтобы создать резервную копию всего сервера:
Приведённая выше команда создаёт резервную копию:
- Всех пользовательских баз данных и таблиц
- Учетных записей пользователей и паролей
- Ролей и прав доступа
- Профилей настроек
- Политик на уровне строк
- Квот
- Определяемых пользователем функций
Если вы используете другого поставщика облачных услуг (CSP), вы можете использовать синтаксис TO S3() (для AWS и GCP) и TO AzureBlobStorage().
Для очень больших баз данных рассмотрите возможность использования ASYNC, чтобы запускать резервное копирование в фоновом режиме:
Затем можно использовать идентификатор резервной копии, чтобы отслеживать ход резервного копирования:
Можно также создавать инкрементальные резервные копии. За более подробной информацией о резервном копировании в целом обратитесь к документации по резервному копированию и восстановлению.
Восстановление в ClickHouse Cloud
Чтобы восстановить одну базу данных, выполните следующий запрос из вашего сервиса в ClickHouse Cloud, подставив ниже свои учётные данные AWS и задав ROLE_ARN равным значению, которое вы получили в результате выполнения шагов, описанных в разделе «Безопасный доступ к данным в S3» (@link)
Полное восстановление сервиса можно выполнить аналогичным образом:
Если теперь выполните следующий запрос в Cloud, вы увидите, что база данных и таблица были успешно восстановлены в Cloud:
