Обзор
- С помощью функции
remoteSecure(), при котором данные напрямую передаются или извлекаются. - С помощью команд
BACKUP/RESTOREчерез облачное объектное хранилище
Это руководство по миграции посвящено подходуПредварительные требованияBACKUP/RESTOREи содержит практический пример миграции базы данных или целого сервиса из ClickHouse с открытым исходным кодом в Cloud через S3 бакет.
- У вас установлен Docker
- У вас есть S3 бакет и пользователь IAM
- Вы можете создать новый сервис ClickHouse Cloud
Требуется кластерДля этого метода резервного копирования нужен кластер ClickHouse, поскольку таблицы необходимо преобразовать из движка
MergeTree в ReplicatedMergeTree.
Если у вас запущен один экземпляр, вместо этого выполните шаги из руководства “Миграция между самоуправляемым ClickHouse и ClickHouse Cloud с использованием remoteSecure”.Подготовка OSS
- Клонируйте репозиторий examples на локальный компьютер
- В терминале перейдите в каталог
examples/docker-compose-recipes/recipes/cluster_2S_2R - Убедитесь, что Docker запущен, затем запустите кластер ClickHouse:
От таблицы MergeTree к таблице ReplicatedMergeTree
SharedMergeTree.
При восстановлении резервной копии ClickHouse автоматически преобразует таблицы с ReplicatedMergeTree в таблицы SharedMergeTree.
Скорее всего, если вы используете кластер, ваши таблицы уже работают на движке ReplicatedMergeTree.
Если нет, перед созданием резервной копии вам нужно будет преобразовать все таблицы MergeTree в ReplicatedMergeTree.
Чтобы наглядно показать, как преобразовать таблицы MergeTree в ReplicatedMergeTree, мы начнем с таблицы MergeTree, а затем преобразуем ее в ReplicatedMergeTree.
Мы выполним первые два шага из руководства по данным New York taxi, чтобы создать демонстрационную таблицу и загрузить в нее данные.
Для удобства эти шаги приведены ниже.
Выполните следующие команды, чтобы создать новую базу данных и загрузить данные из S3 бакета в новую таблицу:
DETACH.
ReplicatedMergeTree:
Distributed таблицы с ReplicatedMergeTree
ReplicatedMergeTree на каждом узле и таблица Distributed в качестве точки входа для запросов.
Выполните следующую команду, чтобы создать локальную реплицируемую таблицу на всех узлах кластера:
Distributed:
Подготовка ClickHouse Cloud
1
Откройте Cloud Console
Перейдите на https://console.clickhouse.cloud/
2
Создайте новый сервис
3
Настройте и создайте сервис
Выберите нужный регион и конфигурацию, затем нажмите
Create service4
Создайте роль доступа
Откройте SQL ConsoleПолитика включает оба ARN:
Настройте доступ к S3
Чтобы восстановить резервную копию из S3, вам нужно настроить безопасный доступ между ClickHouse Cloud и вашим S3 бакетом.- Выполните шаги из “Безопасный доступ к данным S3”, чтобы создать роль доступа и получить ARN роли.
- Обновите политику S3 бакета, созданную на шаге “Как создать S3 бакет и роль IAM”, добавив ARN роли из предыдущего шага.
- пользователь IAM (
docs-s3-user): позволяет вашему самоуправляемому кластеру ClickHouse создавать резервные копии в S3 - роль ClickHouse Cloud (
ClickHouseAccess-001): позволяет вашему сервису ClickHouse Cloud восстанавливать данные из S3
Создание резервной копии (в самоуправляемом развертывании)
BUCKET_URL, KEY_ID и SECRET_KEY своими учётными данными AWS.
В руководстве “Как создать S3 бакет и роль IAM”
показано, как получить их, если у вас их ещё нет.
Сегмент 1:
Одноузловые развертыванияЕсли вы не используете distributed таблицы, вы можете создать резервную копию всей базы данных одной командой:
- Всех пользовательских баз данных и таблиц
- Учетных записей пользователей и паролей
- Ролей и разрешений
- Профилей настроек
- Политик доступа к строкам
- Квот
- Пользовательских функций
TO S3() (как для AWS, так и для GCP) и TO AzureBlobStorage().
Для очень больших баз данных рассмотрите возможность использования ASYNC, чтобы выполнять резервное копирование в фоновом режиме:
Восстановление в ClickHouse Cloud
ROLE_ARN в
значение, полученное в разделе “Безопасный доступ к данным S3”.
При втором (и каждом последующем) восстановлении используйте SETTINGS allow_non_empty_tables=true, чтобы
данные сегмента добавлялись в уже восстановленные таблицы, а не возникала ошибка конфликта:
Сегмент 1:
не-распределённые развертыванияЕсли вы не используете distributed таблицы, восстановите базу данных одной командой:
SharedMergeTree внутренне, старая distributed таблица больше не нужна. Её можно удалить и заменить представлением, сохранив исходное имя таблицы для ваших запросов:
ReplicatedMergeTree будут восстановлены как SharedMergeTree: