Условие
Представьте, что у вас есть два сервера, на которых расположен один и тот же сервис. Этот сервис имеет один IP-адрес. Есть master-нода и standby-нода.
Вам нужно защитить сервис на случай падения сервера. Конечно, можно было бы просто держать наготове резервную площадку с заранее развернутой такой же конфигурацией и с таким же IP-адресом — включать ее после падения основной площадки. Но в этом случае требуется вмешательство администратора, а это влияет на даунтайм сервиса.
Гораздо удобнее иметь обе включенные площадки в один момент времени и без перерыва переключать трафик с одной площадки на другую в случае аварии.
Задача
Реализуйте схему «горячего» резерва, то есть без выключения standby-ноды.
Подсказка: используйте в этой схеме протокол динамической маршрутизации.
Решение
Необходимо с каждой ноды построить BGP-сессию с роутером и на standby-ноде добавить атрибут для BGP-сессии для ухудшения маршрута. Например, сделать бОльшую метрику (MED) или увеличить AS-Path, то есть воспользоваться AS-Path Prepend. Тем самым в один момент обе ноды будут анонсировать на роутер один и тот же префикс. Из-за ухудшенного маршрута, полученного роутером со standby-ноды, активным на роутере будет лишь один маршрут, где в качестве next-hop является master-нода. При падении master-ноды BGP-сессия перейдет в неактивное состояние, анонсирование префикса прекратится и активным на роутере станет маршрут, где в качестве next-hop выступает standby-нода. Причем данное переключение маршрута на standby-ноду будет выполнено без перерыва в связности.
Это не единственное решение задачи, но оно является самым отказоустойчивым и понятным.