Резервное копирование и восстановление ClickHouse на локальном хранилище или NAS
Содержание
ОбзорПредварительные требованияТребования к средеТребования к доступуТребования к каталогуСтратегия резервного копированияПроцедураСоздание полной резервной копииПроверка успешного завершения резервного копированияПроверка состояния задачи резервного копированияПроверка каталога резервного копированияСоздание инкрементной резервной копииАрхивирование файлов резервной копииВосстановлениеПредварительные условия для восстановленияПроцедура восстановленияОстановка записиПодготовка ClickHouse в зависимости от масштаба сбояПодготовка файлов резервной копии на каждом узле ClickHouseПроверка готовности кластераВосстановление таблиц по однойПроверка состояния задачи восстановленияПроверка успешного восстановленияПроверка общего количества строкПроверка данных на уровне разделовПроверка состояния репликЗапуск связанных компонентовРекомендацииОбзор
В этом документе описывается, как создавать резервные копии и выполнять восстановление таблиц ClickHouse в базе данных observability с использованием локального хранилища или каталога, смонтированного по NAS. Эта процедура применяется к кластерам, использующим движок таблиц ReplicatedMergeTree.
Для ClickHouse NAS-монтирование рассматривается как путь локальной файловой системы. Поэтому для локального хранилища и NAS можно использовать один и тот же метод резервного копирования и восстановления.
В этом документе приведены следующие рекомендации:
- Создание полной резервной копии.
- Создание инкрементной резервной копии на основе полной.
- Хранение данных резервного копирования в локальном каталоге или в пути монтирования NAS.
- Восстановление данных из локальной резервной копии или резервной копии на NAS.
- Проверка результатов резервного копирования и восстановления.
В качестве примера в этом документе используется таблица observability.audit. Тот же порядок действий можно применить и к другим таблицам.
Наиболее распространенные примеры таблиц:
audit: хранит данные аудита.event: хранит данные событий.log_kubernetes: хранит журналы Kubernetes.log_platform: хранит журналы сервисов платформы.log_system: хранит системные журналы уровня узла.log_workload: хранит журналы приложений и нагрузок.
Типы хранилищ различаются следующим образом:
- LocalVolume: данные ClickHouse хранятся в каталоге, локальном для узла, например
/cpaas/data/clickhouse/. КомандаBACKUP ... TO File(...)записывает файлы резервной копии в каталог резервного копирования ClickHouse в этом локальном каталоге данных, например/cpaas/data/clickhouse/backups. - StorageClass, например TopoLVM, NFS или Ceph: данные ClickHouse хранятся на томе соответствующего StorageClass. Команда
BACKUP ... TO File(...)записывает файлы резервной копии в каталог резервного копирования ClickHouse на этом томе. - Путь архива NAS: файлы резервной копии можно скопировать из каталога резервного копирования ClickHouse в смонтированный путь NAS или в другой пользовательский каталог резервного копирования для долговременного хранения.
Для развертываний как LocalVolume, так и StorageClass используйте фактический каталог резервного копирования ClickHouse в качестве исходного пути при архивировании файлов резервной копии и в качестве пути назначения при обратном копировании файлов резервной копии для восстановления.
Предварительные требования
Перед началом убедитесь, что выполнены следующие условия.
Требования к среде
Требования к доступу
Все SQL-операторы в этом документе используют встроенную учетную запись администратора ClickHouse default.
Вы можете выполнять SQL-операторы на любом исправном экземпляре ClickHouse. Для единообразия в этом документе в качестве примера используется один Pod ClickHouse.
Перед выполнением SQL-операторов подключитесь к целевому Pod:
Затем подключитесь к ClickHouse в контейнере:
Пользователь default уже имеет необходимые привилегии для этой процедуры, включая BACKUP, RESTORE, SELECT и ALTER.
Требования к каталогу
Убедитесь, что выполнены следующие условия:
- Процесс ClickHouse имеет права на чтение и запись в целевой каталог.
- В целевом каталоге достаточно свободного места.
- Если используется NAS, точка монтирования автоматически восстанавливается после перезапуска Pod или хоста.
- В Kubernetes каталог монтируется через PVC, hostPath или CSI.
Стратегия резервного копирования
Используйте следующую стратегию резервного копирования:
- Выполняйте операцию резервного копирования только один раз на любом исправном реплике.
- Используйте
BACKUP TABLE, чтобы создать согласованный снимок без остановки сервиса. - Используйте
base_backupдля дедупликации на уровне файлов в инкрементных резервных копиях. - При восстановлении инкрементной резервной копии сохраняйте доступность базовой полной резервной копии.
- Используйте одну полную резервную копию в неделю и одну инкрементную резервную копию в день, чтобы сбалансировать сложность восстановления и стоимость хранения.
Процедура
В следующих примерах используется начальная полная резервная копия и ежедневная инкрементная резервная копия.
Создание полной резервной копии
Полная резервная копия создает базовую точку для последующих инкрементных резервных копий.
Выполните следующую команду на любом исправном экземпляре ClickHouse:
Примечания:
File(...)записывает резервную копию в каталог резервного копирования ClickHouse на томе данных ClickHouse.- Для развертываний LocalVolume каталог резервного копирования обычно находится по пути
/cpaas/data/clickhouse/backupsна узле хоста. - Для развертываний StorageClass, таких как TopoLVM, NFS или Ceph, каталог резервного копирования находится на соответствующем томе StorageClass.
compression_method = 'zstd'сжимает содержимое резервной копии с помощью zstd, чтобы уменьшить объем занимаемого места.- Если требуется архивировать резервную копию в NAS или в другой пользовательский каталог резервного копирования, скопируйте резервную копию после завершения задачи резервного копирования.
Проверка успешного завершения резервного копирования
После завершения резервного копирования проверьте результат.
Проверка состояния задачи резервного копирования
Выполните следующий запрос на экземпляре ClickHouse, на котором была запущена команда резервного копирования:
Ожидаемый результат:
Найдите запись резервного копирования для observability.audit по полю name. Резервное копирование считается успешным, если выполнены следующие условия:
status = 'BACKUP_CREATED'errorпустend_timeимеет значениеnum_files > 0total_size > 0
Проверка каталога резервного копирования
Выполните следующую команду на узле или в контейнере, где доступен каталог резервного копирования ClickHouse.
Для развертываний LocalVolume каталог резервного копирования обычно находится по пути /cpaas/data/clickhouse/backups:
Для развертываний StorageClass проверьте каталог резервного копирования на соответствующем томе StorageClass.
Ожидаемый результат:
- Каталог резервного копирования существует.
- Каталог содержит файлы или папки, созданные этой резервной копией.
- Количество файлов и общий размер больше 0.
Создание инкрементной резервной копии
Инкрементная резервная копия использует base_backup и записывает только новые или измененные файлы данных.
Выполните следующую команду на любом исправном экземпляре ClickHouse:
Примечания:
- Инкрементная резервная копия зависит от резервной копии, указанной в
base_backup. - В этом документе рекомендуется, чтобы каждая ежедневная инкрементная резервная копия использовала последнюю полную резервную копию в качестве
base_backup, а не предыдущую инкрементную резервную копию. Это упрощает зависимости при восстановлении: для восстановления ежедневной инкрементной резервной копии требуются только сама инкрементная копия и соответствующая ей полная резервная копия. - При восстановлении инкрементной резервной копии сохраняйте соответствующую полную резервную копию.
- Периодически создавайте новую полную резервную копию, чтобы не полагаться слишком долго на одну и ту же базовую копию.
Архивирование файлов резервной копии
BACKUP ... TO File(...) записывает файлы резервной копии в каталог резервного копирования ClickHouse на томе данных ClickHouse, где выполняется команда резервного копирования.
Каталог резервного копирования зависит от типа хранилища:
- Для развертываний LocalVolume каталог данных ClickHouse находится на узле хоста, обычно
/cpaas/data/clickhouse/, а файлы резервной копии создаются в/cpaas/data/clickhouse/backups. - Для развертываний StorageClass, таких как TopoLVM, NFS или Ceph, каталог данных ClickHouse находится на соответствующем томе StorageClass, а файлы резервной копии создаются в каталоге резервного копирования ClickHouse на этом томе.
После успешного завершения резервного копирования скопируйте файлы резервной копии из фактического каталога резервного копирования ClickHouse в пользовательский каталог резервного копирования или в путь монтирования NAS для долговременного хранения.
Для развертываний LocalVolume исходный путь обычно /cpaas/data/clickhouse/backups:
Для развертываний StorageClass замените /cpaas/data/clickhouse/backups на фактический каталог резервного копирования ClickHouse на томе StorageClass.
Примечания:
/my_dirможет быть выделенным локальным каталогом архива или путем монтирования NAS.- Используйте путь архива вне каталога данных ClickHouse. В противном случае файлы резервной копии могут быть удалены при очистке каталога данных ClickHouse во время аварийного восстановления.
- После каждой полной или инкрементной резервной копии копируйте соответствующий каталог резервной копии в место архивации.
- После успешного копирования инкрементной резервной копии вы можете удалить локальную инкрементную резервную копию из каталога резервного копирования ClickHouse, если она больше не нужна.
- Удаляйте локальную полную резервную копию из каталога резервного копирования ClickHouse только после успешного завершения следующей полной резервной копии и если политика хранения позволяет выполнить очистку.
- Если позже вы будете выполнять восстановление с помощью
RESTORE ... ON CLUSTER ... FROM File(...), убедитесь, что необходимые каталоги полной и инкрементной резервных копий скопированы обратно в каталог резервного копирования ClickHouse на каждом узле хоста ClickHouse до запуска команды восстановления.
Восстановление
Используйте эту процедуру, если данные таблицы повреждены, каталог данных удален или состояние таблицы является аномальным.
Предварительные условия для восстановления
Перед началом процедуры восстановления убедитесь, что выполнены следующие условия:
- У вас есть действующая полная резервная копия или инкрементная резервная копия.
- Если вы восстанавливаете из инкрементной резервной копии, соответствующая полная резервная копия доступна в пути восстановления.
- Вы знаете каталог архива, в котором хранится последняя инкрементная резервная копия и соответствующая ей полная резервная копия.
- У вас есть доступ к кластеру Kubernetes и к узлам хоста, на которых запланированы экземпляры ClickHouse.
Процедура восстановления
Эта процедура восстанавливает данные ClickHouse по таблицам. Выберите подготовительные шаги в зависимости от масштаба сбоя, а затем выполните ту же процедуру восстановления для каждой требуемой таблицы.
Остановка записи
Сначала остановите razor, чтобы предотвратить запись новых данных во время восстановления.
Войдите на узел master кластера и создайте ResourcePatch, чтобы остановить razor:
Подготовка ClickHouse в зависимости от масштаба сбоя
Выберите один из следующих вариантов подготовки в зависимости от масштаба сбоя. После завершения подготовки продолжайте ту же процедуру восстановления по таблицам.
Сценарий A: Данные таблицы повреждены, но каталог данных исправен
Используйте этот сценарий, если одна или несколько таблиц повреждены, случайно удалены или содержат аномальные данные, при этом каталог данных ClickHouse и состояние Keeper остаются исправными.
В этом случае не останавливайте ClickHouse и не очищайте каталог данных ClickHouse. Сразу переходите к процедуре восстановления таблицы.
Сценарий B: Каталог данных или метаданные Keeper повреждены
Используйте этот сценарий только тогда, когда каталог данных ClickHouse поврежден, узел пересобран или метаданные Keeper недоступны.
В этом развертывании ClickHouse Keeper интегрирован с ClickHouse, и его данные также хранятся в каталоге данных ClickHouse. Поэтому очистка каталога данных ClickHouse также удаляет локальные данные ClickHouse Keeper.
Предупреждение: Очистка каталога данных удаляет локальные данные ClickHouse на целевых узлах. Перед продолжением убедитесь, что резервная копия доступна.
Очистите фактический каталог данных ClickHouse для каждого экземпляра ClickHouse в соответствии с типом хранилища. Для развертываний LocalVolume каталог обычно находится по пути
/cpaas/data/clickhouse/на узле хоста. Для развертываний StorageClass очистите каталог данных ClickHouse на соответствующем томе StorageClass или PV. Не используйте/cpaas/data/clickhouse/для развертываний StorageClass, если не подтверждено, что это фактический путь смонтированных данных.
Войдите на узел master кластера и создайте ResourcePatch, чтобы остановить ClickHouse:
Убедитесь, что все Pod ClickHouse остановлены:
Очистите каталог данных ClickHouse для каждого экземпляра ClickHouse в соответствии с типом хранилища.
Для развертываний LocalVolume выполните следующую команду на каждом узле хоста, где развернут экземпляр ClickHouse:
Для развертываний StorageClass очистите каталог данных ClickHouse на соответствующем томе StorageClass или PV. Точный путь зависит от реализации StorageClass и CSI. Используйте фактический путь смонтированных данных ClickHouse вместо пути-примера для LocalVolume.
Запустите только компоненты ClickHouse, удалив ResourcePatch ClickHouse. razor пока не запускайте.
Убедитесь, что все Pod ClickHouse запущены:
Подготовка файлов резервной копии на каждом узле ClickHouse
Убедитесь, что файлы резервной копии доступны в каталоге резервного копирования ClickHouse на каждом узле хоста ClickHouse.
Если файлы резервной копии были архивированы в пользовательский каталог резервного копирования или в путь монтирования NAS, а локальные файлы в каталоге резервного копирования ClickHouse были удалены, скопируйте последнюю инкрементную резервную копию и соответствующую полную резервную копию обратно в каталог резервного копирования ClickHouse на каждом узле хоста ClickHouse перед восстановлением таблицы.
Для развертываний LocalVolume путь назначения обычно /cpaas/data/clickhouse/backups:
Для развертываний StorageClass скопируйте файлы резервной копии обратно в фактический каталог резервного копирования ClickHouse на томе StorageClass.
Примечания:
- Если вы восстанавливаете из инкрементной резервной копии, одновременно подготовьте зависимую полную резервную копию.
- Файлы резервной копии должны быть размещены в каталоге резервного копирования ClickHouse на каждом узле хоста ClickHouse, чтобы
RESTORE ... ON CLUSTER ... FROM File(...)мог получить к ним доступ на каждом экземпляре ClickHouse. - Замените
/my_dir,/cpaas/data/clickhouse/backups,audit_full_20260423иaudit_incr_20260424фактическим путем архива, каталогом резервного копирования ClickHouse и именами каталогов резервных копий.
Проверка готовности кластера
Перед запуском команды восстановления убедитесь, что конфигурация кластера ClickHouse и macros доступны.
Проверьте конфигурацию кластера replicated:
Проверьте локальные macros ClickHouse:
Убедитесь, что в кластере есть ожидаемые реплики ClickHouse и что доступны macros, такие как shard и replica.
Восстановление таблиц по одной
Выполните следующую процедуру восстановления для каждой таблицы, которую необходимо восстановить.
Удалите целевую таблицу в кластере ClickHouse:
Восстановите таблицу из локальной резервной копии или резервной копии NAS:
Примечания:
- Для таблицы
ReplicatedMergeTreeв этом развертывании с 3 репликами используйтеON CLUSTER 'replicated', чтобы операция восстановления была распределена по всем репликам ClickHouse в кластере. - Если вы восстанавливаете из инкрементной резервной копии, ClickHouse автоматически читает зависимую базовую резервную копию.
- Сохраняйте доступность соответствующего каталога полной резервной копии во время восстановления.
- Замените
observability.auditи имя каталога резервной копии на фактические таблицу и резервную копию, которые вы хотите восстановить. - Повторите ту же процедуру для каждой таблицы, которую необходимо восстановить. Список таблиц определяется заказчиком.
Проверка состояния задачи восстановления
После выполнения каждой команды восстановления проверьте состояние задачи восстановления, прежде чем запускать связанные компоненты:
Ожидаемый результат:
Восстановление считается успешным, если выполнены следующие условия:
statusуказывает, что операция восстановления успешно завершена.errorпуст.end_timeимеет значение.
Проверка успешного восстановления
После завершения восстановления проверьте результат с точки зрения данных, разделов и реплик.
Проверка общего количества строк
Выполните следующий запрос на каждом экземпляре ClickHouse:
Ожидаемый результат:
Значение total_rows одинаково на всех экземплярах ClickHouse.
Проверка данных на уровне разделов
Выполните следующий запрос на каждом экземпляре ClickHouse:
Ожидаемый результат:
- Список
partitionодинаков на всех экземплярах ClickHouse. - Значение
rowsдля каждого раздела одинаково на всех экземплярах ClickHouse.
active_parts используется только для наблюдения за физическим размещением частей. Разное количество частей не обязательно означает сбой восстановления.
Проверка состояния реплик
Выполните следующий запрос на любом экземпляре ClickHouse:
Ожидаемый результат:
Для кластера с 3 репликами восстановление считается успешным, если выполнены следующие условия:
total_replicas = 3active_replicas = 3queue_size = 0absolute_delayблизко к0
Запуск связанных компонентов
После успешной проверки восстановления снова запустите razor, удалив ResourcePatch:
Рекомендации
В производственной среде используйте следующие рекомендации:
- Поддерживайте цепочку резервного копирования: одна полная резервная копия в неделю и одна инкрементная резервная копия в день.
- Используйте единообразную схему именования каталогов резервных копий, например
full_YYYYMMDDиincr_YYYYMMDD. - Регулярно выполняйте пробные восстановления в тестовой среде.
- Определите политику хранения для устаревших инкрементных резервных копий и исторических полных резервных копий.