先进的概念

Citrix Universal Print Server在XenApp和XenDesktop 7.9中的负载均衡

我们如何测试

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

通用打印服务器负载平衡大小

与环境中的其他组件一样,大小调整对于Universal Print Server负载平衡的最佳执行至关重要。由于打印大型文档是主观的,这取决于您的需要,本文主要关注打印的速度和使用我们认为的平均工作。

通过内部测试发现,您不希望在负载平衡中设置过多或过少的Universal Print Server实例。虽然您确实可以使用额外的Universal Print Server实例来增加打印,但当您谈论打印机的分布时,情况就不一定是这样了。特别是配置了太多通用打印服务器实例的情况。在这种情况下,用户明显倾向于使用第一个可用的Universal Print Server实例。

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

该图引用了一个跨越48个XenApp服务器、使用16个Universal Print Server实例的3,500用户测试场景。如上所示,前8个Universal Print Server实例占据了大部分连接,并且连接分布不均匀。这种情况还假定打印速度较低,我们将在后面讨论。

为了理解为什么会发生这种情况,我们需要看看负载平衡机制是如何选择Universal Print Server实例的。假设我们有16个负载平衡的Universal Print Server实例(编号1-16)和一个最多10个用户的XenApp服务器(有点夸张,但您会明白为什么)。我们还假设负载平衡的Universal Print Server实例在Universal Print Server中按照负载平衡策略的数字顺序排列。

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

图表描述了每个通用打印服务器的用户

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

显示额外用户如何平衡打印服务器的图表

继续增加服务器数量,可以清楚地观察到发生的倾斜。实际上,您应该拥有与Universal Print Server实例相同或多个数量的XenApp主机。将用户会话计数保持为计划用于更优化加载的Universal Print Server实例的倍数也是一个好主意。从这个角度来看上面的场景,有2个XenApp服务器和16个Universal Print Server实例,我们看到每个XenApp服务器的用户负载至少应该是16个用户。另一种看待同一问题的方法是,如果每个XenApp服务器只支持10个用户,那么只需要10个Universal Print server实例。这将提供更均衡的负载,并将更有效地利用现有资源。

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

V\* p / n \< j

地点:

V=使用LB功能的vda个数

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

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

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

通过查看VDA上现有的Universal Print Client性能计数器,可以在7.8和更新的VDA上观察P,更具体地说,可以在启用了Universal Print Server策略并将网络打印机映射到会话的VDA上监视正常工作日期间网络打印机每分钟创建的作业计数器的平均值。

J应该是一个介于50到100之间的数字,这取决于打印服务器的硬件性能和要打印的文档的大小。

上面的公式是广义的,很大程度上依赖于您的环境的需求。在实现Universal Print Server负载平衡之前,充分理解环境的打印需求非常重要。

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

新的通用打印服务器负载平衡带来的最大改进之一是每分钟并发打印任务的增加。每分钟100个作业的双倍打印速率阈值现在允许在单个Universal print Server实例上实现更大的密度。分散到多个负载平衡的通用打印服务器实例使此增加倍数更具影响力。下面是每分钟创建的任务计数器(公式中引用的那个)的性能输出,在18小时以上的测试周期中平均为每分钟约100个任务。

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

VDI随机化

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

为了确保随机化工作,使用16个Universal Print Server实例运行了一个500用户的XenDesktop测试。这相当于每个Universal Print Server实例大约有31个会话(在一个完美的负载平衡的世界中),这使得随机化的有效性得到了明确的确定。下面是测试结果所创建的打印机连接。可以很容易地观察到,连接被随机分配给Universal Print Server实例。

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

5000用户测试

由于XenApp服务器本身的密度,通用打印服务器负载平衡的最大好处将在XenApp中实现。为了确定Universal Print Server负载平衡在更大的用户数量环境中的伸缩性,决定5000个用户的测试运行足以验证负载平衡。

显示测试期间5,000个用户如何在打印服务器之间进行负载平衡的图表

上面是5000个用户测试的结果,使用48个XenApp服务器和16个Universal Print Server实例。这样算下来,每个XenApp服务器大约有100个用户,或者每个XenApp服务器每个Universal Print server实例大约有6.5个用户。结果确实显示了之前确定的倾斜,因为这不是一个优化设计的测试。最终,本文旨在演示负载平衡特性。

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

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

下面是故障转移的演示。我们使用了横跨16个Universal Print Server实例的48个XenApp服务器上的2304个用户来演示初始负载平衡和后续故障转移。选择上述值,理想情况下,每个XenApp服务器每个Universal Print Server实例有3个用户。

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

所有Universal Print Server实例都是平等加载的,所有用户都登录了。Universal Print Server实例UPServer06和UPServer11在管理程序级别被强制关闭(由于使用PING来确定Universal Print Server实例的可用性状态),因此它们将被视为完全失败。下面,受影响的服务器连接以橙色突出显示。接下来,橙色显示的失败服务器连接将被重新分配到仍然正常运行的剩余Universal Print server实例。

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

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

显示失败连接重新分配的图表

