使用 Citrix ADC 设备进行负载平衡

本文提供在全部有效的负载平衡配置中部署包含两个或更多个 StoreFront 服务器的 StoreFront 服务器组的方法指导。本文提供关于以下内容的详细信息:如何将 Citrix ADC 设备配置为在服务器组中的 StoreFront 节点之间对来自 Citrix Workspace 应用程序和 Citrix Receiver for Web 的传入请求进行负载平衡。本文还介绍了如何配置 StoreFront 监视器以便与 Citrix ADC 设备配合使用。

本部分内容中的示例已在以下环境中进行了测试:

  • 单服务器组中包含四个 Windows Server 2012 R2 StoreFront 3.x 节点。
  • 配置一个 Citrix ADC 设备 12.1 负载平衡器用于最少连接和 CookieInsert“粘滞”负载平衡。
  • 一个安装了 Citrix Workspace 应用程序的 Windows 10 测试客户端。

打算使用 HTTPS 的情况下负载平衡部署的服务器证书要求

查看计划网关和服务器证书的使用部分。

从商业证书颁发机构购买证书或通过您的企业证书颁发机构颁发证书之前,请考虑以下选项。

  • 选项 1: 在 Citrix ADC 设备负载平衡虚拟服务器 和 StoreFront 服务器组节点上均使用 *.example.com 通配符证书。这样可以简化配置,将来无需替换证书即可添加其他 StoreFront 服务器。
  • 选项 2: 在 Citrix ADC 设备负载平衡虚拟服务器 和 StoreFront 服务器组节点上均使用包含使用者可选名称 (SAN) 的证书。证书中包含匹配所有 StoreFront 服务器完全限定域名 (FQDN) 的其他 SAN 为可选,但是建议采用,因为这样可以在 StoreFront 部署中提供更大的灵活性。包含用于基于电子邮件的发现 discoverReceiver.example.com 的 SAN。

有关基于电子邮件的发现配置的详细信息,请参阅 http://blogs.citrix.com/2013/04/01/configuring-email-based-account-discovery-for-citrix-receiver/

注意:

导出与证书关联的私钥不可行时,请使用两个单独的证书:一个在 Citrix ADC 设备负载平衡虚拟服务器上使用,另一个证书在 StoreFront 服务器组节点上使用。两个证书都必须包含使用者备用名称。

本地化后的图片

本地化后的图片

为 Citrix ADC 设备负载平衡器和所有 StoreFront 服务器创建服务器证书

将 Windows 证书颁发机构颁发的证书导入 Citrix ADC 设备

  • WinSCP 是极其有用的第三方免费工具,可将文件从 Windows 计算机移动到 Citrix ADC 设备文件系统。将要导入的证书复制到 Citrix ADC 设备文件系统内的 /nsconfig/ssl/ 文件夹。
  • 您也可以在 Citrix ADC 设备上使用 OpenSSL 工具从 PKCS12/PFX 文件提取证书和密钥,以便以 Citrix ADC 可以使用的 PEM 格式创建两个单独的 .CER 和 .KEY X.509 文件。
  1. 将 PFX 文件复制到 Citrix ADC 设备或 VPX 上的 /nsconfig/ssl 中。
  2. 打开 Citrix ADC 设备命令行界面 (CLI)。
  3. 键入 Shell 以退出 Citrix ADC 设备 CLI 并切换到 FreeBSD shell。
  4. 使用 cd /nsconfig/ssl/ 更改目录。
  5. 运行 openssl pkcs12 -in <imported cert file>.pfx -nokeys -out <certfilename>.cer,并在出现提示时输入 PFX 密码。
  6. 运行 openssl pkcs12 -in <imported cert file>.pfx -nocerts -out <keyfilename>.key,并在出现提示时输入 PFX 密码,然后设置私钥 PEM 密码以保护 .KEY 文件。
  7. 运行 ls -al 以检查是否已在 /nsconfig/ssl/ 内成功创建 .CER 和 .KEY 文件。
  8. 键入 Exit 以返回到 Citrix ADC 设备 CLI。

导入服务器证书后在 Citrix ADC 设备上进行配置

  1. 登录到 Citrix ADC 设备管理 GUI。
  2. 选择 Traffic Management(流量管理)> SSL > SSL Certificates(SSL 证书),然后单击 Install(安装)。
  3. 在“Install Certificate”(安装证书)窗口中,输入证书和私钥对名称。
    • 在 Citrix ADC 设备文件系统上,选择 /nsconfig/ssl/ 下面的 .cer 证书文件。
    • 从同一位置选择包含私钥的 .key 文件。

