Каким образом достигается отказоустойчивость на одном IP?
Существует сервис, куда клиенты коннектятся по TCP протоколу и отправляют сообщения. TCP соединения долгоиграющие. Большинство клиентов умеют автоматически переподключаться в случае обрыва коннекта, но почти никто не умеет автоматически переключаться на резервный IP адрес в случае тотальной недоступности основного сервера. Клиенты просят чтобы я самостоятельно их переключал, но так как резервный сервер находится в физически другом месте, то я не могу просто взять и перенести IP между ДЦ.
Каким образом обеспечить отказоустойчивость сервиса, используя только один внешний IP адрес? Проблема, которую я хочу решить - перенос всего трафика из одного ДЦ в другой без изменения IP адреса для клиентов в случае полной недоступности ДЦ.
Пример:
ДЦ1 где-то у себя накосячил и сеть легла. Доступность сервера просела и клиента стали получать connection reset, connection timeout. Мне необходимо каким-то образом перенести ip адрес в ДЦ2, а потом вернуть обратно, когда проблемы в ДЦ1 будут устранены.
В поисках информации я дошел до BGP и его фишки с анонсированием префикса из двух разных мест, но с разными весами. То есть при коннекте будет выбран маршрут с наибольшим весом. Но не всегда. Часть клиентов всё же будет попадать на резервный сервер, чего бы мне не хотелось.
Какие ещё есть варианты?
UPD
Прямо сейчас применяется вариант с доменными именами и коротким TTL. Но не всем клиентам помогает.
А нужен именно IP, или можно домен?
Если домен, то можно ведь менять IP на уровне DNS, т.е. клиент будет получать тот IP, на который ссылается A запись.
Посмотрите zilore.com, например, там же есть возможность автоматического мониторинга и смены IP в случае недоступности основного сервера.