Управление процессом отказоустойчивости#
Переключение трафика между серверами#
Примечание
Перед выполнением действий из статьи должен быть настроен keepalived по инструкции для настройки keepalived.
Внимание
Перед выполнением переключения необходимо убедиться, что репликация завершила синхронизацию данных.
Критерием готовности является значение поля Seconds_Behind_Master равное нулю, что указывает на отсутствие отставания реплики от мастера.
Для переключения трафика с основного сервера на резервный достаточно, чтобы VIP на некоторое время перестал получать сигналы от keepalived.
Как переключить трафик на резервный сервер.
Примечание
Выполнять эту команду НЕ требуется, если нет необходимости вручную переключать трафик с основного сервера на резервный.
Команда для перезапуска
keepalived, которая также переключает трафик с основного сервера на резервный (её необходимо выполнять на активном основном сервере):Внимание
Обратите внимание, что переключение домена со старого IP к IP VIP требует время. В этом случае не рекомендуется переключать или отключать
keepalivedна текущем мастер-сервере.На резервном сервере проверьте логи на наличие ошибок:
Данную команду рекомендуется использовать, если нужно вручную переключить трафик с активного основного сервера на резервный — например, для бесшовного обновления сервера.
Одновременно с переключением на основном сервере отключается
lsyncd— файлы с этого сервера перестают отправляться на резервный.На резервном сервере в этот момент
lsyncdзапустится автоматически. Уже новые файлы с резервного сервера отправляются на основной.После переключения рекомендуется проверить состояние серверов, чтобы убедиться что переключение сработало корректно:
Проверьте, что
VIP IPпереключился на резервный сервер:Проверьте, является ли основной и резервный сервера текущим активным сервером:
Примечание
В случае некорректного переключения рекомендуется проверить логи
lsyncd.На резервном сервере после переключения отключается процесс автоматической репликации баз данных с основного сервера.
Предупреждение
Репликация баз данных автоматически НЕ включается.
Если вы переключили трафик с основного сервера на резервный, то для запуска обратной репликации:
На основном сервере перейдите в директорию инсталлятора:
На основном сервере запустите репликацию с резервного сервера командой:
Предупреждение
Запуск скриптов старта репликации необходимо выполнять на тех серверах, которые НЕ являются активным.
В случае ошибки репликации рекомендуется использовать скрипты из раздела «Диагностика ошибок репликации».
После действий выше активным сервером является резервный сервер, а «горячим резервом» для него — бывший основной сервер.
Изменение конфигурационных файлов#
Изменения для конфигурационных файлов требуется вносить на основном и резервном серверах.
После внесения изменений необходимо выполнить на обоих серверах обновление с помощью скрипта:
Это также касается запуска скриптов, которые затрагивают конфигурационные файлы. Такие скрипты требуется запускать на основном и резервном серверах.
Рекомендуется выполнять обновление сначала на резервном сервере, затем на основном.
Процесс обновления серверной части приложения#
Для обновления серверной части приложения необходимо обновить установщик. Для этого на основном и резервном серверах перейдите в директорию ранее загруженного установщика и выполните команду:
После выполнения команды установщик будет готов к дальнейшему обновлению серверной части.
Редактирование конфигурационных файлов и последующий запуск скрипта для обновления необходимо выполнять на основном и резервном серверах.
Предупреждение
Обратите внимание: иногда процесс обновления включает дополнительные команды. Полная и актуальная инструкция приведена в разделе обновление серверной части приложения.
Первым делом обновите сервер, который является активным для использования пользователями, например, основной.
Проверить, является ли сервер основным, можно выполнив следующую команду:
Если скрипт показал, что сервер является master, значит это основной сервер.
На основном сервере выполните команду для запуска скрипта обновления серверной части:
После чего на резервном сервере проверьте статус репликации на отсутствие ошибок:
Если ошибок нет и в поле Seconds_Behind_Master отображается 0 секунд - репликация работает корректно. Если значение больше нуля - подождите указанное количество секунд и проверьте ещё раз
На резервном сервере убедитесь, что служба keepalived работает корректно:
Если статус active (running) — всё в порядке, можно продолжать.
Если служба остановлена или есть ошибки, их нужно устранить перед следующим шагом.
Предупреждение
Репликация на текущий момент с основного сервера на резервный должна быть включена, чтобы не было расхождения в данных баз данных между серверами.
На резервном сервере выполните обновление серверной части:
Проверьте статус репликации на резервном сервере после обновления:
При наличии ошибок репликации необходимо сбросить репликацию на резервном сервере и запустить ее заново:
Создание нового пространства#
Убедитесь, что на неактивном сервере включена репликация:
На неактивном сервере создайте директорию для временного хранения данных:
На активном сервере выполните команду, указав в параметре -dst IP-адрес резервного сервера и путь для временного сохранения данных в домашней директории пользователя на неактивном сервере:
После запуска скрипта дождитесь завершения его работы. В выводе будет указан id, назначенный новому пространству.
На неактивном сервере переместите созданные файлы из пользовательской директории в целевой каталог:
Запустите на неактивном сервере скрипт восстановления базы данных из бекапа:
В списке бекапов выберите бекап новой созданной компании, которая имеет название reserve_company_<id>. Дождитесь завершения работы скрипта.
Запустите на неактивном сервере скрипт восстановления команды:
Введите id команды, которую нужно восстановить. Дождитесь завершения работы скрипта.
На неактивном сервере запустите скрипт для старта репликации с основного на резервный сервер:
Выберите новое созданное пространство из списка. Дождитесь завершения работы скрипта.
Диагностика ошибок репликации#
Если репликация не завершается успешно, используйте команды ниже для получения данных об ошибке.
Проверьте значение лейблов на обоих серверах:
Ответ команды для настроенных на отказоустойчивость серверов должен выдать:
service_label: primary # лейбл для сервера primary
master_service_label: primary # лейбл сервера, который выступает активным для других
Для резервного сервера ответ будет выглядеть следующим образом:
service_label: reserve # лейбл для сервера reserve
master_service_label: primary # лейбл сервера, который выступает активным для других
Запустите следующую команду для проверки статуса репликации:
Скрипт выведет данные по статусу репликации, которые подскажут в чём может быть ошибка.
Далее рекомендуется использовать скрипт для сброса репликации:
После сброса требуется повторно запустить старт репликации:
Восстановление после сбоя основного сервера#
Рассмотрим ситуацию, когда у нас имеются:
основной сервер (активный), на который сейчас отправляется трафик;
резервный сервер, выступающий «горячим резервом».
Допустим, основной сервер по техническим неполадкам остановился. В этом случае весь трафик переключается на резервный сервер, который становится активным в этой ситуации.
На резервном сервере включается lsyncd для отправки новых файлов на основной сервер, когда тот станет исправным. Репликация на резервном сервере остановилась, на основном — сейчас недоступна.
Теперь, основной сервер снова стал доступным.
Важные моменты:
трафик на основной сервер автоматически НЕ переключается;
приложение
lsyncdна основном сервере автоматически НЕ включается;репликация баз данных на основном сервере автоматически НЕ включается.
Примечание
lsyncd на основном сервере так и должен оставаться выключенным. Он включится автоматически при переключении активного сервера на основной.
Теперь потребуется подтянуть все изменения в базах данных с резервного сервера на основной.
Для этого первым делом на основном сервере запустите скрипт для перезапуска настроек репликации:
После этого на основном сервере запустите скрипт для старта репликации:
Дождитесь завершения репликации.
Доступные проверки отказоустойчивости#
Чтобы узнать какой сервер сейчас выступает активным выполните команду:
Если команды выдаст результат - сервер, на котором она выполнялась, является активным.
Чтобы узнать состояние репликации на сервере, запустите скрипт:
Эти скрипты покажут информацию о статусе репликации в базах Pivot и команд.
Для просмотра статуса lsyncd используйте команду:
Примечание
На сервере, который на данный момент не является активным сервером, lsyncd должен быть выключен.
После переключения или отключения сервера также рекомендуется проверить переключение лейблов на серверах.
Для этого выполните команду:
Ответ команды для настроенных на отказоустойчивость серверах должен выдать:
service_label: primary # лейбл для сервера primary
master_service_label: primary # лейбл того сервера, что выступает активным для других
Для резервного сервера ответ будет выглядеть следующим образом:
service_label: reserve # лейбл для сервера reserve
master_service_label: primary # лейбл того сервера, что выступает активным для других
Если в ответе «master_service_label» для серверов выдаёт разный результат или пустую строку — значит что-то пошло не так.
В этом случае рекомендуется написать нам в пространстве поддержки On-premise, Telegram
или на почту support@getcompass.ru, чтобы получить индивидуальную поддержку.
Примечание
Напишите нам в пространстве поддержки On-premise, Telegram или на почту support@getcompass.ru, чтобы получить индивидуальную демонстрацию функционала и помощь по вопросам интеграции мессенджера в вашей компании.