高级概念

XenApp 和 XenDesktop 7.9 中的 Citrix 通用打印服务器负载平衡

我们是如何测试的

所有测试场景都是以现实世界的方式进行的,最终的末端打印是唯一的模拟组件。测试系统包括 XenServer VM、用于基础结构(DDC、StoreFront 和通用打印服务器)的 Windows 2012R2 和 XenApp VDA 系统、适用于 XenDesktop VDA 系统的 Windows 10 以及用于通过 Citrix Receiver 启动的 ICA 的 Windows 8.1。每个 ICA 启动器都连接到 10 台打印机,ICA 启动器之间没有打印机重叠,并且使用了自定义脚本,以便为每个 XenApp VDA 会话提供一台随机打印机以供使用。自定义脚本还使用 AutoIt 来控制每个会话内部的打印,以执行相同的打印操作。最后,我们使用内部开发的工具来协调 ICA 会话的启动并收集测试的 perfmon 数据。

通用打印服务器负载平衡调整

就像环境中的所有其他组件一样,调整大小对于通用打印服务器负载平衡以最佳方式执行至关重要。由于打印大型文档是主观的,具体取决于您的需求,因此本文主要关注打印速度和使用我们认为是普通工作的情况。

通过内部测试,发现您不希望在负载平衡中设置太多或太少的通用打印服务器实例。虽然确实可以使用其他通用打印服务器实例来增加打印量,但是当您谈论打印机的分发时,情况并非如此。特别是配置了太多通用打印服务器实例的情况。在这种情况下,用户明显偏向于第一个可用的通用打印服务器实例。

显示每台打印服务器的用户数的图表

该图引用了使用 16 个通用打印服务器实例的 48 台 XenApp 服务器上的 3,500 个用户测试场景。从上面可以看出,前 8 个通用打印服务器实例占据了大部分连接,而且连接的分布并不均匀。这种情况还假设打印率很低,我们将在后面讨论。

为了理解为什么会出现这种情况,我们需要看看负载平衡机制是如何选择通用打印服务器实例的。假设我们在负载平衡方面有 16 个通用打印服务器实例(编号为 1-16),还有一台最多有 10 个用户的 XenApp 服务器(有点夸张,但您会明白原因)。假设负载均衡的通用打印服务器实例在用于负载平衡的通用打印服务器策略中按数字顺序排列。

当用户登录并创建会话(在 XenApp 中)时,用户收到的通用打印服务器实例是随机的。它可以是任何可用的通用打印服务器实例,并且不优先考虑任何服务器。在这个例子中,假设他们的连接收到了服务器 16。第一个用户登录并完成会话创建后,另一个用户登录。此用户将使用策略列表中的第一个通用打印服务器实例,在本例中为服务器 1。另一个用户登录,现在正在使用服务器 2。继续这种趋势将提供如下所示的服务器负载。当所有 10 个用户都登录后,通用打印服务器实例 1-9 和 16 将建立连接,而其余的服务器则没有连接。

描绘每台通用打印服务器用户的图表

现在,我们在组合中添加了额外的 XenApp 服务器,最多可有 10 个用户。除了第一个用户随机接收服务器 4 而不是服务器 16 之外,此服务器遵循与前面示例相同的过程。在这种情况下,每次后续登录都会发生与以前相同的过程,只是它跳过了服务器 4,因为该服务器当前已建立连接。在这种情况下,服务器 1-10 将有连接。您可以在下图中看到橙色显示的其他用户,并观察其平衡情况。

该图显示了其他用户在打印服务器上的平衡情况

继续增加服务器数量,可以清楚地看到出现的偏差。实际上,您应该拥有一定数量的 XenApp 主机,这些主机相当于通用打印服务器实例的数量或多个。最好将用户会话计数作为您计划用于更优化加载的通用打印服务器实例的倍数。从这个角度来看上述情况,使用 2 个 XenApp 服务器和 16 个通用打印服务器实例,我们发现我们的用户负载应至少为每个 XenApp 服务器 16 个用户。另一种看待相同问题的方法是,如果我们每台 XenApp 服务器仅支持 10 个用户,则不需要超过 10 个通用打印服务器实例。这将提供更均衡的负担,并将更有效地利用现有资源。

