将 Azure 负载均衡器用于 reboot/update 服务器,停机时间为零

Using Azure load balancer to reboot/update server with zero downtime

我有一个非常简单的设置:一个用于 http(s) 流量的 Azure 负载均衡器、两个应用程序服务器 运行 windows 和一个数据库,其中还包含会话数据。

目标是能够重新启动或更新服务器上的软件,没有一个请求被丢弃。问题是运行状况探测将每 5 秒进行一次测试,并且需要连续失败 2 次。这意味着当我终止应用程序服务器时,那 10 秒内的很多请求都会超时。我怎样才能避免这种情况?

我已经尝试 运行 不同端口上的运行状况探测,然后使用 windows 防火墙拒绝所有到不同端口的流量。负载均衡器会认为该节点上的应用程序已关闭,因此不再向该特定节点发送新流量。然而...... Azure LB 做基于散列的负载平衡。因此,已经流向现在被杀死的节点的流量将继续流向那里几秒钟!

首先,您能否提供更多详细信息:您的数据库负载是否也平衡?您是对该数据库执行读写操作还是只读操作?

供您参考,您可以更改 Azure Load Balancer 分配模式,详情请参阅本文:https://docs.microsoft.com/en-us/azure/load-balancer/load-balancer-distribution-mode

我建议您在负载平衡器级别禁用正在更新的服务器。在开始更新之前等待几分钟(取决于您的应用程序)。这应该 "purge" 你的端点。更新完成后,再次更新您的负载均衡器并将服务器放回其中。 云概念是基础架构即代码:这可以很容易地编写脚本并包含在您的部署/更新过程中。

另一种解决方案是使用流量管理器。它可以为您提供额外的选项来管理您的端点(对于 2 个虚拟机/端点来说可能有点过大)。

最后一个解决方案是迁移到 PaaS 解决方案,其中所有此类功能都已经可用(部署槽)。

希望这会有所帮助。

此致