Назначение механизма резервирования
Быстрый старт
Как работает резервирование
Проблема Split brain
Внешнее управление переключением
Требования к серверам и сети
Что копируется на Резерв
Процедуры обслуживания и переключения
Диагностика и устранение неполадок
Механизм рассчитан на один сценарий: быстро восстановить работу системы, когда основной сервер полностью вышел из строя. Это отказ оборудования или дисков, потеря площадки, пожар. Резервный сервер заранее держит копию данных и настроек основного. Когда основной пропадает, резервный сервер сам запускает сервисы, и система продолжает работать на нём через заданное время. Восстанавливать систему из архива и настраивать её вручную не нужно.
Далее основной сервер называется Основной, резервный — Резерв. Механизм состоит из двух сервисов:
Включение backupserver безопасно для Основного. Сервис только читает данные и ничего на Основном не меняет: команд записи у него нет. Временные копии больших файлов он хранит в своём каталоге
services/backupserver/temp. Единственное влияние на Основной — нагрузка на диск и процессор при чтении файлов во время синхронизации.
Механизм рассчитан на случай полного отказа Основного сервера. Резерв считает Основной вышедшим из строя, если нет связи с сервисом
backupserver. Отличить отказ самого Основного от потери связи между серверами Резерв не может. Поэтому при частичных сбоях Резерв может запуститься, даже если Основной продолжает работать. К таким ситуациям относятся обрыв связи, остановка толькоbackupserverили перезагрузка Основного дольше окна переключения. В результате может возникнуть split brain — одновременная работа обоих серверов. Если решение о переключении может принимать внешняя система, например с арбитром, используйте внешнее управление.
Перед включением
Включение на Основном
Включение на Резерве
Проверка
Отключение резервирования
Команды управления системой выполняются из каталога установки, обычно /pult_server. Подробнее — в разделе документации «Управление сервисами».
| Команда | Действие |
|---|---|
./start |
запустить сервисы |
./start -<сервис> |
запустить все сервисы, кроме указанного |
./stop all |
остановить все сервисы |
./stop -<сервис> |
остановить все сервисы, кроме указанного |
Настройки каждого сервиса хранятся в файле services/<сервис>/config.cfg.
services/backupserver/config.cfg задайте secret — длинную случайную строку — и enabled=1../start.services/backupserver/logs. Строки после configs processed: показывают, что и как будет копироваться (см. «Диагностика»).| Параметр | По умолчанию | Описание |
|---|---|---|
enabled |
0 |
1 — сервис включён. |
secret |
случайная строка | Секрет, который должен предъявить Резерв. Задайте его явно. Пустое значение отключает проверку, и данные получит любой, кто подключится с разрешённого адреса. Так делать не рекомендуется. |
source_dir |
../.. |
Резервируемый каталог — каталог установки системы (обычно /pult_server). Относительный путь отсчитывается от каталога исполняемого файла сервиса (services/backupserver); можно указать абсолютный путь. |
chunk_size |
1048576 |
Наибольший объём данных в одном ответе Резерву, байт. На медленном канале уменьшите. |
allowed_ip |
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 |
С каких адресов разрешены подключения. Список через запятую; допускаются подсети и подстановочные символы: 192.168.*.* или *. |
| порт сервиса | 11317 |
Стандартный сетевой параметр сервиса. Если меняете его, укажите тот же порт в server_port на Резерве. |
services/backupclient/config.cfg задайте server_host, server_secret (то же значение, что secret на Основном), окно переключения и enabled=1. Сервис backupserver на Резерве должен быть выключен (enabled=0)../start.| Параметр | По умолчанию | Описание |
|---|---|---|
enabled |
0 |
1 — сервис включён. |
server_host |
192.168.0.100 |
Адрес Основного. Он же служит ссылкой на Основной в веб-интерфейсе клиента резервирования. |
server_port |
11317 |
Порт backupserver на Основном. |
server_secret |
XXXX… (32 символа) |
Секрет — тот же, что secret на Основном. Значение по умолчанию заведомо не совпадает: Резерв останется в резервном режиме, а синхронизация выполняться не будет. |
server_ssl_enabled |
1 |
TLS на соединении с Основным. Должен совпадать с настройкой backupserver. |
server_checkcert |
0 |
Проверять ли сертификат backupserver. При 0 канал зашифрован, но подлинность Основного не проверяется. Если серверы связаны не по выделенной сети, включите проверку; сертификат backupserver при этом должен её проходить. |
server_timeout |
10000 |
Таймаут связи с Основным, мс. |
server_reconnect_interval |
1000 |
Интервал между попытками подключения, мс. |
server_reconnect_attempts |
20 |
Сколько попыток подключения допускается до перехода в рабочий режим. Вместе с интервалом задаёт окно переключения. При внешнем управлении не используется. |
brand_name, brand_link |
SCADA Пульт.Онлайн, https://pult.online |
Название и ссылка в веб-интерфейсе клиента резервирования. |
external_control_enabled, external_control_command_file, external_control_status_file |
0, ../../backupclient_command, ../../backupclient_status |
Внешнее управление: режим Резерва задаёт внешняя система, а не связь с Основным. См. «Внешнее управление». |
backup_dir |
../.. |
Куда копировать — каталог установки системы на Резерве (обычно /pult_server). Путь задаётся так же, как source_dir. Содержимое каталога приводится к копии Основного. |
backup_period |
* * * * * * |
Как часто запускать синхронизацию. Принимает cron-строку (с точностью до секунд или до минут) либо число — интервал в секундах. По умолчанию — каждую секунду. Новый проход не начинается, пока не закончился предыдущий. |
server_timeout, server_reconnect_interval и server_reconnect_attempts — не больше 65535.
services/backupclient/logs на Резерве. Должны появиться строки authorization: ok, switch to sync mode, затем list loaded: … и all tasks complete.authorization rejected — секреты не совпадают.switch to work mode — Резерв не достучался до Основного и запустил сервисы. Исправьте связь: после её восстановления Резерв сам вернётся в резервный режим. Затем выполните действия из раздела «После split brain».0 ERR.Отключать резервирование нужно в правильном порядке: сначала Резерв, потом Основной. Если сначала отключить backupserver, Резерв решит, что Основной пропал, и запустит сервисы.
Временно, например на время работ на Основном:
./stop all../start.Насовсем:
./stop all, затем enabled=0 в services/backupclient/config.cfg. Система запускается автоматически при загрузке ОС. Если после этого её запустить (./start или перезагрузкой), сервисы Резерва заработают как второй Основной. Поэтому, если машина больше не нужна, удалите с неё дистрибутив.enabled=0 в services/backupserver/config.cfg. Работающий backupserver Основному не мешает. Он перестанет запускаться после следующего перезапуска системы.Не останавливайте на Резерве только сервис backupclient. При его остановке сервисы Резерва запускаются (см. «Переходы между режимами»).
Режимы Резерва
Переходы между режимами
Окно переключения
Чего механизм не замечает
Веб-интерфейс клиента резервирования
Обновление системы
Резерв — полноценная установка системы. Её каталог (backup_dir) поддерживается копией каталога Основного (source_dir). backupclient приводит его к состоянию Основного, включая настройки и файлы всех сервисов, и удаляет то, чего на Основном нет. Исключения — служебные файлы, а также собственные настройки и логи backupclient и backupserver (см. «Что не копируется»).
Резервный режим — Резерв пассивен:
reserve.tmp. Сервисы переходят в режим ожидания.running.tmp.backup_period выполняется синхронизация.Рабочий режим — Резерв работает вместо Основного:
reserve.tmp, и сервисы запускаются.По умолчанию режим выбирает сам backupclient по связи с Основным — это автоматическое управление, его описывает таблица ниже. При внешнем управлении режим задаёт внешняя система, и из таблицы действует только последняя строка.
| Событие | Результат |
|---|---|
| backupserver Основного принял секрет | резервный режим, идёт синхронизация |
| backupserver Основного отказал по секрету | резервный режим, синхронизация не выполняется («Клиент не авторизован!»). Повторной попытки нет до перезапуска одного из сервисов |
| Соединение есть, но авторизация не прошла по другой причине: таймаут, на порту не backupserver, временная блокировка после неверных секретов | режим не меняется, авторизация повторяется каждые 30 с |
Нет связи server_reconnect_attempts попыток подряд |
рабочий режим |
| В рабочем режиме backupserver Основного снова ответил | резервный режим: сервисы Резерва останавливаются, копия приводится к состоянию Основного |
| Сервис backupclient остановлен, в том числе для перезапуска | флаги reserve.tmp снимаются, сервисы Резерва запускаются |
Любой ответ backupserver, даже отказ, считается признаком того, что Основной жив: два работающих сервера хуже временного отсутствия резервной копии. Поэтому Резерв с неверным секретом остаётся в резервном режиме, но не синхронизируется. За этим состоянием нужно следить.
При автоматическом управлении флаги reserve.tmp выставляются только после ответа Основного на авторизацию. При каждом запуске backupclient, в том числе после перезапуска, сервисы Резерва до этого ответа не удерживаются и могут ненадолго запуститься. Если при запуске Резерва Основной недоступен, Резерв перейдёт в рабочий режим примерно через (server_reconnect_attempts + 1) × server_reconnect_interval. Запускайте Резерв, только убедившись, что Основной работает и доступен. При внешнем управлении флаги выставляются сразу при запуске (см. «Отличия от автоматического управления»).
Отсчёт начинается, когда backupclient обнаружил потерю связи. Если сервис backupserver или ОС Основного останавливаются штатно, соединение закрывается сразу. Если хост или сеть пропали внезапно, обрыв обнаруживается по таймауту server_timeout. Затем backupclient каждые server_reconnect_interval пытается подключиться заново. После server_reconnect_attempts неудачных попыток он переходит в рабочий режим.
окно ≈ server_timeout + server_reconnect_attempts × server_reconnect_interval
По умолчанию окно составляет 20 секунд после закрытия соединения или около 30 секунд при внезапной пропаже Основного.
Окно должно быть больше самого долгого штатного перерыва связи с backupserver. Таких перерывов два:
Ориентиры: для виртуальной машины — около 1 минуты (server_reconnect_attempts = 60), для физического сервера — 3–5 минут (180–300). Минуты ожидания при полном отказе Основного сервера обходятся дешевле, чем ложное переключение при каждой перезагрузке.
При внешнем управлении окна нет: Резерв переключается только по команде.
Переключение зависит только от доступности backupserver. Если хост Основного жив и backupserver отвечает, Резерв остаётся в резервном режиме, даже когда сама система на Основном не работает. Например, остановился сервис server, переполнен диск, пропала связь с объектами. В таких случаях переключайтесь вручную (см. «Ручное переключение на Резерв»).
В резервном режиме по адресу Резерва открывается страница «Сервер в резерве». При внешнем управлении она открывается и тогда, когда первой команды ещё не было. Страница работает на тех же портах и с теми же сертификатами, что и веб-интерфейс системы, поэтому открывается только после остановки сервисов Резерва. На странице видны:
server_host, а также brand_name и brand_link;| Отображение | Значение |
|---|---|
12.5 MB/s \| 87% \| 3.2 GB \| 0 ERR |
связь есть: скорость передачи, доля синхронизированных данных, объём данных Основного, ошибки за проход |
Пауза вместо скорости |
данные сейчас не передаются (между проходами или передавать нечего) |
Клиент не авторизован! |
Основной отказал по секрету или авторизация ещё не прошла |
Нет связи. Запуск сервисов через: N |
автоматическое управление: связи с Основным нет; N — оставшиеся попытки, при интервале 1 с это примерно секунды |
Нет связи. Ожидание внешней команды... |
внешнее управление: связи с Основным нет; сервисы Резерва запустятся только по команде work |
Ожидание внешней команды |
внешнее управление: команды ещё не было, синхронизации нет. Основной принял секрет; команда sync запустит синхронизацию, work — сервисы Резерва |
Запуск сервисов внешней командой... |
внешнее управление: получена команда work, Резерв переходит в рабочий режим |
Подключение... |
браузер потерял связь с самой страницей |
Счётчик ошибок показывает ошибки последнего прохода. Новая ошибка видна сразу, а 0 ERR появляется только после прохода без ошибок. Разрыв связи ошибкой не считается. Подробности ошибок — только в логе backupclient: страница доступна без входа в систему, поэтому пути и тексты ошибок на ней не показываются.
Когда Резерв переходит в рабочий режим, открытая страница сама перезагрузится и покажет веб-интерфейс системы.
Если ссылка «Основной сервер» не открывается у пользователей, проверьте server_host. Возможно, серверы связаны по отдельному адресу, недоступному пользователям.
Файлы системы, включая исполняемые файлы, приходят на Резерв с Основного. Поэтому обновлять достаточно Основной: при следующем проходе обновление попадёт на Резерв. Если в проходе сменился исполняемый файл, backupclient в конце прохода завершается, и supervisor запускает его уже новой версией. В момент перезапуска сервисы Резерва ненадолго получают разрешение стартовать; новый backupclient после авторизации снова переводит их в режим ожидания.
При внешнем управлении новый backupclient выполняет команду из файла команд сразу при запуске, не дожидаясь авторизации. В файле состояния на время перезапуска появляется stopped, затем switching и sync.
Split brain — состояние, когда работают оба сервера. Оно наступает, если Резерв перестал видеть backupserver, а Основной продолжает работать. Причины:
allowed_ip, проверка сертификата.При внешнем управлении Резерв сам не переключается: split brain возникает, только если внешняя система даст команду work при работающем Основном.
Пока длится split brain:
Когда связь восстанавливается, Резерв сам возвращается в резервный режим (при внешнем управлении — по команде sync), останавливает сервисы и приводит копию к состоянию Основного. Данные Резерва за этот период на Основной не передаются:
Тренды и Журнал после split brain нужно перекачать (см. «После split brain»). Последствия управляющих действий Резерва механизм не отслеживает.
Как снизить риск:
Когда использовать
Включение
Файл команд
Файл состояния
Отличия от автоматического управления
Порядок переключения
По умолчанию backupclient сам решает, когда запускать сервисы Резерва: по пропаже связи с backupserver. Далее это называется автоматическим управлением. При внешнем управлении решение принимает внешняя система: скрипт, кластерный менеджер, система мониторинга или оператор. Она записывает команду в файл команд на Резерве, а backupclient сообщает о выполнении через файл состояния.
Автоматическое управление не отличает отказ Основного от потери связи между серверами (см. «Split brain»). Внешнее управление нужно, когда о переключении можно судить надёжнее, чем по связи двух серверов друг с другом. Например:
Внешнее управление само по себе split brain не исключает. Если команда work придёт при работающем Основном, будут работать оба сервера. Не допускать этого должна внешняя система.
Параметры задаются в services/backupclient/config.cfg на Резерве:
| Параметр | По умолчанию | Описание |
|---|---|---|
external_control_enabled |
0 |
1 — внешнее управление включено. |
external_control_command_file |
../../backupclient_command |
Файл команд. Путь задаётся так же, как backup_dir. По умолчанию — backupclient_command в каталоге установки. |
external_control_status_file |
../../backupclient_status |
Файл состояния. По умолчанию — backupclient_status в каталоге установки. Путь должен отличаться от пути файла команд, иначе файл состояния отключается. |
Порядок включения:
./stop all.sync: echo sync > /pult_server/backupclient_command.external_control_enabled=1, затем выполните ./start.external control enabled, пути файлов, external mode: sync, switch to sync mode. При запуске Основной обычно ещё не успевает ответить, поэтому строка выглядит как switch to sync mode (not authorized, no data); синхронизация начнётся после authorization: ok. Когда сервисы Резерва остановятся, в файле состояния появится sync.Где размещать файлы:
/tmp или /run. При каждом запуске backupclient выполняет записанную в файле команду, а без команды удерживает сервисы Резерва остановленными.services/....Файл содержит одно слово: sync или work. Регистр, пробелы и перевод строки не важны. backupclient читает файл при запуске, затем каждые 0,5 с и выполняет команду, когда содержимое файла изменилось.
| Команда | Действие |
|---|---|
sync |
Резервный режим. backupclient сразу выставляет флаги reserve.tmp, ждёт остановки сервисов Резерва и открывает веб-интерфейс клиента резервирования. Синхронизация идёт, когда есть связь с Основным и он принял секрет. |
work |
Рабочий режим. backupclient дожидается ответа на текущий запрос к Основному, прерывает проход синхронизации и снимает флаги reserve.tmp — сервисы Резерва запускаются. Связь с Основным при этом не проверяется. |
Любое другое содержимое, а также пустой, отсутствующий или нечитаемый файл режим не меняют: в лог пишется mode … kept. Поэтому удаление файла команд ничего не запускает и не останавливает.
Если при запуске backupclient в файле нет команды, сервисы Резерва удерживаются до её появления. Синхронизация не идёт, в файле состояния — none. Когда сервисы Резерва остановятся, открывается веб-интерфейс клиента резервирования с надписью «Ожидание внешней команды». Команда sync начинает синхронизацию, страница при этом остаётся открытой. Команда work закрывает страницу и запускает сервисы.
Команда sync после рабочего режима приводит копию к Основному. Данные, накопленные Резервом в рабочем режиме, на Основной не передаются: последствия те же, что после split brain. Если эти данные нужны, не возвращайте Резерв командой sync, а закрепите его в роли Основного (см. «После переключения»).
backupclient записывает в файл одно слово при каждой смене состояния. Запись атомарная: прочитать наполовину записанный файл нельзя.
| Состояние | Значение |
|---|---|
none |
Команды ещё не было. Сервисы Резерва удерживаются, синхронизации нет, веб-интерфейс клиента резервирования открыт. |
switching |
Переход по последней команде не закончен. Например, после sync ещё не остановились все сервисы Резерва. |
sync |
Резервный режим: все сервисы Резерва, кроме supervisor и backupclient, остановлены. Основной можно запускать. |
work |
Рабочий режим: флаги reserve.tmp сняты, сервисы Резерва запускаются. |
stopped |
backupclient остановлен, в том числе для перезапуска. Флаги reserve.tmp сняты: сервисы Резерва могут работать. |
Состояние sync ничего не говорит о связи с Основным и полноте копии: их показывают веб-интерфейс клиента резервирования и лог. Что сервисы Резерва в рабочем режиме действительно запустились, проверяйте по файлу services/server/running.tmp.
Если записать файл не удалось, backupclient пишет в лог error writing status file … и повторяет попытку.
server_reconnect_attempts и server_reconnect_interval на переход не влияют.reserve.tmp выставляются сразу при запуске backupclient, если в файле команд sync или команды нет. Сервисы Резерва не получают разрешения стартовать до ответа Основного, как при автоматическом управлении.reserve.tmp, и сервисы Резерва запускаются. В файл состояния при этом пишется stopped.Такой порядок не допускает одновременной работы серверов. Команды записываются в файл команд Резерва.
Переключение на Резерв:
./stop all на нём, выключение или отключение от сети. Если Основной недоступен, убедитесь, что он не вернётся сам.work.work в файле состояния.При плановом переключении на шаге 1 сначала выполните на Основном ./stop -backupserver и дождитесь конца прохода (all tasks complete в логе backupclient): так на Резерв уйдут последние данные. Затем остановите и backupserver.
Возврат Резерва в резервный режим:
sync.sync в файле состояния: сервисы Резерва остановлены../start.Перед возвратом учтите, что данные Резерва за время работы будут потеряны (см. «Файл команд»).
Плановые работы на Основном. Резерв сам не переключается, поэтому останавливать его на время работ не нужно.
source_dir на Резерв не попадут. Перенесите их внутрь каталога установки или поддерживайте на Резерве вручную по тем же путям./pult_server/services/server/running.tmp — признака работающего сервиса server. При split brain адрес может оказаться на обоих серверах.services/backupserver/temp нужно место под временные копии больших файлов и хранилищ значений.| Направление | Порт | Зачем |
|---|---|---|
| Резерв → Основной | TCP 11317 (настраивается), TLS | синхронизация |
| пользователи → Резерв | порты веб-интерфейса системы | веб-интерфейс клиента резервирования; работа системы после переключения |
Важно. Любая ошибка связи выглядит для Резерва как пропажа Основного и через окно переключения запускает систему на Резерве. Это относится к адресу, порту, межсетевому экрану,
allowed_ip, несовпадению настроек TLS и непрошедшей проверке сертификата. При внешнем управлении ошибка связи только останавливает синхронизацию.
Проход синхронизации
Данные
Что не копируется
Удаление на Резерве
Принудительная перекачка
data, в самом конце — логи сервисов.Ошибка с отдельным файлом не останавливает проход: файл повторится в следующем проходе. При обрыве связи проход прерывается; после переподключения следующий проход начинается заново.
Отставание. На Резерве есть только то, что успело передаться к моменту отказа. Каждый файл заменяется целиком и атомарно, поэтому недокачанных файлов на Резерве не бывает: остаётся предыдущая версия.
Нагрузка. В каждом проходе оба сервера читают и хэшируют все обычные файлы каталога установки, кроме трендов, Журнала и логов. При расписании по умолчанию это почти непрерывная работа. Если обычных файлов много и они большие, увеличьте backup_period. Цена — большее отставание Резерва.
| Данные | Как копируются |
|---|---|
| Тренды | Инкрементально: докачиваются только новые записи. Удаление старых записей на Основном (глубина хранения) повторяется на Резерве. |
| Журнал (действия операторов, тревоги, сбои и т. п.) | Инкрементально: передаются только новые записи. Старые записи, удалённые на Основном при очистке, удаляются и на Резерве. |
| Хранилища значений (kvdb): текущие значения виртуальных переменных, в том числе статусы тревожных переменных | При изменении копируются целиком, согласованным снимком. |
| Логи сервисов | Дописываются с конца. Если копия разошлась с Основным, лог перекачивается целиком. |
| Проекты, настройки, файлы системы и прочее | При изменении копируются целиком. Права доступа и даты изменения сохраняются. |
Эти пути не передаются с Основного и не удаляются на Резерве. Список встроен в backupserver, кроме последнего пункта.
time_correction.dat, services/*/running.tmp, services/*/reserve.tmp;services/server/cache, services/server/temp;services/supervisor/errors, logs, lock;config.cfg, config.default, logs, а у backupserver ещё и temp. Поэтому у Резерва остаются свои настройки резервирования;.tmp). Их исключает сам backupclient.Всё в каталоге установки Резерва, чего нет на Основном, удаляется, кроме исключений выше. Каждое удаление записывается в лог: delete <путь>.
source_dir на Основном по ошибке указывает на другой существующий каталог, Резерв удалит свою копию и станет зеркалом этого каталога. Если source_dir не существует, ничего не удаляется.Каталог нового сервиса, появившегося на Основном, получает на Резерве флаг reserve.tmp раньше, чем в него придут файлы. Поэтому новый сервис на Резерве не запустится.
В резервном режиме удалите копию на Резерве — следующий проход скачает её заново целиком. Базу Журнала удаляйте вместе с файлами -wal и -shm, если они есть.
Тренды и Журнал удаляйте, когда синхронизация по ним не идёт: если ответ придёт уже после удаления, новая копия начнётся не с начала. Чтобы проверить тренд, сравните после перекачки размер его файла на Резерве и на Основном: они должны совпасть.
Плановые работы на Основном
Ручное переключение на Резерв
После переключения
Новая пара серверов
Возврат ролей
Проверка переключения
После split brain
Процедуры этого раздела написаны для автоматического управления. При внешнем управлении Резерв переключают командами work и sync (см. «Порядок переключения»). Закрепление Резерва (enabled=0 в services/backupclient/config.cfg) и действия после split brain нужны и при внешнем управлении.
Если backupserver будет недоступен меньше окна переключения, ничего делать не нужно. Если дольше:
./stop all../start. В логе backupclient должны появиться authorization: ok и switch to sync mode.Не останавливайте на Резерве только backupclient: при его остановке сервисы Резерва запускаются.
Этот порядок нужен, когда backupserver отвечает, а система на Основном не работает, или когда переключение нужно сразу, без ожидания окна.
all tasks complete, синхронизация в веб-интерфейсе клиента — 100%../stop all, либо выключите Основной или отключите его от сети. Он не должен вернуться сам, иначе возникнет split brain../stop all, затем enabled=0 в services/backupclient/config.cfg, затем ./start. Сервисы Резерва запустятся сразу и уже не вернутся в резервный режим.Резерв в рабочем режиме: в логе backupclient есть switch to work mode.
./stop all, затем установите enabled=0 в services/backupclient/config.cfg, затем ./start. Сервисы перезапустятся за несколько секунд. Если этого не сделать, Резерв вернётся в резервный режим, как только по адресу server_host снова ответит backupserver (например, отремонтированный Основной включат в сеть). Тогда Резерв остановит сервисы и заменит данные, накопленные после переключения, устаревшими данными Основного. Если переключение выполнено вручную, этот шаг уже сделан.secret и enabled=1 в services/backupserver/config.cfg, затем выполните ./start. Сервис backupclient на нём должен быть выключен.enabled=0), настройте backupclient по разделу «Включение на Резерве». Каталог установки будет приведён к копии нового Основного, лишнее будет удалено.Если новый Резерв раньше был Основным, до первого ответа нового Основного его сервисы backupclient-ом не удерживаются. Они могут запуститься со старыми данными: начать опрос оборудования, отправить оповещения. Подключайте машину к сети, когда backupclient уже настроен. При необходимости заранее выключите на ней прикладные сервисы: их актуальные настройки придут с Основного, когда сервисы уже будут в режиме ожидания.
Этот порядок нужен, если Основным снова должна стать прежняя машина, а сейчас она работает Резервом с полной синхронизацией.
0 ERR../stop -backupserver. Будут остановлены все сервисы, кроме backupserver. Дождитесь ещё одного полного прохода (all tasks complete в логе Резерва) — так на Резерв уйдут последние данные../stop all. Резерв перейдёт в рабочий режим через окно переключения. Можно не ждать и переключить его вручную (шаг 3 раздела «Ручное переключение на Резерв»).Убедиться, что Резерв поднимет систему, можно только проверкой. Проведите её в окно обслуживания:
./stop all. Разрыва связи между серверами недостаточно: Основной продолжит работать, и возникнет split brain.switch to work mode, а страница «Сервер в резерве» сменится веб-интерфейсом системы. Проверьте опрос оборудования и оповещения../start. Резерв сам вернётся в резервный режим.Признак split brain: в логе backupclient за switch to work mode следует switch to sync mode, хотя Основной всё это время работал.
Логи
Сообщения лога backupclient
Коды ошибок
Частые ситуации
| Сервер | Лог |
|---|---|
| Резерв | services/backupclient/logs |
| Основной | services/backupserver/logs |
Логи этих сервисов пишутся по умолчанию и между серверами не копируются.
В логе backupserver после строки configs processed: перечислены правила вида - <тип> | <шаблон>. По ним видно, какие файлы копируются как тренды (trend), Журнал (journal), хранилища значений (kvdb) и логи (log), что исключено (noop) и какие ssl-файлы идут первыми (first). Если нужного пути там нет, скорее всего, он лежит вне source_dir. Изменения настроек других сервисов backupserver отслеживает сам, раз в секунду.
| Сообщение | Значение |
|---|---|
authorization: ok |
Основной принял секрет |
authorization rejected: … - check server_secret; no sync until restart |
неверный секрет: резервный режим, синхронизации нет |
error authorization: …, retry in 30 s |
авторизация не прошла не из-за секрета, повтор через 30 с |
switch to sync mode |
переход в резервный режим |
switch to sync mode (not authorized, no data) |
переход в резервный режим без синхронизации: Основной отказал по секрету. При внешнем управлении — также если Основной ещё не ответил на авторизацию (обычно при запуске backupclient); синхронизация начнётся после authorization: ok |
switch to work mode |
Резерв запустил сервисы |
external control enabled / external control disabled |
внешнее управление включено / выключено. При включении следом идут пути файлов: - command file: …, - status file: … |
external mode: work / external mode: sync |
принята команда из файла команд |
external command file: missing or unreadable, mode … kept |
файла команд нет или он не читается; режим не меняется |
external command file: no 'work' or 'sync' command, mode … kept |
в файле команд не work и не sync; режим не меняется |
no external command: reserve services blocked until 'work' or 'sync' |
при запуске команды нет: сервисы Резерва удерживаются до команды; после их остановки откроется веб-интерфейс клиента резервирования |
external control error: same control and status files! |
пути файлов команд и состояния совпадают, файл состояния отключён |
error writing status file <путь>: <ошибка> |
файл состояния не записан, повтор при следующей проверке |
open web-interface on http port N / https port N |
открыт веб-интерфейс клиента резервирования |
connection lost: N queued tasks dropped |
обрыв связи посреди прохода |
N queued tasks dropped |
внешнее управление: проход прерван обрывом связи или командой work |
configs list loaded: … |
получен предварительный список настроек |
list loaded: N items, extra N deleted, N updated, N updates in task (~N bytes) |
получен полный список: сколько удалено лишнего, обновлено сразу, поставлено в очередь, ориентировочный объём закачки |
delete <путь> |
удалён файл, которого нет на Основном |
upadted: <путь> |
обновлён файл (текст сообщения — как в логе) |
updated: <путь> (+N records) |
докачаны новые записи тренда или Журнала |
updated: <путь> (+N records, M old removed) |
Журнал: добавлено N записей, удалено M старых, удалённых на Основном |
updated: <путь> (+N bytes) / reloaded: <путь> (N bytes) |
лог дописан / перекачан целиком |
log <путь> differs from server, reloading |
лог на Резерве разошёлся с Основным, начата полная перекачка |
journal <путь>: last ids did not advance, stopped |
синхронизация Журнала остановлена из-за неожиданного состояния базы |
executable <путь> updated (… -> … bytes), restart |
исполняемый файл обновлён, backupclient перезапустится в конце прохода |
exit for restart with updated executable |
backupclient завершается для перезапуска новой версией |
self-update check disabled: … |
проверка обновления исполняемого файла отключена; после обновления перезапустите backupclient вручную |
time sync correction: X ±Y ms |
сверка времени с Основным |
error updating <путь>: <ошибка> |
файл не обновлён, повтор в следующем проходе |
error load list: … |
список не получен, ничего не удалено |
all tasks complete |
проход закончен |
Ошибки по отдельным файлам повторяются в следующем проходе сами. Если ошибка держится, ищите причину по таблице. Помимо кодов, в сообщениях бывают системные ошибки: нет места, нет прав и т. п.
| Код | Значение | Что делать |
|---|---|---|
| 5300 | Файл удалён на Основном между списком и запросом | Ничего: файл исчезнет с Резерва в следующем проходе |
| 5301, 5302 | Файл изменился во время чтения | Ничего, повторится |
| 5303 | Тренд занят очисткой | Ничего, повторится |
| 5304, 5305 | Ошибка чтения тренда на Основном | При повторении проверьте файл тренда на Основном |
| 5306 | Неверный секрет | Сверьте server_secret на Резерве и secret на Основном |
| 5307 | source_dir не существует |
Проверьте source_dir на Основном |
| 5308, 5309 | Запрос до авторизации или в первую секунду после запуска backupserver | Ничего, повторится |
| 5310, 5311, 5315 | Ошибка чтения базы Журнала на Основном, в том числе база занята | При повторении проверьте базу на Основном |
| 5312 | Прервана закачка большого файла (пауза больше 60 с, перезапуск backupserver) | Ничего, повторится |
| 5313 | Хранилище значений заблокировано или ещё не создано | При повторении проверьте сервис-владелец на Основном |
| 5314 | Не удалось создать временную копию на Основном | Проверьте место на диске Основного (services/backupserver/temp) |
| 5316 | Слишком много неверных секретов с этого адреса | Исправьте секрет и подождите |
| 5321, 5322, 5325 | Ошибка записи файла, тренда или лога на Резерве | Проверьте место на диске и права на Резерве |
| 5323 | Ошибка записи Журнала на Резерве (текст ошибки — в сообщении) | Проверьте место на диске; при повреждении базы удалите её на Резерве для перекачки |
| 5324 | Хранилище значений скачано не полностью | Ничего, повторится |
| 5326 | Лог изменился во время передачи | Ничего, повторится |
| 5327 | backupserver на Основном старой версии | Обновите систему на Основном |
| Симптом | Причина | Что делать |
|---|---|---|
«Клиент не авторизован!», в логе authorization rejected |
Секреты не совпадают | Задайте server_secret равным secret Основного |
| Резерв перешёл в рабочий режим при работающем Основном | Связь, межсетевой экран, адрес или порт, allowed_ip, несовпадение TLS, проверка сертификата, backupserver выключен; либо окно короче перерыва связи |
Устраните причину. Резерв сам вернётся в резервный режим, затем выполните «После split brain» |
Страница «Сервер в резерве» не открывается, в логе нет open web-interface |
Какой-то сервис Резерва не остановился, или ещё не пришли настройки сервиса server | Найдите работающие сервисы: ls /pult_server/services/*/running.tmp |
| Счётчик ошибок больше нуля | Ошибки в проходе | Найдите error updating в логе backupclient и сверьтесь с таблицей кодов |
| Нужный файл не попадает на Резерв | Файл вне source_dir или в списке исключений |
Проверьте список после configs processed: в логе backupserver |
| На Резерве пропадают файлы | Резерв зеркалирует Основной | Найдите строки delete в логе; не храните на Резерве своих файлов |
| Тренды или Журнал на Резерве отличаются от Основного | Был split brain или проверка переключения | Выполните «После split brain» |
| Резерв не переключился, хотя Основной пропал | Включено внешнее управление: переключает только команда work |
Проверьте внешнюю систему и файл команд |
Внешнее управление: команда записана, но режим не меняется, или сервисы Резерва стоят с none в файле состояния и «Ожиданием внешней команды» на странице |
Команда записана не в тот файл или в файле не work/sync (в логе mode … kept) |
Сверьте путь в логе backupclient (- command file: …) и содержимое файла |
Внешнее управление: после sync в файле состояния долго switching |
Какой-то сервис Резерва не останавливается | Найдите работающие сервисы: ls /pult_server/services/*/running.tmp |
| Внешнее управление: файл состояния не обновляется | Нет прав на запись или каталога, либо пути файлов команд и состояния совпадают | Найдите в логе error writing status file или same control and status files |