以上内容过于简单地看待处理严格的用户连接平衡的设置。更复杂的设置,每台服务器的用户数更多,这可能是看到的配置。随着用户数量的增加,前面提到的打印速率在通用打印服务器大小调整中起着更大的作用。我们建议使用以下公式来确定您的环境所需的通用打印服务器实例。这将使您能够根据所需的打印速率确定负载平衡所需的通用打印服务器实例的数量。为了帮助简化尺寸,可以使用此公式为更理想的设置提供指导,以提供所需的打印速率。一般来说,您最感兴趣的是求解 N 来确定自己的打印服务器计数。

V\*P/N \< J

其中:

V = 使用 LB 的 VDA 数量

P = 每个 VDA 每分钟活动的网络打印作业的平均数

N = 负载平衡的打印服务器数量

J = 通用打印服务器上每分钟的最大作业数

通过查看 VDA 上的现有通用打印客户端 perfmon 计数器,可在 7.8 和更新的 VDA 上观察到 P,更具体地说,通过监视已启用通用打印服务器策略且网络的 VDA 在正常工作日内为网络打印机创建每分钟计数器的作业的平均值 打印机映射到会话。

J 应为 50 到 100 之间的数字,具体取决于打印服务器的硬件性能和要打印的文档的大小。

上面的公式是泛化的,在很大程度上取决于环境的要求。在实施通用打印服务器负载平衡之前,请务必充分了解环境的打印要求。

每分钟 100 个作业 (JPM) 测试

新的通用打印服务器负载平衡带来的最大改进之一是每分钟并发打印作业的增加。每分钟 100 个作业的双倍打印速率阈值现在允许在单个通用打印服务器实例上实现更高的密度。分布在多个负载均衡的通用打印服务器实例中,使这种增加倍数的影响更大。以下是“每分钟创建的作业”计数器(公式中引用的计数器)的 perfmon 输出,在 18 小时以上的测试周期内,平均每分钟约有 100 个作业。

图形显示 18 小时测试周期内每分钟创建的作业

VDI 随机化

VDI 环境中使用的负载平衡方法仅是随机化函数的实现。如前所述,负载平衡过程仅在 VDA 上进行,随机化第一个连接,然后在通用打印服务器实例列表中对后续登录进行负载平衡。由于 VDI 实现的每个 VDA 只有一个用户,因此随机化函数是唯一适用的函数。

为了确保随机化工作正常,我们使用16个通用打印服务器实例进行了一次500个用户的XenDesktop 测试。这计算出每个通用打印服务器实例大约有31个会话(在完全平衡的负载世界中),这使得可以清楚地确定随机化的有效性。以下是此测试后创建的打印机连接。可以很容易地观察到,这些连接被随机分配给通用打印服务器实例。

显示测试期间创建的打印机连接数的图形

5000 用户测试

由于 XenApp 服务器本身的密度,XenApp 是实现通用打印服务器负载平衡的最大好处的地方。为了确定通用打印服务器负载平衡在更大的用户计数环境中扩展的程度,决定了 5000 个用户测试运行足够大,以验证负载平衡。

图表显示测试期间 5000 个用户在打印服务器之间的负载平衡

以上是 5000 个用户测试的结果,该测试使用了 48 台 XenApp 服务器和 16 个通用打印服务器实例。该用户数计算为每台 XenApp 服务器大约 100 个用户,或者每个 XenApp 服务器的每个通用打印服务器实例大约有 6.5 个用户。结果确实显示出先前发现的偏斜,因为这不是设计最佳的测试。最终,这是为了演示负载平衡功能。

通用打印服务器负载平衡故障转移

默认情况下,通用打印服务器实例在 180 秒最小值时不会报告为失败,并且可能需要长达 360 秒才能被视为失败。了解此超时非常重要,因为这会导致通用打印服务器实例发生故障时不会发生故障转移。在发生故障转移之前,通用打印服务器实例将有一段时间尝试恢复。如果需要更直接的故障切换,则需要根据您的环境需求进行修改。这些修改可以通过 Citrix 策略进行,也可以通过两个注册表项进行。

