Backup Service

Backup Service

Обзор

Сервис Backup предоставляет высокоуровневую абстракцию для выполнения команд BACKUP и RESTORE в ClickHouse. Он отвечает за формирование SQL-запросов, валидацию параметров и получение статуса операций.

Архитектура

graph TD
    subgraph "Система"
        A[RabbitMQ] --> B{Backup Handler};
        B --> C[Backup Manager];
        C --> D[ClickHouse];
    end

    subgraph "Взаимодействие"
        E[API Gateway] --> A;
        D --> F[S3 Storage];
    end
  • Backup Handler: Принимает задачи из RabbitMQ (create_backup, restore_backup и т.д.).
  • Backup Manager: Формирует и выполняет SQL-запросы BACKUP/RESTORE.
  • ClickHouse: Выполняет операции резервного копирования и восстановления.
  • S3 Storage: Хранит файлы резервных копий.

Функциональность

1. Создание бэкапа (create_backup)

Создает резервную копию базы данных или таблицы в S3.

Параметры:

  • scope: database или table.
  • database: Имя базы данных.
  • table: Имя таблицы (если scope=table).
  • backup_path: Путь в S3 для сохранения бэкапа.
  • access_key, secret_key: Ключи доступа к S3.

2. Восстановление из бэкапа (restore_backup)

Восстанавливает базу данных или таблицу из резервной копии в S3.

Параметры:

  • backup_id: ID операции восстановления.
  • scope, database, table: Аналогично create_backup.
  • backup_path, access_key, secret_key: Аналогично create_backup.
  • overwrite: true, если нужно перезаписать существующие данные.

3. Получение списка бэкапов (list_backups)

Возвращает список недавних операций резервного копирования.

4. Получение информации о бэкапе (get_backup)

Возвращает детальную информацию о конкретной операции по ее ID.

Использование

Задачи отправляются в RabbitMQ в формате JSON.

Пример: Создание бэкапа

{
  "type": "create_backup",
  "payload": {
    "scope": "database",
    "database": "quotes",
    "backup_path": "s3://my-bucket/backups/quotes_backup_1",
    "access_key": "...",
    "secret_key": "..."
  }
}

Пример: Восстановление

{
  "type": "restore_backup",
  "payload": {
    "backup_id": "restore-op-123",
    "request": {
      "scope": "database",
      "database": "quotes_restored",
      "backup_path": "s3://my-bucket/backups/quotes_backup_1",
      "access_key": "...",
      "secret_key": "...",
      "overwrite": true
    }
  }
}

Настройка

Сервис Backup не требует специальной конфигурации в config.yaml, так как все параметры (включая ключи S3) передаются в теле задачи. Единственное требование — наличие рабочего соединения с ClickHouse.