[编辑——此帖子已更新,以反映截至 2021 年 6 月 NGINX Plus 和 Azure 负载均衡服务支持的功能。 它还引用了NGINX Plus API ,它取代并弃用了帖子原始版本中提到的单独动态配置模块。]
使用 Microsoft Azure 的客户有三种负载均衡选项: NGINX Plus 、Azure 负载均衡服务或 NGINX Plus 与 Azure 负载均衡服务结合使用。 这篇文章旨在为您提供足够的信息来做出决定,并向您展示如何将 NGINX Plus 与 Azure 负载均衡器结合使用为您提供具有丰富第 7 层功能的高可用性 HTTP 负载均衡器。
Microsoft Azure 为用户提供了两种负载均衡器选择: Azure 负载均衡器用于基本 TCP/UDP 负载均衡(位于第 4 层,即网络层), Azure应用网关用于 HTTP/HTTPS 负载均衡(位于第 7 层,即应用层) 。 虽然这些解决方案适用于简单的用例,但它们不提供 NGINX Plus 的许多标准功能。
以下是 NGINX Plus 与 Azure 负载平衡产品的一般比较:
特征 | NGINX Plus | Azure 负载均衡器 | Azureapplication网关 | NGINX Plus 和 Azure 负载均衡器 |
---|---|---|---|---|
HTTP 和 HTTPS 负载均衡 | ✅ | ❌ | ✅ | ✅ |
HTTP/2 负载均衡 | ✅ | ❌ | ✅ | ✅ |
WebSocket 负载均衡 | ✅ | ❌ | ✅ | ✅ |
TCP/UDP 负载均衡 | ✅ | ✅ | ❌ | ✅ |
负载平衡方法 | 先进的 | 简单的 | 简单的 | 先进的 |
会话持久性 | 先进的 | 简单的 | 简单的 | 先进的 |
HTTP 健康检查 | 先进的 | 简单的 | 简单的 | 先进的 |
TCP/UDP 健康检查 | 先进的 | 简单的 | ❌ | 先进的 |
SSL/TLS 终止 | ✅ | ❌ | ✅ | ✅ |
速率和连接限制 | ✅ | ❌ | ❌ | ✅ |
URL 重写和重定向 | ✅ | ❌ | ✅ | ✅ |
URL 请求映射 | ✅ | ❌ | ✅ | ✅ |
主动-主动 NGINX Plus 集群 | ❌ | ❌ | ❌ | ✅ |
现在让我们探讨一下 NGINX Plus 和 Azure 负载均衡服务之间的一些区别、它们的独特功能以及 NGINX Plus 和 Azure 负载均衡器如何协同工作。
除了默认的循环方法之外,NGINX Plus 还提供了几种负载平衡方法供选择:
源
IP
地址
和源
端口
标头字段或 URI 相对应的变量。两个
参数时,NGINX Plus 会随机选择两台服务器,然后根据配置使用最少连接算法(默认)或最少时间在它们之间进行选择。所有方法都可以通过为每个后端服务器分配不同的权重值来扩展。 有关方法的详细信息,请参阅NGINX Plus 管理指南。
Azure 负载均衡器提供一种负载均衡方法Hash ,该方法默认使用基于源
IP
地址
、源
端口
、目标
IP
地址
、目标
端口
和协议
标头字段的密钥来选择后端服务器。
Azureapplication网关仅提供循环方法。
当应用要求将来自特定客户端的所有请求继续发送到同一个后端服务器时,需要使用会话持久性(也称为粘性会话或会话亲和性),因为客户端状态不会在后端服务器之间共享。
NGINX Plus 支持三种高级会话持久方法:
NGINX Plus 还提供了两种基本的会话持久方法,通过上面描述的两种负载平衡方法实现:
Azure 负载均衡器支持与 NGINX Plus Hash 方法等效的方法,尽管密钥仅限于源
IP
地址
、源
端口
、目标
IP
地址
、目标
端口
和协议
标头字段的某些组合。
Azureapplication网关支持与 NGINX Plus Sticky Cookie 方法等效的方法,但存在以下限制:您无法配置 Cookie 的名称、其到期日期、域、路径或HttpOnly
或Secure
Cookie 属性。
笔记: 当使用 Azure 负载均衡器、NGINX Plus IP 哈希方法或将源
IP
地址
包含在密钥中的 NGINX Plus 哈希方法时,仅当客户端的 IP 地址在整个会话期间保持不变时,会话持久性才能正常工作。 情况并非总是如此,例如当移动客户端从 WiFi 网络切换到蜂窝网络时。 为了确保请求继续到达同一个后端服务器,最好使用上面列出的高级会话持久方法之一。
Azure 负载均衡器和 Azure应用网关支持基本的应用运行状况检查。 您可以指定负载均衡器请求的 URL,如果收到预期的 HTTP200
返回码。 您可以指定健康检查频率和服务器被视为不健康之前的超时时间。 使用 Azure应用网关,您还可以自定义预期的响应代码并与响应正文的内容进行匹配。
NGINX Plus 通过高级健康检查扩展了此功能。 除了指定要使用的 URL 之外,您还可以使用 NGINX Plus 在请求中插入标头并查找不同的响应代码,并检查响应的标头和正文。
NGINX Plus 中一个有用的相关功能是慢启动。 NGINX Plus 会缓慢地将负载增加到新的或最近恢复的服务器,这样它就不会因连接过多而无法承受。当您的后端服务器需要一些预热时间时,此功能很有用,如果它们在显示为健康时就被赋予了全部的流量份额,则它们将失败。
NGINX Plus 还支持对TCP和UDP服务器的健康检查,允许您指定要发送的字符串和要在响应中查找的字符串。
Azure 负载均衡器支持TCP 运行状况检查,但不提供此级别的监控。
NGINX Plus 支持SSL/TLS 终止, Azureapplication网关也支持。 Azure 负载均衡器则不然。
使用 NGINX Plus,您可以配置多个限制来控制往返于 NGINX Plus 实例的流量。 这些包括限制入站连接、与后端节点的连接、入站请求的速率以及从 NGINX Plus 到客户端的数据传输速率。
Azureapplication网关和 Azure 负载均衡器不支持速率或连接限制。 但是,您可以使用其他 Azure 服务来配置和启用速率限制。
NGINX Plus、Azureapplication网关和 Azure 负载均衡器均支持以下内容:
与 Azure 负载均衡器和Azure 流量管理器一起使用时,NGINX Plus 将成为具有丰富第 7 层功能的高可用性负载均衡器解决方案。
通过使用 Azure 负载均衡器在可用性集中的 NGINX Plus 实例之间进行负载均衡,您可以在区域内创建高可用性负载均衡器。
您可以根据平均 CPU 使用率设置 NGINX Plus 实例的自动扩缩。 通过在托管 NGINX Plus 实例的 Azure 云服务中创建可用性集,可以实现这一点。 您需要注意 NGINX Plus 配置文件的同步。
您还可以根据平均 CPU 使用率设置后端实例的自动扩展。 通过在托管后端实例的 Azure 云服务中创建可用性集可以实现这一点。 您需要注意从 NGINX Plus 配置中添加或删除后端实例,这可以通过NGINX Plus API来实现。
为了自动更新 NGINX Plus 配置(与可用性集结合使用或单独使用 NGINX Plus),您可以将服务发现系统与 NGINX Plus 集成,可以通过NGINX Plus API或通过 DNS(如果系统具有 DNS 接口)。 查看我们的博客文章,了解如何使用 NGINX Plus 与流行的服务发现系统:
对于全球分布式环境,您可以使用 Azure 流量管理器分配来自多个区域的客户端的流量。
Azure 负载均衡器和application网关由 Azure 云管理,均提供高度可用的负载均衡解决方案。
Azure 负载均衡器的一个功能是源 NAT ,而 NGINX Plus 不具备该功能,其中从后端实例出站的流量具有与负载均衡器相同的源 IP 地址。
使用 Azure 云的自动缩放功能时,Azure 负载均衡器提供自动重新配置。
如果您的负载均衡要求很简单,Azure 负载均衡产品可以提供良好的解决方案。 当需求变得更加复杂时,NGINX Plus 是一个不错的选择。 您可以单独使用 NGINX Plus,也可以与 Azure 负载均衡器结合使用,以实现 NGINX Plus 实例的高可用性。
要在 Microsoft Azure 上试用 NGINX Plus,请立即开始30 天免费试用或联系我们讨论您的用例。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”