Citrix Virtual Apps and Desktops 服务

动态计算机预配

通过 AutoScale 动态预配计算机

AutoScale 提供动态创建计算机以及将其删除的功能。可以使用 PowerShell 脚本来利用该功能。该脚本可帮助您根据当前负载条件动态增加或减少交付组中的计算机数量。

该脚本提供以下优势(以及更多):

  • 降低存储成本。与有助于降低计算成本的 AutoScale 不同,该脚本提供了一个更具成本效益的解决方案来预配计算机。

  • 有效处理负载变化。该脚本通过根据当前的交付组负载自动增加或减少计算机数量来帮助您处理负载变化。

下载脚本

PowerShell 脚本在 https://github.com/citrix/Powershell-Scripts/tree/master/XAXD/AutoscaleMcs 提供。

脚本的工作原理

重要:

  • 不能在多个交付组中指定通过脚本管理的计算机目录。换句话说,如果多个交付组共享同一计算机目录,该脚本将不适用于其中任何交付组。
  • 不能同时从多个位置运行同一交付组的脚本。

该脚本在交付组级别运行。它测量负载(根据 负载指数),然后确定是创建计算机还是删除计算机。

通过此脚本创建的计算机具有唯一标记(通过 ScriptTag 参数),以便以后可以识别这些计算机。创建或删除计算机是根据:

  • 交付组的最大负载百分比。指定为 AutoScale 创建计算机以解决额外负载的最大级别。超过此阈值时,将分批创建计算机,以确保当前负载降低到或低于阈值。

  • 交付组的最小负载百分比。指定删除通过此脚本创建的并且没有活动会话的计算机的最低级别。超过此阈值时,通过此脚本创建的没有活动会话的计算机将被删除。

此脚本用于跨交付组进行监视,并在满足触发条件时创建或删除计算机。它在每次运行的基础上执行。这意味着您需要定期运行脚本,以便其能够按预期运行。我们建议您以最少 5 分钟的时间间隔运行脚本。这样做可以提高整体响应能力。

该脚本依赖以下参数来运行:

参数 类型 默认值 说明
DeliveryGroupName 字符串 X 要监视以确定当前负载的交付组的名称。可以提供以分号分隔的名称列表。例如:Invoke-AutoscaleMachineCreation.ps1 -DeliveryGroupName ‘dg1;dg2;dg3’ -XdProfileName profile
XdProfileName 字符串 X 用于对远程服务器进行身份验证的配置文件的名称。有关使用此参数对远程服务器进行身份验证的详细信息,请参阅身份验证 API
HighWatermark 整数 80 为 AutoScale 创建计算机以解决额外负载的最大百分比负载(按负载指数计算)。
LowWatermark 整数 15 删除通过此脚本创建的没有活动会话的计算机的最小负载百分比(按负载指数计算)。
MachineCatalogName 字符串 X 要创建计算机的计算机目录的名称。
MaximumCreatedMachines 整数 -1 可以在指定交付组中创建的计算机的最大数量。如果值等于或小于 0,脚本将不处理此参数。
ScriptTag 字符串 AutoscaledScripted 适用于通过此脚本创建的计算机的标签。
EventLogSource 字符串 X 在 Windows 事件查看器中显示的源名称。

注意:

“X”表示没有为该参数指定默认值。

默认情况下,脚本首次运行时需要所有参数(ScriptTag 参数除外)。在后续运行中,只需要 DeliveryGroupNameXdProfileName 参数。或者,您可以选择更新最小和最大负载百分比。

请注意,首次运行脚本时必须指定单个交付组。例如,如果您在首次运行脚本时使用以下 PowerShell 命令指定两个交付组,脚本将起作用:

  • Invoke-AutoscaleMachineCreations.ps1 -DeliveryGroupName ‘dg1;dg2’ -XdProfileName profile -LowWatermark 20 -HighWatermark 70 -MachineCatalogName ‘cat1’\

相反,请首先使用以下命令指定单个交付组(在本示例中为 dg1):

  • Invoke-AutoscaleMachineCreations.ps1 -DeliveryGroupName ‘dg1’ -XdProfileName profile -LowWatermark 20 -HighWatermark 70 -MachineCatalogName ‘cat1’\

