У нас есть приложение, развернутое на виртуальных машинах Azure IaaS, обслуживаемых IIS. Чтобы установить обновления, нам нужно вывести каждую машину из балансировщика нагрузки одну за другой. Перед переходом на Azure мы использовали Microsoft NLB, который имеет функцию DRAIN STOP узла - не отправляя новые подключения, а оставляя существующие подключения открытыми до их завершения. Как добиться того же с помощью Azure LB?
Рекомендуемый способ сделать это - иметь настраиваемую проверку работоспособности в наборе с балансировкой нагрузки. Например, у вас может быть простой healthcheck.html на каждой из ваших виртуальных машин (например, в wwwroot) и направьте зонд из набора с балансировкой нагрузки на эту страницу. Пока зонд может получить эту страницу (HTTP 200), балансировщик нагрузки Azure будет продолжать отправлять запросы пользователей на виртуальную машину.
Когда вам нужно обновить виртуальную машину, вы можете просто переименовать healthcheck.html на другое имя, например _healthcheck.html. Это приведет к тому, что зонд начнет получать ошибки HTTP 404 и выведет этот компьютер из режима ротации с балансировкой нагрузки, поскольку он не получает HTTP 200. Существующие подключения будут продолжать обслуживаться, но LB Azure перестанет отправлять новый запросы к ВМ.
После того, как ваши обновления на виртуальной машине были завершены, переименуйте _healthcheck.html вернуться к healthcheck.html. Зонд Azure LB начнет получать ответы HTTP 200 и в результате снова начнет отправлять запросы к этой виртуальной машине.
Повторите это для каждой виртуальной машины в наборе с балансировкой нагрузки.
В их документация, Microsoft рекомендует использовать группу безопасности для явной блокировки проверки работоспособности. Все пробы работоспособности Azure Load Balancer придет с 168.63.129.16.
Примером может служить правило входящей сети безопасности сети, чтобы запретить 168.63.129.16 назначению сетевого адаптера виртуальной машины, который вы хотите удалить из пула.