本地化后的图片

为 StoreFront 服务器组负载平衡器创建 DNS 记录

为所选的共享 FQDN 创建 DNS A 和 PTR 记录。您网络内的客户端使用此 FQDN 访问使用 Citrix ADC 设备负载平衡器的 StoreFront 服务器组。

示例 - storefront.example.com 解析为负载平衡虚拟服务器虚拟 IP (VIP)。

方案 1:在客户端与 Citrix ADC 设备负载平衡器以及负载平衡器与多个 StoreFront 3.x 服务器之间建立端到端 HTTPS 443 安全连接

此方案使用修改后的 StoreFront 监视器并使用端口 443。

将单个 StoreFront 服务器节点添加到 Citrix ADC 设备负载平衡器

  1. 登录到 Citrix ADC 设备管理 GUI。
  2. 选择 Traffic Management(流量管理)> Load Balancing(负载平衡)> Servers(服务器)> Add(添加),分别添加要进行负载平衡的四个 StoreFront 节点。

    示例 = 4 个名为 2012R2-A 到 2012R2-D 的 2012R2 StoreFront 节点。

  3. 使用基于 IP 的服务器配置,并输入每个 StoreFront 节点的服务器 IP 地址。

本地化后的图片

定义一个 StoreFront 监视器,用于检查服务器组中所有 StoreFront 节点的状态

  1. 登录到 Citrix ADC 管理 GUI。
  2. 选择 Traffic Management(流量管理)> Load Balancing(负载平衡)> Monitors(监视器)> Add(添加),添加名为 StoreFront 的新监视器,并接受所有默认设置。
  3. Type(类型)下拉菜单中,选择 StoreFront
  4. 如果在负载平衡虚拟服务器与 StoreFront 之间使用 HTTPS 连接,请确保选中 Secure(安全)选项;否则,请让此选项保留未选中状态。
  5. 特殊参数选项卡中,键入应用商店名称
  6. 特殊参数选项卡中,选择检查后端服务选项。选中此选项将对 StoreFront 服务器上运行的服务进行监视。通过探测 StoreFront 服务器上运行的 Windows 服务监视 StoreFront 服务,该操作会返回以下服务的状态:
    • W3SVC (IIS)
    • WAS(Windows 进程激活服务)
    • CitrixCredentialWallet
    • CitrixDefaultDomainService

    本地化后的图片

创建包含所有 StoreFront 服务器的 HTTPS 443 服务组

  1. 在服务组内,选择右侧的成员选项,然后添加您之前在“服务器”部分定义的所有 StoreFront 服务器节点。

  2. 设置 TLS 端口,并在添加时为每个节点指定一个唯一的服务器 ID。

    本地化后的图片

  3. Monitors(监视器)选项卡上,选择之前创建的 StoreFront 监视器。

    本地化后的图片

  4. Certificates(证书)选项卡上,绑定之前导入的服务器证书。

  5. 绑定用于为之前导入的服务器证书进行签名的 CA 证书,以及可能属于 PKI 信任链的任何其他 CA。

    本地化后的图片

创建用于用户流量的负载平衡虚拟服务器

  1. 登录到 Citrix ADC 设备管理 GUI。

  2. 选择 Traffic Management(流量管理)> Load Balancing(负载平衡)> Virtual Servers(虚拟服务器)> Add(添加),创建一个新的虚拟服务器。

  3. 选择虚拟服务器采用的负载平衡方法。StoreFront 负载平衡的常用选项为 round robin(轮询)或 least connection(最少连接)。

    本地化后的图片

  4. 将您之前创建的服务组绑定到负载平衡虚拟服务器。

  5. 将之前绑定到服务组的同一服务器和 CA 证书绑定到负载平衡虚拟服务器。

  6. 在负载平衡虚拟服务器菜单中,选择右侧的 Persistence(持久性),将持久性方法设置为 COOKIEINSERT

  7. 为该 Cookie 命名。例如,NSC_SFPersistence,这样可以在调试时使其在 Fiddler 跟踪中易于识别。

  8. 将备份持久性设置为 NONE(无)。

本地化后的图片