然后,请使用以下命令运行第二个交付组的脚本(在此示例中为 dg 2):

  • Invoke-AutoscaleMachineCreations.ps1 -DeliveryGroupName ‘dg1;dg2’ -XdProfileName profile

必备条件

要运行脚本,请确保满足以下必备条件:

  • 计算机位于正在创建计算机的同一域中。
  • 该计算机上已安装远程 PowerShell SDK。有关远程 PowerShell SDK 的详细信息,请参阅 SDK 和 API
  • 其他必备条件:
    • 要监视的交付组
    • 通过 Machine Creation Services (MCS) 创建的具有关联预配方案(模板)的计算机目录
    • 与预配方案关联的标识池
    • 要创建的事件日志源,以便脚本能够将信息写入 Windows 事件日志
    • 允许您对远程服务器进行身份验证的安全客户端

权限、建议和通知

运行脚本时,请记住以下几点:

  • 要使用 XdProfileName 参数对远程服务器进行身份验证,您需要使用在 Citrix Cloud 控制台中创建的 API 访问安全客户端来定义身份验证配置文件。有关详细信息,请参阅身份验证 API

  • 您必须具有在 Active Directory 中创建和删除计算机帐户的权限。

  • 我们建议您使用 Windows 任务计划程序自动执行 PowerShell 脚本。有关详细信息,请参阅使用 Windows 任务计划程序创建自动化任务

  • 如果您希望脚本将信息(例如,故障和操作)写入 Windows 事件日志,需要首先使用 New-EventLog cmdlet 指定源名称。例如 New-EventLog -LogName Application –Source <sourceName>。然后可以在 Windows 事件查看器的应用程序窗格中查看事件。

  • 如果在执行脚本过程中出现错误,请手动执行脚本,然后通过执行脚本检查来解决问题。

身份验证 API

在运行脚本之前,需要使用 API 访问安全客户端定义身份验证配置文件。必须使用运行脚本的相同帐户创建安全客户端。

安全客户端必须具有以下权限:

  • 使用 MCS 创建和删除计算机。
  • 编辑计算机目录(以添加和删除计算机)。
  • 编辑交付组(以添加和删除计算机)。

创建安全客户端时,请确保您的帐户具有上述权限,因为安全客户端会自动从您的当前帐户继承权限。

要创建安全客户端,请完成以下步骤:

  1. 登录 Citrix Cloud 控制台,然后导航到身份识别和访问管理 > API 访问

  2. 键入您的安全客户端的名称,然后单击创建客户端

要对远程服务器进行身份验证,请使用 Set-XDCredentials PowerShell 命令。例如:

  • Set-XDCredentials -APIKey <key_id> -CustomerId <customer_id> -SecretKey <secret_key> -StoreAs <name specified by the XdProfileName parameter>

使用 Windows 任务计划程序创建自动化任务

可以使用 Windows 任务计划程序自动执行 PowerShell 脚本。这样做可以按某些时间间隔或在满足某些条件时自动运行脚本。要使用 Windows 任务计划程序执行此脚本,请务必在创建任务 > 设置选项卡上选择请勿启动新实例。这样做会阻止 Windows 任务计划程序运行脚本的新实例(如果脚本已在运行)。

脚本执行示例

有关执行脚本的示例,请参阅下文。请注意,脚本文件被多次调用。在此示例中,为了模拟负载,将启动一个会话,然后终止。

脚本执行示例

脚本的故障排除清单

该脚本将信息(例如,错误和操作)写入 Windows 事件日志。该信息可帮助您解决执行脚本时遇到的问题。记住以下故障排除清单可能会有所帮助:

  • 与远程服务器通信失败。可行的操作:
    • 验证与服务器的连接。
    • 验证您使用的 API 密钥是否有效。
  • 创建计算机失败。可行的操作:
    • 验证运行脚本的用户帐户是否具有足够的权限,能够在域中创建用户帐户。
    • 验证创建 API 密钥的用户是否具有足够的权限,能够使用 MCS 预配计算机。
    • 验证计算机目录的有效性(即,其映像仍然存在且处于良好状态)。
  • 未能将计算机添加到计算机目录或交付组。可行的操作:
    • 验证创建 API 密钥的用户是否具有足够的权限,能够在计算机目录和交付组中添加和删除计算机。