以下是故障转移的实际演示。使用了跨 16 个通用打印服务器实例的 48 个 XenApp 服务器上的 2,304 个用户演示了初始负载平衡和后续故障转移。选择上述值是为了让每个 XenApp 服务器的每个通用打印服务器实例最多有 3 个用户。

显示负载平衡和故障转移的图形

所有通用打印服务器实例均等加载,所有用户均已登录。通用打印服务器实例 UPServer06 和 UPServer11 在虚拟机管理程序级别受到强制关机(由于 PING 用于确定通用打印服务器实例的可用性状态),因此它们将被视为完全失败。下面,受影响的服务器连接以橙色突出显示。接下来,橙色出现故障的服务器连接将重新分配给仍处于运行状态的其余通用打印服务器实例。

显示失败服务器连接分布的图形

然后与仍然可用的现有服务器建立新的连接。下面可以看到以前失败的连接是如何重新分配到现有服务器的。

显示失败连接的重分布的图形

如前所述,现有连接不会动态地进行负载平衡。负载平衡仅在用户会话登录时发生。因此,当出现故障的通用打印服务器实例再次可用时,不会发生重新平衡或故障恢复。这可以在下面看到,出现故障的通用打印服务器实例将重新联机,但不使用任何现有连接。

该图显示出现故障的服务器恢复联机时的连接分布

为了说明这些通用打印服务器实例再次可用并接受连接,必须登录其他用户,或者强制其他通用打印服务器实例失败。下面,通用打印服务器实例 UPServer08 和 UPServer10 遭受强制故障,其各自的连接以橙色高亮显示。

显示故障服务器分布的图形

通过失败,可以相应地看到连接已迁移到其他服务器。在这种情况下,它们将被迁移回先前出现故障的两台服务器,现在可以再次建立连接。由于这些服务器的负载最少(无负载),它们将占用大部分连接。

添加多台打印服务器

可以通过两种方式将多个通用打印服务器实例添加到负载平衡策略中:通过 Citrix 策略 GUI 或 PowerShell cmdlet。Citrix 策略 GUI 的使用不言自明。以下是利用 PowerShell 以更快的方式将多个通用打印服务器实例添加到负载平衡策略的方法。

  1. Add-PSSnapin Citrix.Common.GroupPolicy
  2. New-PSDrive –PSProvider CitrixGroupPolicy –Name Site –Root \ -Controller localhost
  3. CD site:\Computer
  4. CD 到要编辑的策略(包含您的 UPSLB 策略的策略名称)
  5. CD Settings\ICA\Printing\UniversalPrintServer\LoadBalancedPrintServers
  6. 使用 New-Item 将新打印机添加到列表中

显示 PowerShell 脚本执行的示意图

不过,使用这种方法有一些警告。首先,请确保您输入的信息正确。您可能需要手动将几台打印机添加到策略中,并通过 PowerShell 显示屏查看它们的显示方式,以确保正确添加它们。其次,由于您避开了策略 UI,因此不会验证所执行的打印服务器。

通用打印服务器计数器

如大小调整部分所述,有一些新的 perfmon 计数器可用于确定有关当前打印条件的信息。通用打印服务器实例和 XenApp/XenDesktop 系统上都存在唯一计数器。

与整个通用打印服务器实例相关的计数器将位于相应的通用打印服务器实例上,例如前面提到的每分钟创建的作业计数器(这些计数器仅用于该通用打印服务器实例,不能在多个实例之间累积实例)。与通用打印服务器负载平衡相关的计数器存在于每个 XenApp/XenDesktop 系统(负载平衡发生在单个 VDA 级别),例如“当前连接”计数器。

UPClient(VDA 组件)特定计数器可以配置为捕获特定通用打印服务器实例、所有通用打印服务器实例的数据,或作为 VDA 上所有通用打印服务器实例的总和。这些计数器既可以直接通过 perfmon 看到,也可以通过 PowerShell 编写脚本。以下计数器将在 perfmon 的 Citrix 打印负载平衡部分下方可用。通过为 VDA 选择合计 (_loadbalancers_total),或者选择该特定 VDA 上可用的单个通用打印服务器实例(通用打印服务器实例名称),可以进一步选择这些计数器。