如前所述,现有连接不能动态地进行负载平衡。负载平衡只在用户会话登录时发生。因此,当失败的Universal Print Server实例再次可用时,不会发生重新平衡或故障恢复。这可以在下面看到,已经失败的Universal Print Server实例将重新联机,但不使用任何现有连接。

显示故障服务器重新联机时连接分布的图表

为了说明这些Universal Print Server实例再次可用并将接受连接,有必要登录其他用户或强制其他Universal Print Server实例失败。下面,Universal Print Server实例UPServer08和UPServer10遭遇强制故障,它们各自的连接用橙色突出显示。

显示失败服务器分布的图表

随着故障的发生,可以看到连接被迁移到其他服务器上。在这种情况下,它们将被迁移回先前失败的两台服务器,现在可以再次接受连接。由于这些服务器负载最小(无负载),它们将承担大部分连接。

添加多个打印服务器

可以通过两种方式将多个Universal Print Server实例添加到负载平衡策略中:通过Citrix policy GUI或通过PowerShell cmdlets。Citrix Policy GUI的使用是不言自明的。下面是一种使用PowerShell以更快速的方式将多个Universal Print Server实例添加到负载平衡策略的方法。

  1. Add-PSSnapin Citrix.Common.GroupPolicy
  2. New-PSDrive -PSProvider CitrixGroupPolicy -Name Site -Root \ -Controller localhost
  3. CD网站:\电脑
  4. CD到要编辑的策略(包含UPSLB策略的策略名称)
  5. CD \ ICA \印刷\ UniversalPrintServer \ LoadBalancedPrintServers设置
  6. 使用new - item将新打印机添加到列表中

显示PowerShell脚本执行的图像

但是使用这种方法有一些注意事项。首先,确保您正确地输入信息。您可能希望手动将一些打印机添加到策略中,并查看它们如何通过PowerShell显示显示,以确保正确地添加它们。其次,由于您避开了策略UI,因此不需要对执行的打印服务器进行验证。

通用打印服务器计数器

正如在尺寸部分所提到的,有新的性能计数器可用于确定有关当前打印条件的信息。Universal Print Server实例和XenApp/XenDesktop系统上都存在唯一的计数器。

与整个Universal Print Server实例相关的计数器将位于相应的Universal Print Server实例上,例如前面提到的每分钟创建的job计数器(这些计数器仅用于Universal Print Server实例,而不是在多个实例之间累积)。与Universal Print Server负载平衡相关的计数器存在于每个XenApp/XenDesktop系统上(负载平衡发生在各个VDA级别),例如Current Connections计数器。

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

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

已创建打印机连接计数器:性能\Citrix打印负载均衡器(选择)\已创建打印机连接

已删除打印机连接计数器:性能\Citrix打印负载均衡器(选择)\删除打印机连接

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

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

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

显示PowerShell计数器对象输出的图像

如果只关心实际值,则需要将此命令输送到另一个命令中以检索经过处理的值(或仅仅是连接值)。为了实现这一点,我们将在前一个命令的末尾添加以下命令:

仅显示返回值的图像

测试环境

测试环境由运行XenServer 6.2和6.5的三个独立的硬件池组成。存在一个单独的XenServer 6.2池,其中包含Citrix基础设施组件(DDC、StoreFront、ICA Launchers、度量集合)和两个6.5池,其中包含Universal Print Server实例和测试RDS vda。测试使用了两个单独的集中式存储库(每个池版本一个存储库),所有测试虚拟机都位于那里。所有使用的软件都是在进行测试时最新的。所有测试都使用相同的驱动程序和驱动版本进行,以确保结果一致。对其他司机进行了测试;不同的驱动程序会导致不同的结果。

XenServer 6.2物理服务器(x10)

  • 2 * Intel Xeon E5620 @ 2.40 GHz(4核超线程)- 16个cpu
  • 64gb内存
  • NFS存储

XenServer 6.5物理服务器(x25)

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

通用打印服务器虚拟机

  • 16vcpu(16插座× 1核)
  • 16gb vRAM
  • 75gb存储
  • Windows Server 2012 R2

RDS VM

  • 16vcpu(16插座× 1核)
  • 16gb vRAM
  • 75gb存储
  • Windows Server 2012 R2

ICA Launcher虚拟机

  • 2个vCPU(2插座× 1核)
  • 4gb vRAM
  • 60gb存储
  • Windows 8.1 x64企业版

Citrix通用打印服务器策略

ICA \印刷

  • 通用驱动程序首选- XPS;EMF;PCL5c;PCL4;PS
  • 通用打印驱动程序使用-只使用通用打印
  • 通用打印服务器启用-启用了Windows本地远程打印
  • 等待打印机被创建-已启用
  • 用于负载平衡的通用打印服务器-打印服务器列表

Universal Print Server和RDS/VDA虚拟机保持在相同的硬件池物理服务器中,以确保在一致的硬件配置上执行测试。DDC和StoreFront服务器没有包括在上面,因为除了来自DDC的策略传播外,它们对Universal Print Server负载平衡没有影响。Domain中使用了最少的策略,并且除了上面提到的通用打印服务器和负载均衡策略外,XenDesktop/XenApp站点是具有默认策略的默认安装。

Citrix Universal Print Server在XenApp和XenDesktop 7.9中的负载均衡