方案 2:HTTPS 终止 - 客户端与 NetScaler 负载平衡器之间进行 HTTPS 443 通信,Citrix ADC 负载平衡器与其后方的 StoreFront 3.x 服务器之间进行 HTTP 80 连接

此方案使用默认的 StoreFront 监视器并使用端口 8000。

将单个 StoreFront 服务器添加到 Citrix ADC 负载平衡器

  1. 登录到 Citrix ADC 管理 GUI。
  2. 选择 Traffic Management(流量管理)> Load Balancing(负载平衡)> Servers(服务器)> Add(添加),分别添加要进行负载平衡的四个 StoreFront 服务器。示例:4 个 2012R2 StoreFront 服务器,分别命名为 2012R2-A 至 2012R2–D。3.
  3. 使用基于 IP 的服务器配置,并输入每个 StoreFront 服务器的服务器 IP 地址。

定义一个 HTTP 8000 StoreFront 监视器,用于检查服务器组中所有 StoreFront 服务器的状态

  1. 登录到 Citrix ADC 管理 GUI。
  2. 选择 Traffic Management(流量管理)> Monitors(监视器)> Add(添加),添加名为 StoreFront 的新监视器。
  3. 为新监视器添加一个名称并接受所有默认设置。
  4. 类型列表中选择 StoreFront
  5. 特殊参数选项卡中,键入应用商店名称
  6. 目标端口中键入 8000。这样可以与在每个 StoreFront 服务器上创建的默认监视器实例相匹配。
  7. 特殊参数选项卡中,选择检查后端服务选项。选中此选项将对 StoreFront 服务器上运行的服务进行监视。通过探测 StoreFront 服务器上的 Windows 服务监视 StoreFront 服务,探测操作会返回正在运行的所有 StoreFront 服务的状态。

创建包含所有 StoreFront 服务器的 HTTP 80 服务组

  1. 在服务组内,选择右侧的成员选项,然后添加您之前在“服务器”部分定义的所有 StoreFront 服务器节点。
  2. 将 HTTP 端口设置为 80,并在添加服务器时为每台服务器分配一个唯一的服务器 ID。
  3. Monitors(监视器)选项卡上,选择之前创建的 StoreFront 监视器。

创建用于用户流量的 HTTPS 终止负载平衡 vServer

  1. 选择 Traffic Management(流量管理)> Load Balancing(负载平衡)> Virtual Servers(虚拟服务器)> Add(添加),创建一个新的虚拟服务器。
  2. 选择 vServer 将使用的负载平衡方法。StoreFront 负载平衡的常用选项为 “round robin”(轮询)或“least connection”(最少连接)。

  3. 将您之前创建的服务组绑定到负载平衡虚拟服务器。

  4. 将之前绑定到服务组的同一服务器和 CA 证书绑定到 负载平衡虚拟服务器。

    注意:

    如果不允许客户端存储 HTTP Cookie,则后续请求不会含有 HTTP Cookie,并且不使用“Persistence”(持久性)。

  5. 在负载平衡虚拟服务器菜单中,选择右侧的 Persistence(持久性),将持久性方法设置为 COOKIEINSERT

  6. 为该 Cookie 命名。例如,NSC_SFPersistence,这样可以在调试时使其在 Fiddler 跟踪中易于识别。
  7. 将备份持久性设置为 NONE(无)。

创建负载平衡虚拟服务器以实现服务器组之间的订阅同步

创建负载平衡虚拟服务器之前的注意事项:

  • 选项 1: 创建单个虚拟服务器:仅对用户流量进行负载平衡。如果对已发布的应用程序和桌面仅执行 ICA 启动,此选项即可满足要求。(强制,通常可满足所有需求。)
  • 选项 2: 创建虚拟服务器对:一个用于对用户流量进行负载平衡以对已发布的应用程序和桌面执行 ICA 启动,另一个用于对订阅数据同步操作进行负载平衡。(仅当在大型多站点部署中的两个或更多个进行负载平衡的 StoreFront 服务器组之间传播订阅数据时需要。)