活动打印机连接计数器: 性能\Citrix 打印负载平衡器 (SELECTION)\活动打印机连接

已创建的打印机连接计数器: 性能\Citrix 打印负载平衡器(SELECTION)\已创建的打印机连接

已删除的打印机连接计数器: 性能\Citrix 打印负载平衡器 (SELECTION)\已删除的打印机连接

由于这些是标准的 perfmon 计数器,因此可以按如下所示使用 PowerShell 内置的 Get-Counter cmdlet 从特定 VDA 获取信息。

Get-Counter -Counter \\\\VDAName\\Citrix Printing Load Balancer(SELECTION)\\COUNTER

上述命令将从所需的 VDAName(VDA 的名称、FQDN 或 IP 地址)中检索所需的计数器(活动/创建/删除的打印机连接)信息(通用打印服务器实例名称或 _loadbalancers_total)。这将提供计数器对象的完整列表。

该图显示 PowerShell 计数器对象输出

如果您只关心实际值,则需要通过管道将此命令传送到另一个命令中以检索熟的值(或仅仅是连接值)。为此,我们将此命令添加到前一个命令的末尾: | Foreach-Object {$_.CounterSamples.CookedValue[0]}

仅显示返回值的图像

测试环境

测试环境由运行 XenServer 6.2 和 6.5 的三组独立的池硬件组成。存在一个 XenServer 6.2 池,其中包含 Citrix 基础结构组件(DDC、StoreFront、ICA Launcher、指标集合)和两个 6.5 池,其中包含通用打印服务器实例和测试 RDS VDA。测试使用了两个单独的集中式存储库(每个池版本一个),所有测试虚拟机都位于那里。在进行测试时,使用的所有软件都是最新的。所有测试均使用相同的驱动程序和驱动程序版本进行,以确保结果一致。测试了其他驱动程序;个别结果会因所使用的驱动程序而异。

XenServer 6.2 物理服务器 (x10)

  • 2 个 Intel Xeon E5620 @ 2.40 GHz(4 核超线程)– 16 个 CPU
  • 64 GB 内存
  • NFS 存储

XenServer 6.5 物理服务器 (x25)

  • 2 个 Intel Xeon E5-2640 @ 2.50 GHz(6 核超线程)– 24 个 CPU
  • 256 GB 内存
  • NFS 存储

通用打印服务器 VM

  • 16 个 vCPU(16 个插槽 x 1 个核心)
  • 16 GB vRAM
  • 75 GB 存储空间
  • Windows Server 2012 R2

RDS 虚拟机

  • 16 个 vCPU(16 个插槽 x 1 个核心)
  • 16 GB vRAM
  • 75 GB 存储空间
  • Windows Server 2012 R2

ICA 启动器虚拟机

  • 2 个 vCPU(2 个插槽 x 1 个核心)
  • 4 GB vRAM
  • 60 GB 存储空间
  • Windows 8.1 x64 Enterprise

Citrix 通用打印服务器策略

ICA\打印

  • 通用驱动程序首选项 — XPS;EMF;PCL5c;PCL4;PS
  • 通用打印驱动程序用法 — 仅使用通用打印
  • 启用通用打印服务器 — 启用,不回退到 Windows 的本机远程打印
  • 等待创建打印机 — 已启用
  • 用于负载平衡的通用打印服务器 — 打印服务器列表

通用打印服务器和 RDS/VDA 虚拟机保存在同一硬件池物理服务器中,以确保在一致的硬件配置上执行测试。上面未包括 DDC 和 StoreFront 服务器,因为它们不会影响通用打印服务器负载平衡,但从 DDC 传播策略除外。域中使用了最少的策略,XenDesktop/XenApp 站点是默认安装,具有默认策略,但上面提到的通用打印服务器和负载平衡策略除外。

XenApp 和 XenDesktop 7.9 中的 Citrix 通用打印服务器负载平衡