我们有一个应用程序部署到 Azure IaaS VM,由 IIS 提供服务。为了安装更新,我们需要逐个将每台机器从负载均衡器中取出。在迁移到 Azure 之前,我们使用 Microsoft NLB,它具有 DRAIN STOP 节点的功能 - 通过不发送新连接,但保持现有连接打开直到它们完成。我们如何使用 Azure LB 实现同样的功能?
答案1
建议在负载均衡集中使用自定义健康探测。例如,你可以使用一个简单的健康检查.html在每个虚拟机上(例如在 wwwroot 中)创建一个页面,并将来自负载平衡集的探测器定向到此页面。只要探测器可以检索该页面(HTTP 200),Azure 负载平衡器就会继续向虚拟机发送用户请求。
当你需要更新虚拟机时,你可以简单地重命名健康检查.html改为不同的名字,例如_健康检查.html。这将导致探测器开始接收 HTTP 404 错误,并将该机器从负载平衡轮换中移除,因为它没有获得 HTTP 200。现有连接将继续提供服务,但 Azure LB 将停止发送新的向虚拟机发送请求。
虚拟机更新完成后,重命名_健康检查.html回到健康检查.html。Azure LB 探测将开始获取 HTTP 200 响应,并因此再次开始向该 VM 发送请求。
对负载平衡集中的每个虚拟机重复此操作。
答案2
在他们的文档,Microsoft 建议使用安全组明确阻止健康探测。所有 Azure 负载均衡器健康探测将来自 168.63.129.16。
一个例子是使用传入 NSG 规则拒绝 168.63.129.16 到要从池中删除的 VM NIC 的目标。