У меня есть кластер Docker Swarm, работающий на нескольких серверах (узлах). Docker swarm использует циклический перебор для обслуживания запросов к моим службам, и это работает независимо от того, какой сервер получает запрос.
Теперь мне интересно, как направить URL-адрес в эту настройку, чтобы она была высокодоступной.
Я использую Euro DNS (eurodns.com) и устанавливаю A-запись домена на несколько IP-адресов (серверы кластера Swarm).
В общем, кажется, что это нормально, поскольку DNS обслуживает его в циклическом режиме, и даже когда он кэшируется, узел, на который попадает, будет обслуживать его циклически из-за роя Docker.
Но что, если узел / сервер полностью выйдет из строя? Будет ли у меня по-прежнему высокая доступность?
Даже если бы мне пришлось использовать другой балансировщик нагрузки HAProxy или что-то подобное, кажется, всегда существует проблема, связанная с тем, что DNS должен обслуживать какой-то IP-адрес? То есть, если сервер HAProxy полностью выйдет из строя, будет такая же ситуация?
DNS с циклическим перебором должен работать для большинства сценариев, хотя будет задержка, когда запросы на один тайм-аут IP и клиент в конечном итоге попытается повторить следующий IP в списке. Что это не поможет, так это частичный сбой, когда хост отвечает на сетевые запросы, но приложение (например, докер) не отвечает или дает плохие ответы.
Балансировщик нагрузки улучшает это несколькими способами. Во-первых, он может опрашивать приложение на предмет его работоспособности с помощью настраиваемого зонда и отправлять запросы только работоспособным экземплярам. Это позволяет избежать сценария частичного отказа. Во-вторых, несколько балансировщиков нагрузки могут быть настроены с виртуальным IP-адресом, что позволяет резервному балансировщику нагрузки принимать запросы, не дожидаясь тайм-аутов DNS на стороне клиента.