Данные службы разворачиваются заново с помощью Ansible.
Размещение компонентов
Компонент
Конфигурация
Данные
Где развернут
ClickHouse
/etc/clickhouse-server/
—
Host (отдельные VM)
ClickHouse Keeper
/etc/clickhouse-keeper/
/var/lib/clickhouse-keeper/ или /var/lib/clickhouse/coordination/
Host (отдельные VM)
ETCD
Vault, Ansible
Docker Volume (logiq_etcd-data)
Docker
PostgreSQL
Vault, Ansible
Docker Volume (logiq_patroni-data)
Docker
S3 MinIO
Vault, Ansible
Docker Volume (logiq_minio-data)
Docker
Vault
Vault, Ansible
Docker Volume (logiq_vault-data)
Docker
ClickHouse и ClickHouse Keeper развернуты на отдельных виртуальных машинах (внешний слой хранения), не через Docker. Остальные компоненты — в Docker.
Резервное копирование
ClickHouse
ClickHouse развернут на отдельных виртуальных машинах. Резервному копированию подлежит только конфигурация. Резервное копирование данных при необходимости выполняется отдельно через clickhouse-backup.
Для резервного копирования данных используется инструмент clickhouse-backup (Altinity). Он предназначен для резервирования данных и размещения их во внешнем хранилище, например в S3. Конфигурация /etc/clickhouse-backup/config.yml:
# Создать полную копию
clickhouse-backup create full_backup_$(date +%Y%m%d_%H%M%S)
# Отправить в S3
clickhouse-backup upload backup_name
# Или сразу создать и отправить
clickhouse-backup create_remote full_backup_$(date +%Y%m%d_%H%M%S)
Периодичность:
Конфигурация: ежедневно;
Данные: еженедельно (инкрементально).
ClickHouse Keeper
ClickHouse Keeper развернут на отдельных виртуальных машинах.
Конфигурация Ansible (playbook, inventory, переменные, шаблоны) хранится в Git-репозитории.
Резервное копирование:
#!/bin/bash
BACKUP_DIR="/backup/ansible/$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
# Клонировать репозиторий (если есть доступ)
git clone --depth 1 /path/to/ansible-repo "$BACKUP_DIR/ansible-repo"
# Или скопировать локальную версию
# cp -r /path/to/ansible/ "$BACKUP_DIR/ansible-repo"
Периодичность: при изменениях в репозитории.
Убедитесь, что репозиторий Ansible доступен для восстановления. Рекомендуется использовать внешний Git (GitLab, GitHub) с доступом извне.
Восстановление
Порядок восстановления
Порядок восстановления компонентов выполняется в следующей последовательности:
ClickHouse Keeper — координация (host).
ClickHouse — хранилище (host).
ETCD — HA для PostgreSQL (Docker).
PostgreSQL — данные (Docker).
S3 MinIO — объектное хранилище (Docker).
Vault — секреты (Docker).
Stateless-службы с помощью Ansible (Saturn, Mercury, Earth, Venus, Grafana).
ClickHouse и Keeper развернуты на отдельных виртуальных машинах (внешний слой хранения). Сначала восстанавливаются они, затем Docker-компоненты, после чего выполняется повторное развертывание stateless-служб.
ClickHouse Keeper
Восстановление на том же сервере выполняется из сохраненной конфигурации и данных:
# Остановить Keeper
systemctl stop clickhouse-keeper
# Восстановить конфигурацию и данные
cp -r /backup/keeper/YYYYMMDD/config/* /etc/clickhouse-keeper/
cp -r /backup/keeper/YYYYMMDD/coordination/* /var/lib/clickhouse/coordination/
# Запустить
systemctl start clickhouse-keeper
Для замены узла в кластере необходимо:
Развернуть новый ClickHouse Keeper с тем же server_id.
Настроить raft_configuration в keeper_server.xml.
Leader отправит снапшот автоматически.
ClickHouse
Для восстановления ClickHouse сначала возвращается конфигурация, после чего при необходимости восстанавливаются данные.
Восстановление конфигурации:
# Остановить ClickHouse
systemctl stop clickhouse-server
# Восстановить конфигурацию
cp -r /backup/clickhouse/YYYYMMDD/config/* /etc/clickhouse-server/
# Запустить
systemctl start clickhouse-server
Восстановление данных (через clickhouse-backup):
# Скачать из S3 (если нужно)
clickhouse-backup download backup_name
# Восстановить
clickhouse-backup restore backup_name
ETCD
Восстановление ETCD выполняется из снапшота:
# Остановить Patroni на всех узлах
docker stop patroni
docker stop etcd
# Очистить volume
docker run --rm -v logiq_etcd-data:/etcd-data alpine rm -rf /etcd-data/*
# Восстановить из снапшота
ETCDCTL_API=3 docker run --rm \
-v logiq_etcd-data:/etcd-data \
-v /backup/etcd/YYYYMMDD:/backup \
quay.io/coreos/etcd:v3.5.0 \
etcdctl snapshot restore /backup/snapshot.db \
--data-dir=/etcd/data
# Запустить
docker start etcd
docker start patroni
Восстановление необходимо выполнять при остановленном Patroni на всех узлах, иначе возможно состояние split-brain.
PostgreSQL
Восстановление PostgreSQL выполняется из дампа или из Docker volume.
Восстановить ClickHouse Keeper (минимум 1 узел, host).
Восстановить ClickHouse (конфигурация, host).
Восстановить ETCD (снапшот, Docker).
Восстановить PostgreSQL (из дампа, Docker).
Восстановить S3 MinIO (volume, Docker).
Восстановить Vault (снапшот, Docker).
Развернуть stateless-службы с помощью Ansible (Saturn, Mercury, Earth, Venus, Grafana).
Внешний слой хранения (ClickHouse, Keeper, ETCD, MinIO) — это отдельные VM или Docker-контейнеры, на которых держится вся инфраструктура. Сначала восстанавливаем их, после чего разворачиваем службы с помощью Ansible.
Регламент проверок
Ежедневно
Проверить успешность резервного копирования.
Проверить свободное место в хранилище резервных копий.
Проверить доступность всех узлов.
Еженедельно
Тестовое восстановление ClickHouse (конфигурация).
Тестовое восстановление ETCD (снапшот).
Проверка целостности резервных копий (checksum).
Проверка доступности репозитория Ansible.
Ежемесячно
Полное тестовое восстановление на стенде.
Проверка замены узла Keeper.
Проверка замены узла ETCD.
Тест восстановления PostgreSQL.
После обновлений
Проверить совместимость резервных копий после обновления ClickHouse.
Актуализировать документ (если изменились пути или команды).