У меня есть кластер MongoDB, развернутый в Azure. Обычно кластер MongoDB имеет по крайней мере пару экземпляров маршрутизатора mongo (mongos), к которым должно подключаться приложение (приложение также размещается в лазурном).
Я хочу «отработать отказ» и сбалансировать трафик от приложения к экземплярам mongodb. Я имею в виду, что хочу подключить свое приложение к одному экземпляру, а в случае сбоя (и только в случае сбоя) к другому. Я не хочу, чтобы мой трафик был сбалансирован с помощью циклического перебора:
mongorouter1.myinternaldomain.dom:27017
: Это всегда должна быть конечная точкаmongorouter2.myinternaldomain.dom:27017
: Это должна быть конечная точка, только если первая выходит из строя.mongorouter3.myinternaldomain.dom:27017
: Это должна быть конечная точка, только если обе предыдущие не работают.Я вижу, что такими вещами можно управлять с помощью диспетчера трафика или ILB (внутренней балансировки нагрузки) в Azure. Но у меня проблема, потому что, насколько я понимаю, балансировка переключения при отказе доступна только с диспетчером трафика, а ILB допускает только циклический перебор.
Поскольку мое приложение также находится в Azure, я не хочу открывать для общественности порты mongodb, поэтому я понимаю, что не могу использовать диспетчер трафика, который является службой, позволяющей балансировать нагрузку при отказе.
Как правильно это реализовать?
Единственный способ иметь программный балансировщик нагрузки с отработкой отказа в Azure - использовать диспетчер трафика. Вы можете установить ACL, чтобы только Ваше собственное приложение могло подключаться к БД на указанной конечной точке. Или вы можете настроить аварийное переключение в своем приложении - без балансировщика нагрузки, потому что вам не нужна балансировка нагрузки (просто аварийное переключение).