如果多站点部署包含两个或更多个位于不同地理位置的 StoreFront 服务器组,您可以根据重复计划采用提取策略在它们之间复制订阅数据。StoreFront 订阅复制使用 TCP 端口 808,因此,使用现有采用 HTTP 端口 80 或 HTTPS 443 的负载平衡虚拟服务器将失败。要为此服务提供高可用性,请在部署中的每个 Citrix ADC 设备上创建第二个虚拟服务器,以便为每个 StoreFront 服务器组负载平衡 TCP 端口 808。配置复制计划时,请指定与订阅同步虚拟服务器虚拟 IP 地址匹配的服务器组地址。确保服务器组地址是该位置上服务器组的负载平衡器的 FQDN。

配置用于订阅同步的服务组

  1. 登录到 Citrix ADC 设备管理 GUI。
  2. 选择 Traffic Management(流量管理)> Service Groups(服务组)> Add(添加),添加新服务器组。
  3. 将协议更改为 TCP
  4. 在服务组内,选择右侧的成员选项,然后添加您之前在“服务器”部分定义的所有 StoreFront 服务器节点。
  5. 监视器选项卡上,选择 TCP 监视器。

本地化后的图片

创建负载平衡虚拟服务器以实现服务器组之间的订阅同步

  1. 登录到 Citrix ADC 设备管理 GUI。
  2. 选择 Traffic Management(流量管理)> Service Groups(服务组)> Add(添加),添加新服务器组。
  3. 将负载平衡方法设置为 round robin(轮询)。
  4. 将协议更改为 TCP
  5. 输入 808 而非 443 作为端口号。

本地化后的图片

CitrixSubscriptionsSyncUsers 中的成员身份

为使位置 A 处的 StoreFront 服务器 A 可以向另一个位置的服务器 B 请求与提取订阅数据,服务器 A 必须是服务器 B 上的 CitrixSubscriptionsSyncUsers 本地安全组的成员。CitrixSubscriptionsSyncUsers 本地组包含获得授权可从特定服务器提取订阅数据的所有远程 StoreFront 服务器的访问控制列表。为实现双向订阅同步,服务器 B 也必须是服务器 A 上的 CitrixSubscriptionsSyncUsers 安全组的成员,才能从中提取订阅数据。

本地化后的图片

方案 1:在 Citrix ADC 与 StoreFront 之间使用 HTTPS 配置 StoreFront 服务器组

  1. 将部署在 Citrix ADC 设备负载平衡虚拟服务器上的相同证书和私钥导入服务器组的每个 StoreFront 节点。

  2. 在每个 StoreFront 节点上的 IIS 中创建 HTTPS 绑定,然后绑定之前导入其中的证书。

    本地化后的图片

  3. 如果在 Citrix ADC 负载平衡器与 StoreFront 之间使用 HTTPS,则必须使用将负载平衡 FQDN 作为公用名 (CN) 或使用者可选名称 (SAN) 包含在内的证书。

    请参阅为 Citrix ADC 设备负载平衡器和 StoreFront 服务器创建服务器证书

方案 2:在 Citrix ADC 与 StoreFront 之间使用 HTTP 配置 StoreFront 服务器组

  1. 从每个 StoreFront 节点中删除 IIS 中的 HTTPS 绑定(如果已存在)。
  2. 确保 HTTP 绑定在 IIS 中存在,并且设置为使用端口 80。
  3. 将 Receiver for Web 中的环回设置配置为 OnUsingHTTP 和端口 80。此步骤对于确保本机 Citrix Workspace 应用程序与 Receiver for Web 之间的客户端检测成功至关重要。

    高级设置。

方案 1 和方案 2 的常用步骤

  1. 在服务器组中的每个节点上安装 StoreFront。

  2. 安装 StoreFront 期间,将主节点上的主机基本 URL 设置为服务器组的所有成员使用的共享 FQDN。这应始终为 https://storefrontlb.domain.com(适用于方案 1 和 2),并且必须与 Citrix ADC 负载平衡虚拟服务器的 FQDN 匹配。

    请参阅 为 Citrix ADC 设备负载平衡器和 StoreFront 服务器创建服务器证书

  3. 完成初始 StoreFront 配置后,相继将每个节点加入使用主节点的服务器组。

  4. 选择服务器组 > 添加服务器 > 复制加入的服务器的授权代码

    本地化后的图片

  5. 将主节点的配置传播到组中的所有其他服务器组节点。

  6. 使用可以联系和解析负载平衡器的共享 FQDN 的客户端来测试负载平衡服务器组。

Citrix Service Monitor

