Я создаю рой докеров с 3 менеджерами и 2 рабочими. Служба работает в рое и предоставляет порт 80. Таким образом, мы можем задействовать службу с любым IP-адресом узла. Но что, если узел выйдет из строя? Было бы очень обременительно ожидать, что пользователь всегда будет пробовать IP другого узла.
Итак, какова обычная практика управления этой внешней точкой доступа? Я могу подумать о настройке записи DNS для возврата IP-адресов нескольких узлов. Настроить еще один балансировщик нагрузки впереди кажется излишним.
Я вижу здесь несколько вариантов:
1) внешний балансировщик нагрузки.
Если вы работаете на AWS, GCE или других облачных провайдерах, вы можете использовать балансировщик нагрузки как услугу, которую предоставляют эти компании. Ваши DNS-имена будут указывать на IP-адрес балансировщика нагрузки, а ваш балансировщик нагрузки перенаправляет трафик на ваши узлы.
Плюсы: у вас всегда высокая доступность (балансировщик нагрузки избыточен, вам нужно как минимум 2 узла, и все готово). Вы также получаете автоматическое переключение при отказе (если узел выходит из строя, запросы перенаправляются на другие узлы вашего кластера).
МИНУСЫ: балансировщики нагрузки стоят денег
2) балансировщик нагрузки «сделай сам».
Вы можете запустить другой сервер с помощью haproxy, nginx или любой другой прокси-службы, которая запускает для вас службу балансировки нагрузки. DNS будет указывать на прокси-сервер (который на данный момент только один) и перенаправляет на ваши узлы.
ЗА: ограниченная дополнительная стоимость (прокси может быть даже одним из узлов вашего кластера).
МИНУСЫ: вам нужно настроить всю инфраструктуру (переключение при отказе, обнаружение узлов, и это лишь две вещи, о которых вам следует позаботиться). Вы теряете высокую доступность (пока вы не сделаете свой прокси-сервер избыточным, но я упрощаю)
3) несколько записей DNS.
Вы можете установить, как вы предложили, несколько IP-адресов в своих записях DNS. В этом случае клиент подключится к случайному узлу в вашем кластере.
ЗА: бесплатно
МИНУСЫ: если узел выходит из строя, клиенты все равно будут пытаться подключиться к нему, пока вы не удалите его из своего DNS (а это требует времени из-за TTL).
Если у кого-то есть другие идеи, я рад слышать