全局服务器负载均衡 (Global Server Load Balancing, GSLB) 是在已部署到多个位置的应用程序实例之间对应用程序进行负载均衡的操作。其中任一位置的应用程序负载通常由本地负载均衡器管理。
借助 GSLB,可通过 DNS 查询和运行状况检查来控制对资源的访问。了解站点是否正常运行后,GSLB 会根据配置的逻辑以用户必须访问的站点 DNS 记录的形式提供 IP。如果您在全球部署了多个应用程序/UAG 服务器实例,并且您的用户地理位置分散,则需要使用 GSLB。
目前此功能处于技术预览阶段。
必备条件
确认满足以下必备条件:
在所有数据中心内设置了 NSX Advanced Load Balancer Controller
已完成云配置
已将站点添加到 GSLB 中,并且已按照要求在各个站点上配置了 DNS 虚拟服务
已根据要求配置 UAG 服务器及其他 Horizon 组件
参考架构
NSX Advanced Load Balancer 可以部署在本地或任何云生态系统上,从而可以轻松部署以对任何生态系统中的 Horizon 流量进行负载均衡。NSX Advanced Load Balancer GSLB 支持在多个地理位置分散的数据中心之间分配负载。请考虑具有示例拓扑的请求流:
此处仅显示两个 GSLB 站点。您可以根据需要添加更多 GSLB 站点。
下面介绍了示例拓扑:
NSX Advanced Load Balancer 在两个位置(GSLB 站点)中运行:
内部部署(NSX Advanced Load Balancer GSLB 站点 1)
公有云(NSX Advanced Load Balancer GSLB 站点 2)
每个站点都具有自己的 NSX Advanced Load Balancer Controller 集群(由单个控制器图标表示)
UAG 的 NSX Advanced Load Balancer 分别在 NSX Advanced Load Balancer GSLB 站点 1 和 NSX Advanced Load Balancer GSLB 站点 2 中运行虚拟服务:
VIP1
VIP2
GSLB 服务 (GSLB Service, GS) 应用程序域名为 demo.gslb.appshzn.com。
NSX Advanced Load Balancer GSLB 站点 1 和 NSX Advanced Load Balancer GSLB 站点 2 具有全局 DNS 服务(分别为 NSX Advanced Load Balancer DNS1 和 NSX Advanced Load Balancer DNS2)。对于子域 gslb.appshzn.com,它们具有同等的权威性。
NSX Advanced Load Balancer 监控虚拟服务的运行状况以选择最佳位置(即,排除未正常运行的位置)。
请求流
客户端发送请求以访问 demo.gslb.appshzn.com。
该请求将发送到企业 DNS 服务器,该服务器进一步将 DNS 查询发送到两个 NSX Advanced Load Balancer DNS 服务器之一:NSX Advanced Load Balancer DNS 1 或 NSX Advanced Load Balancer DNS 2。
假设请求发送到 NSX Advanced Load Balancer DNS 1。NSX Advanced Load Balancer DNS 1 会根据 GSLB 算法选择 UAG VIP。
假设 NSX Advanced Load Balancer DNS 使用 VIP1 的 IP 地址响应客户端。
现在,客户端会将请求直接发送到 site1 即 VIP1 上的 NSX Advanced Load Balancer。
客户端在 L7 TLS 端口 443 上向 Horizon demo.gslb.appshzn.com 发起请求。
NSX Advanced Load Balancer 使用 LB 算法从池的服务器列表中选取 UAG 服务器。然后,NSX Advanced Load Balancer 使用 307 重定向进行响应,并将位置设置为 UAG VIP FQDN,并包含用于选定 UAG 服务器的自定义 L7 端口。请参阅配置部分。我们已将范围 5001-5005 内的服务端口添加为 Horizon 内部端口。此处将这些端口称为自定义端口。
所有后续请求都将来自具有此主机名+L7 端口的客户端,并发送到映射的 UAG 服务器。
在虚拟服务上指定服务端口 5001 到 5005。
假设有两个后端 UAG 服务器 - UAG1 和 UAG2。当初始请求出现在端口 443 上的 NSX Advanced Load Balancer L7 虚拟服务时,NSX Advanced Load Balancer 会根据配置的负载均衡算法选择其中一个服务器 - UAG 1 或 UAG 2。如果 NSX Advanced Load Balancer 已从池中选择 UAG 1 服务器,则会使用 307 重定向进行响应,并将位置标头设置为 VIP FQDN 和 5001 端口(适用于 UAG 服务器 1)。同样,对于 UAG 服务器 2,端口 5002 将通过 NSX Advanced Load Balancer 进行设置。如果您有更多 UAG 服务器,那么请在 NSX Advanced Load Balancer 虚拟服务上添加更多端口,如 5003、5004 等。
要获取到 UAG 服务器的自定义端口映射,请使用 show pool <pool-name> vs service server map kv,如下所示:
admin:10-50-55-87]: > show pool UAG-MVP-pool vs service server map kv +-------------------+---------------------------------------------------------+ | Field | Value | +-------------------+---------------------------------------------------------+ | uuid | se-00505695c1f1 | | keyval_entries[1] | | | key | 10.98.17.153,47873,2 | | val | fe_l7_port:5003,fe_blast_port:20003,fe_pcoip_port:30007 | | local_eol | 1000 | | version | 0 | | ishub | False | | keyval_entries[2] | | | key | 10.130.172.191,47873,2 | | val | fe_l7_port:5002,fe_blast_port:20002,fe_pcoip_port:30006 | | local_eol | 1000 | | version | 0 | | ishub | False | | keyval_entries[3] | | | key | 10.130.172.192,47873,2 | | val | fe_l7_port:5001,fe_blast_port:20001,fe_pcoip_port:30005 | | local_eol | 1000 | | version | 0 | | ishub | False | +-------------------+---------------------------------------------------------+
按如下所示使用 show pool <pool-name> vs service server map table:
[admin:10-50-55-87]: > show pool UAG-MVP-pool vs service server map table +--------------------------------+--------------------+ | Field | Value | +--------------------------------+--------------------+ | uuid | se-00505695c1f1 | | vs_service_server_map_entry[1] | | | app_service_port | 5001 | | app_service_type | HORIZON_INTERNAL | | ip_port_str | 10.130.172.192:443 | | vs_service_server_map_entry[2] | | | app_service_port | 5002 | | app_service_type | HORIZON_INTERNAL | | ip_port_str | 10.130.172.191:443 | | vs_service_server_map_entry[3] | | | app_service_port | 5003 | | app_service_type | HORIZON_INTERNAL | | ip_port_str | 10.98.17.153:443 | | vs_service_server_map_entry[4] | | | app_service_port | 20001 | | app_service_type | HORIZON_BLAST | | ip_port_str | 10.130.172.192:443 | | vs_service_server_map_entry[5] | | | app_service_port | 20002 | | app_service_type | HORIZON_BLAST | | ip_port_str | 10.130.172.191:443 | | vs_service_server_map_entry[6] | | | app_service_port | 20003 | | app_service_type | HORIZON_BLAST | | ip_port_str | 10.98.17.153:443 | | vs_service_server_map_entry[7] | | | app_service_port | 30005 | | app_service_type | HORIZON_PCOIP | | ip_port_str | 10.130.172.192:443 | | vs_service_server_map_entry[8] | | | app_service_port | 30006 | | app_service_type | HORIZON_PCOIP | | ip_port_str | 10.130.172.191:443 | | vs_service_server_map_entry[9] | | | app_service_port | 30007 | | app_service_type | HORIZON_PCOIP | | ip_port_str | 10.98.17.153:443 | +--------------------------------+--------------------+
总之,NSX Advanced Load Balancer L7 VIP 必须具有足够的服务端口,每个端口专用于池中的 UAG 服务器。我们建议在开始时打开足够的端口。借助此 NSX Advanced Load Balancer 执行 307 的功能,几乎不需要在 Horizon Server 上进行任何配置更改,即可将任何新的 UAG 服务器添加到服务器池中。发送到特定 L7 服务端口(基本端口除外)的入站客户端请求将内容切换到池中的特定 UAG 服务器。
客户端在重定向的 FQDN <FQDN> 上发送请求
NSX Advanced Load Balancer 将请求发送到其中一个 UAG 服务器。根据我们的示例,请求将发送到 UAG1。
UAG 使用 XML 数据回应 NSX Advanced Load Balancer。在客户端使用选定的 UAG 服务器完成身份验证后,将使用包含 IP/FQDN 的 UAG 响应进行辅助协议通信。
NSX Advanced Load Balancer 将解析此响应,将 IP/FQDN 和端口 XML 标记替换为 NSX Advanced Load Balancer FQDN 和 L4 服务端口。
例如,对于 UAG1,为 NSX Advanced Load Balancer VIP FQDN 和 20001/30005 端口(分别针对 Blast/PCoIP)。同样,对于 UAG 2,NSX Advanced Load Balancer 会将其更改为 NSX Advanced Load Balancer VIP FQDN 和 20002/30006 端口(分别针对 Blast/PCoIP)。
然后,具有自定义端口的 L4 请求将发送到 NSX Advanced Load Balancer 虚拟服务。使用自定义端口,NSX Advanced Load Balancer 知道必须将请求发送到哪个 UAG 服务器。
NSX Advanced Load Balancer 将请求发送到相应的 UAG 服务器。在此示例中,请求将发送到 UAG1。
UAG 响应 NSX NSX Advanced Load Balancer。
NSX Advanced Load Balancer 将响应发送到能够成功呈现应用程序/桌面的客户端。