要对 StoreFront 正常运行所依赖的 Windows 服务的运行状态进行外部监视,请使用 Citrix Service Monitor Windows 服务。此服务独立于其他服务,可以监视并报告其他关键 StoreFront 服务的故障。监视器启用由其他 Citrix 组件(例如 Citrix ADC 设备)从外部确定的 StoreFront 服务器部署的相对运行状况。第三方软件可以利用 StoreFront 监视器的 XML 响应来监视关键 StoreFront 服务的运行状况。

部署 StoreFront 后,将创建使用 HTTP 和端口 8000 的默认监视器。

注意:

一个 StoreFront 部署中只能存在一个监视器实例。

要对现有默认监视器进行更改,如将协议和端口号改为 HTTPS 443,请使用 PowerShell cmdlet 查看或重新配置 StoreFront 监视器服务 URL。

删除默认服务监视器,将其替换为使用 HTTPS 和端口 443 的监视器

  1. 打开主 StoreFront 服务器上的 PowerShell 集成脚本环境 (ISE),然后运行以下命令以将默认监视器更改为 HTTPS 443。

    $ServiceUrl = "https://localhost:443/StorefrontMonitor"
    Set-STFServiceMonitor -ServiceUrl $ServiceUrl
    Get-STFServiceMonitor
    
  2. 完成后,将更改传播到 StoreFront 服务器组中的所有其他服务器。

  3. 要快速测试新监视器,请在 StoreFront 服务器或可以通过网络访问 StoreFront 服务器的任何其他计算机上,将以下 URL 输入浏览器中。浏览器应该会返回每个 StoreFront 服务状态的 XML 摘要。

    https://<loadbalancingFQDN>:443/StoreFrontMonitor/GetSFServicesStatus

    本地化后的图片

Citrix Gateway 与负载平衡虚拟服务器位于相同的 Citrix ADC 设备上

如果在同一个 Citrix ADC 设备上配置了 Citrix Gateway 虚拟服务器和负载平衡虚拟服务器,内部域用户尝试直接(而不是通过 Citrix Gateway 虚拟服务器)访问 StoreFront 负载平衡主机基本 URL 时可能会遇到问题。

在此情况下,由于 StoreFront 将传入用户的源 IP 地址与 Citrix Gateway 子网 IP 地址 (SNIP) 相关联,StoreFront 会假定最终用户已经在 Citrix Gateway 经过身份验证。这样会触发 StoreFront 尝试使用 AGBasic 协议执行 Citrix Gateway 无提示身份验证,而不是实际提示用户使用其域凭据进行登录。为避免出现此问题,请省略如下所示的 SNIP 地址或者输入 VIP,以便使用用户名和密码身份验证而非 AGBasic 登录协议。

在 Storefront 服务器组上配置 Citrix Gateway

网关常规设置。

输入 Citrix Gateway VIP 到“虚拟服务器 IP 地址”字段中。如果负载平衡虚拟服务器驻留在同一个 Citrix ADC 设备上,请勿将 SNIP 用于 Citrix Gateway。

网关身份验证设置。

使用 Citrix ADC 设备对 StoreFront 服务器组进行负载平衡时的环回选项

可以使用 PowerShell 设置环回选项。

Receiver for Web web.config 文件示例

<communication attempts="2" timeout="00:01:00" loopback="On" loopbackPortUsingHttp="80">

PowerShell 命令示例

& "c:\program files\Citrix\receiver storefront\scripts\ImportModules.ps1"
Set-DSLoopback -SiteId 1 -VirtualPath "/Citrix/StoreWeb" -Loopback "OnUsingHttp" -LoopbackPortUsingHttp 81

-Loopback 参数可以采用三个值:

上下文
On - 将 URL 的主机更改为 127.0.0.1。架构和端口(如果已指定)不更改。 如果使用 TLS 终止负载平衡器,则不能使用。
OnUsingHttp - 将主机更改为 127.0.0.1,将架构更改为 HTTP 并修改为 loopbackPortUsingHttp 属性配置的端口值。 仅当负载平衡器为 TLS 终止时才能使用。负载平衡器与 StoreFront 服务器之间的通信使用 HTTP。可以使用 -loopbackPortUsingHttp 属性显式配置 HTTP 端口。
Off - 请求中的 URL 不进行任何修改。 用于故障排除。如果环回设置为 On,Fiddler 之类的工具无法捕获 Receiver for Web 与 StoreFront 服务之间的流量。