Резервное копирование и восстановление данных активности
В системе Proceset можно настроить резервное копирование данных активности, собранной агентом мониторинга. На каждой ноде резервная копия создается сразу для всех годовых баз активности.
Как работает резервное копирование
Резервное копирование запускается каждую ночь в 00:00 на каждой ноде кластера мониторинга и создает копию всех внутренних годовых баз данных активности и данных monitoring_raw_data. Копия хранится локально на той же ноде, без архивации.
Точка восстановления — последняя успешная резервная копия. Промежуточных точек нет: при аварии возможна потеря данных за период до 24 часов, прошедших с этого момента.
Резервная копия занимает примерно столько же места, сколько сами данные активности: на нагруженных нодах это могут быть сотни Гб. Включайте резервное копирование только там, где для копии есть свободное место на диске.
Первая резервная копия после включения функции может создаваться десятки минут. На это время сервер отвечает агентам мониторинга так же, как в сервисном режиме — агенты сохраняют собранные данные локально и повторяют отправку позже, потери данных не происходит.
По умолчанию каталог для резервных копий данных активности — backup относительно рабочего каталога (dataDir) ноды. Это то же значение по умолчанию, что и у резервных копий встроенной файловой базы данных (C:/ProgramData/Infomaximum/backup на Windows). Если хотя бы один из путей переопределен, каталоги могут не совпадать. Файлы мониторинга (годовые базы активности, monitoring_raw_data, backup-manifest.json) хранятся в собственных подкаталогах и не пересекаются с файлами резервной копии встроенной файловой базы данных.
Настройка резервного копирования
Функция отключена по умолчанию. Основные параметры задаются в конфигурационном файле com.infomaximum.subsystem.monitoring.json:
| Параметр | По умолчанию | Описание |
|---|---|---|
activity_backup_enabled | false | Включает резервное копирование: планирует ночную задачу на всех нодах кластера мониторинга |
activity_backup_path | "backup" | Каталог для резервных копий. Относительный путь разрешается относительно рабочего каталога (dataDir) каждой ноды |
activity_backup_watchdog_seconds | 7200 | Порог предупреждения о слишком долгом резервном копировании — 7200 секунд (2 часа). При превышении порога фиксируется только предупреждение, само копирование не прерывается |
Чтобы включить резервное копирование:
- В файле
com.infomaximum.subsystem.monitoring.jsonукажитеactivity_backup_enabled: true. При необходимости задайтеactivity_backup_pathиactivity_backup_watchdog_seconds. - Перезапустите контейнер ноды. Настройки применяются на той ноде, где вы их изменили, и автоматически передаются на остальные ноды кластера мониторинга — их отдельно перезапускать не нужно.
Если на конкретной ноде копию нужно сохранять по другому пути, переопределите его локально — необязательный параметр backup_path в файле com.infomaximum.subsystem.monitoringhandler.json этой ноды. После изменения перезапустите контейнер этой ноды.
Итоговый путь для копии определяется в таком порядке:
- Локальный параметр
backup_pathноды. - Параметр
activity_backup_pathиз общих настроек. - Каталог
backupв рабочем каталоге ноды — если ни один из параметров не задан.
Не изменяйте вручную файл backup-manifest.json в каталоге резервных копий и файл monitoring_activity_registry.json в каталоге баз данных. Манифест подтверждает целостность копии. Реестр восстанавливается автоматически при следующем запуске контейнера ноды — если он поврежден, удалите файл полностью, система пересоздаст его сама.
Чтобы отключить резервное копирование, укажите activity_backup_enabled: false и перезапустите контейнер ноды. Ночная задача останавливается, но уже созданные копии на диске не удаляются.
Ручной запуск резервного копирования
Резервное копирование и восстановление выполняются через GraphQL и требуют привилегии Параметры мониторинга: операция чтения (R) — для запросов статусов, операция изменения (W) — для запуска резервного копирования и восстановления.
Чтобы запустить резервное копирование вручную, выполните запрос:
mutation {
monitoring_backup {
run(shard_ids: [1, 2]) {
shard_id
state
guid
}
}
}
Если параметр shard_ids не указан, копирование запускается на всех нодах кластера мониторинга.
| Поле | Определение |
|---|---|
shard_id | Идентификатор ноды кластера мониторинга |
state | Статус запуска на этой ноде — RUNNING, если копирование запущено |
guid | Идентификатор запущенной операции |
Вызов неблокирующий: нода запускает копирование в фоне и сразу возвращает статус. Повторный вызов на ноде, где копирование уже идет, возвращает тот же guid — повторно копирование не запускается.
Чтобы проверить статус копирования по всем нодам, выполните запрос:
query {
monitoring_backup {
statuses {
shard_id
state
guid
started
finished
total_size_bytes
error_message
}
}
}
| Поле | Определение |
|---|---|
shard_id | Идентификатор ноды кластера мониторинга |
state | Текущий статус: IDLE — нет активной операции, RUNNING — выполняется резервное копирование, SUCCESS — резервное копирование завершено, RESTORING — выполняется восстановление, RESTORED — восстановление завершено, ERROR — операция завершилась ошибкой, или UNAVAILABLE, если нода недоступна |
guid | Идентификатор операции |
started, finished | Время начала и завершения операции |
total_size_bytes | Размер созданной копии в байтах |
error_message | Текст ошибки, если state — ERROR |
Восстановление данных
Восстановление доступно только при включенном activity_backup_enabled. Если резервное копирование выключено, запрос на восстановление отклоняется с ошибкой monitoring_backup_disabled — сначала включите параметр.
Восстановление — операция, которую администратор запускает вручную и контролирует до конца.
- Запустите восстановление на нужных нодах:
Параметр
mutation { monitoring_backup { restore(shard_ids: [1, 2]) { shard_id state error_message } } }shard_idsобязателен — восстановление выполняется только для указанных нод. Вызов неблокирующий. - Дождитесь статуса
RESTOREDдля каждой восстанавливаемой ноды — проверьте его запросом состояния. Пока восстановление не завершено, статус —RESTORING. СтатусRESTOREDсохраняется даже после перезапуска ноды. После восстановления нода сразу принимает и обрабатывает новую активность. Если восстановление завершилось ошибкой, повторный запуск того же запросаrestoreна этой ноде доводит операцию до конца — начинать заново не нужно. - Перед следующим шагом рекомендуется сделать собственную копию затронутых таблиц ClickHouse (
monitoring_activity,monitoring_agent_inspector_log) — например, средствами ClickHouse скопировать или переименовать таблицы. Это решение и ответственность администратора. - Получите команды очистки ClickHouse:
Для каждой восстановленной ноды запрос возвращает готовые команды удаления строк, которые в ClickHouse оказались «из будущего» относительно точки восстановления. Запрос только формирует команды — система их не выполняет.
query { monitoring_backup { clickhouse_cleanup_queries(shard_ids: [1, 2]) { shard_id queries } } } - Выполните полученные команды в ClickHouse самостоятельно. До этого шага строки «из будущего» видны в отчетах, а новая активность в базе Proceset накапливается без синхронизации с ClickHouse.
- Проверьте, что синхронизация с ClickHouse догнала базу Proceset:
Дождитесь, когда
query { monitoring_diagnostics { comparison_max_row_number { node_id max_rocks_id max_ch_id } } }max_rocks_idиmax_ch_idсовпадут по восстановленным нодам. После выполнения команд из предыдущего шага синхронизация сама доливает недостающие данные, без дублей и пропусков.
Пока команды очистки ClickHouse не выполнены, ночное и ручное резервное копирование на восстановленной ноде пропускаются — это защита от потери границы восстановления. Выполните шаги очистки как можно скорее после восстановления. Как только синхронизация догонит базу, при следующем успешном копировании нода автоматически вернется в обычный режим, без подтверждения администратором.
Возможные ошибки
| Код ошибки | Когда возникает |
|---|---|
monitoring_backup_disabled | Резервное копирование или восстановление запущено при activity_backup_enabled: false |
monitoring_restore_shard_mismatch | Восстановление запущено на ноду, идентификатор которой не совпадает с идентификатором ноды в манифесте копии |
Была ли статья полезна?