Резервное копирование

Возможно резервное копирование следующих компонентов системы:

  • данных кластера — настроек, сделанных через web-интерфейс и API;
  • данных экземпляра — специфичных для экземпляра настроек;
  • метрик (графиков).

Сценарии автоматизированного резервного копирования:

Восстановление возможно только на ту же версию Mitigator´а, с которой была сделана резервная копия.

Создание резервной копии

Резервная копия состоит из копии данных кластера (backup.sql) и копии данных каждого экземпляра (один или несколько backup_ownid.tgz).

Резервная копия данных кластера

Выполняется на сервере, хранящем базу данных (primary, если настроена репликация).

Вариант А. При работающем Mitigator´е:

docker-compose exec postgres sh -c 'backup > /tmp/backup.sql'
docker cp mitigator_postgres_1:/tmp/backup.sql .

Вариант Б. При остановленном Mitigator´е:

docker-compose up -d postgres
docker-compose exec postgres sh -c 'backup > /tmp/backup.sql'
docker cp mitigator_postgres_1:/tmp/backup.sql .
docker-compose down postgres

После выполнения любой из приведенных команд следует вручную убедиться, что резервная копия создалась без ошибок:

tail backup.sql

Резервная копия данных экземпляра

Выполняется на каждом из экземпляров:

tar -czf backup_ownid.tgz -C /var/lib/docker/volumes/mitigator_own_id/ .

Резервная копия метрик

Выполняется на сервере, хранящем метрики.

Если перед началом резервного копирования Mitigator остановлен, необходимо запустить модуль хранения метрик (docker-compose up -d clickhouse) и остановить его после процедуры создания бэкапа (docker-compose down clickhouse).

for table in 'graphite' 'graphite_tagged'; do docker-compose exec clickhouse clickhouse-client --query "ALTER TABLE $table FREEZE"; done
tar -czf metrics.tgz -C /var/lib/docker/volumes/mitigator_clickhouse/_data/shadow/1/data/default .
rm -r /var/lib/docker/volumes/mitigator_clickhouse/_data/shadow/{1,increment.txt}

Восстановление из резервной копии

Команды приведены исходя из того, что файлы с резервной копией находятся в рабочем каталоге /srv/mitigator, однако местоположение файлов может быть любым:

  • на удаленном сервере;
  • на USB-накопителе;
  • в любом каталоге системы.

В этом случае в командах должен быть указан полный путь к файлам резервной копии.

Восстановление данных кластера

Выполняется на сервере, хранящем базу данных (primary, если настроена репликация).

  1. Остановить Mitigator:

    docker-compose down
    
  2. Удалить существующую базу:

    docker volume rm mitigator_postgres
    
  3. Запустить Postgres:

    docker-compose up -d postgres && docker-compose logs -f postgres
    
  4. Дождаться сообщения database system is ready to accept connections, нажать Ctrl+C.

  5. Перенести бэкап в контейнер и восстановить данные:

    docker cp backup.sql mitigator_postgres_1:/tmp
    docker-compose exec postgres sh -c 'psql mitigator </tmp/backup.sql >/tmp/restore.log'
    

Восстановление данных экземпляра

Выполняется на каждом экземпляре.

  1. Развернуть volume own_id:

    tar -xzf backup_ownid.tgz -C /var/lib/docker/volumes/mitigator_own_id/ .
    
  2. Запустить Mitigator:

    docker-compose up -d
    

Если на этапе восстановления появились ошибки, технической поддержке будет нужен их текст и файл restore.log, который можно забрать из контейнера так:

docker cp mitigator_postgres_1:/tmp/restore.log .

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

Выполняется на сервере, хранящем метрики.

  1. Задать тома. Совпадает с именем каталога установки, то есть mitigator. Другие значения могут быть нужны только в специальных случаях.

    VOLUME=mitigator_clickhouse
    
  2. Запустить ClickHouse:

    docker-compose up -d clickhouse && docker-compose logs -f clickhouse
    
  3. Дождаться сообщения /entrypoint.sh: running /docker-entrypoint-initdb.d/03-create-graphite_tagged-table.sql, нажать Ctrl+C.

  4. Распаковать архив metrics.tgz в том контейнера:

    mkdir -p /var/lib/docker/volumes/${VOLUME}/_data/backup
    tar -xzf metrics.tgz -C /var/lib/docker/volumes/${VOLUME}/_data/backup
    
  5. Переместить бэкап в системные директории Clickhouse внутри контейнера:

    docker-compose exec clickhouse bash -c 'cd /var/lib/clickhouse/backup; for dir in *; do cp -r $dir/* /var/lib/clickhouse/data/default/$dir/detached; done'
    
  6. Выдать права пользователю внутри контейнера:

    docker-compose exec clickhouse chown -R clickhouse:clickhouse /var/lib/clickhouse/data/default
    
  7. Восстановить данные:

    docker-compose exec clickhouse clickhouse-client --format=TSVRaw -q"select 'ALTER TABLE ' || database || '.' || table || ' ATTACH PARTITION ID \'' || partition_id || '\';\n' from system.detached_parts group by database, table, partition_id order by database, table, partition_id;" | docker-compose exec -T clickhouse clickhouse-client -nm