Product Documentation

Delivery Controller

Feb 23, 2016

Delivery Controller 是负责管理用户访问的服务器端组件,它还负责代理和优化连接。 Controller 还提供用于创建桌面和服务器映像的 Machine Creation Services。

站点必须至少有一个 Controller。 安装首个 Controller 后,可以在创建站点时或创建站点后添加更多 Controller。 在一个站点中安装多个 Controller 有两大主要优势。

  • 冗余性 — 生产站点应始终确保至少拥有两个位于不同物理服务器上的 Controller,这是最佳做法。 如果一个 Controller 出现故障,其他的 Controller 可以管理连接和站点。
  • 可扩展性 — 随着站点活动的增长,Controller 的 CPU 使用率将提高,数据库活动也会增加。 更多的 Controller 可以处理更多用户以及更多的应用程序和桌面请求,并且可以提升整体响应能力。

每个 Controller 直接与站点数据库通信。 在包含多个区域的站点中,每个区域中的 Controller 与主区域中的站点数据库通信。

提示:请勿在配置站点后更改 Controller 的计算机名称或域成员关系。

VDA 发现 Controller 的方式

VDA 必须首先向站点的 Controller 进行注册(建立连接),然后该 VDA 才可以使用。 VDA 通过检查称为 ListofDDCs 的 Controller 列表来查找 Controller。 ListOfDDCs 包括一个或多个用于将 VDA 指向站点 Controller 的 DNS 项或 IP 地址。 为实现负载平衡,VDA 会自动在列表中的所有 Controller 之间分发连接。

除 ListOfDDCs 以外,ListOfSIDs 用于指明 VDA 允许哪些计算机安全 ID (SID) 作为 Controller 与其进行联系。 ListOfSIDs 可用于降低 Active Directory 上的负载或避免来自受感染 DNS 服务器的潜在安全威胁。

随着在站点中添加和删除 Controller,确保所有 VDA 上的 ListOfDDCs 和 ListOfSIDs 始终包含最新的信息十分重要。 如果未更新这些列表,VDA 可能会拒绝由未在列表中的 Controller 所代理的会话启动。 无效的项会使虚拟桌面系统软件的启动发生延迟。 要确保列表包含最新内容,您可以:

  • 使用自动更新功能,以便随着 Controller 的添加或删除自动更新 ListOfDDCs 和 ListOfSIDs。 默认情况下,自动更新功能处于启用状态。
  • 自我管理 – 也就是说,手动更新用于标识 Controller 的策略或注册表设置。

在 ListOfDDCs 和 ListOfSIDs 中的信息可以来源于部署中的多个位置。 VDA 按顺序检查以下位置,并在发现列表的第一个位置停止:

  1. 为自动更新功能所维护的静态存储位置。 在启用自动更新并且 VDA 在安装后首次成功完成注册后,此位置包含 Controller 信息。 (此存储还包括计算机策略信息,这样可以确保在重新启动后保留策略设置。)安装后首次注册时,或者禁用自动更新时,VDA 将检查以下位置:
  2. 策略设置(Controller、Controller SID)。
  3. 注册表中 Virtual Desktop Agent 注册表项下的 Controller 信息。 VDA 安装程序首次将根据在安装 VDA 时指定的信息填充这些值。
  4. 基于 OU 的 Controller 发现。 这是一种为实现向后兼容性而维护的传统方法。
  5. 由 Machine Creation Services 创建的 Personality.ini 文件。

如果 ListOfDDCs 指定多个 Controller,VDA 将尝试以随机顺序连接这些 Controller。 ListOfDDCs 还可以包含 Controller 组,在这些组的名称中,用括号将两个或多个 Controller 项括起。 VDA 将尝试连接组中的每个 Controller,然后转向 ListOfDDCs 中的其他项。

对于已从 7.0 之前版本升级的 XenDesktop 用户,自动更新功能将替代先前版本的 CNAME 功能。 如有需要,可以手动重新启用 CNAME 功能;但是,要使 DNS 失真继续工作,您将无法同时使用自动更新功能和 CNAME 功能。 有关重新启用 CNAME 功能的信息,请参阅 CTX137960

有关在包含多个区域的站点中 VDA 尝试进行注册的位置信息,请参阅区域一文。

选择自动更新或自我管理的注意事项

默认情况下,用于启用/禁用自动更新的策略设置处于启用状态。

以下类型的部署无法使用自动更新,而必须使用自我管理。

  • 使用 Controller 组的部署。
  • 出于安全原因使用 ListOfSIDs 的部署。 (对于使用 ListOfSIDs 来降低 Active Directory 负载的部署,可以使用自动更新。)
  • 使用 Provisioning Services 但不使用写回磁盘的部署。
  • 使用 Controller 或 Controller SID 策略设置的部署。

自动更新

启用控制器自动更新策略设置位于 Virtual Delivery Agent 类别中。 要启用自动更新,请启用策略设置;这是默认设置。 要禁用自动更新,请禁用策略设置。

如果启用自动更新,在安装 VDA 时,VDA 将尝试已在安装 VDA 时指定的其中一个 Controller 值中进行注册。 安装程序会将在 VDA 安装期间指定的控制器信息写入 ListOfDDC 注册表值。

VDA 注册完成后,该 VDA 所注册的控制器将向该 VDA 发送控制器完全限定的域名 (FQDN) 和安全 ID (SID) 的最新列表。 VDA 会将此列表写入自动更新静态存储中。 每个控制器还将每隔 90 分钟检查站点配置数据库以获取控制器信息 - 如果自上次检查后添加或删除了控制器,或如果发生策略更改,则控制器会将已更新的列表发送到其注册的 VDA 中。 VDA 将接受所接收最新列表中的所有控制器的连接。

如果 VDA 接收的列表不包括其注册的控制器(换句话说,已从站点中删除该控制器),VDA 将从列表中选择控制器并重新注册。 VDA 完成注册或重新注册后,会收到更新的列表。

例如:

  1. 某部署中包括三个控制器:A、B 和 C。 VDA 安装后,向控制器 B 注册(该控制器在 VDA 安装期间指定)。
  2. 将 D 和 E 两个控制器添加到站点中。 VDA 会在 90 分钟内收到更新的列表,并将接受来自控制器 A、B、C、D 和 E 的连接。 (只有在重新启动 VDA 后,负载才会均衡分散到所有控制器上。)
  3. 将控制器 B 从站点中删除。 VDA 会在 90 分钟内收到更新的列表,因为自上次检查后控制器已发生更改。 在第 1 步中安装的 VDA 已向控制器 B 注册,但该控制器已不在列表中,这样 VDA 将从当前列表(A、C、D 和 E)中选择控制器并重新注册。

自我管理

如果不使用自动更新功能,则在站点中添加、移动或删除 Delivery Controller 后,必须更新站点中每个 VDA 的 Citrix 策略设置或注册表值。 还可以使用组策略对象更新注册表更改。

要使用 Citrix 策略设置进行自我管理,请执行以下操作:

  1. 更新控制器策略设置中指定的 FQDN 值。 此策略设置位于 Virtual Delivery Agent 类别中。
  2. 如果部署中还使用 ListOfSIDs,请更新在控制器 SID 策略设置中指定的 SID 值。

要使用注册表进行自我管理,请执行以下操作:

警告:注册表编辑不当会导致严重问题,可能需要重新安装操作系统。 Citrix 无法保证因“注册表编辑器”使用不当导致出现的问题能够得以解决。 使用“注册表编辑器”需自担风险。 在编辑注册表之前,请务必进行备份。

  1. 更新 ListOfDDCs 注册表项,该注册表项用于列出站点中所有控制器的 FQDN。 (此注册表项相当于 Active Directory 站点 OU。)各个值之间以空格分隔。 使用括号将控制器组括起来。

    HKEY_LOCAL_MACHINE\Software\Citrix\VirtualDesktopAgent\ListOfDDCs (REG_SZ)

    如果注册表位置 HKEY_LOCAL_MACHINE\Software\Citrix\VirtualDesktopAgent 包括 ListOfDDCs 和 FarmGUID 两个注册表项,则 ListOfDDCs 用于控制器发现;如果在 VDA 安装期间指定站点 OU,则 FarmGUID 位于此位置。

  2. 或者,也可以更新 ListOfSIDs 注册表项:

    HKEY_LOCAL_MACHINE\Software\Citrix\VirtualDesktopAgent\ListOfSIDs (REG_SZ)

添加、删除或移动 Controller

要添加、移动或删除 Controller,必须具有数据库一文中列出的服务器角色和数据库角色权限。

注意:在 SQL 群集或 SQL 镜像安装中,不支持在节点上安装 Controller。

如果您的部署使用数据库镜像:

  • 在添加、删除或移动 Controller 之前,请确保主体数据库和镜像数据库均处于运行状态。 另外,如果您通过 SQL Server Management Studio 使用脚本,请在执行脚本之前启用 SQLCMD 模式。
  • 要在添加、删除或移动 Controller 后验证镜像,请运行 PowerShell get-configdbconnection cmdlet,以确保在镜像的连接字符串中设置了 Failover Partner 的值。

在添加、删除或移动 Controller 后:

  • 如果已启用自动更新,VDA 将在 90 分钟内接收已更新的 Controller 列表。
  • 如果未启用自动更新,请确保更新了所有 VDA 的 Controller 策略设置或 ListOfDDCs 注册表项。 将 Controller 移至其他站点后,更新两个站点上的策略设置或注册表项。

添加 Controller

可以在创建站点时或创建站点后添加 Controller。 无法将安装了旧版软件的 Controller 添加到使用此版本创建的站点中。

  1. 在使用受支持操作系统的服务器上运行安装程序。 安装 Delivery Controller 组件和所需的任何其他核心组件。 完成安装向导。
  2. 如果尚未创建站点,请启动 Studio;系统会提示您创建一个站点。  在站点创建向导的“数据库”页面上,单击“选择”按钮,然后添加已安装其他 Controller 的服务器的地址。 重要:如果计划生成将初始化数据库的脚本,请在生成脚本前添加 Controller。
  3. 如果已经创建站点,请将 Studio 指向已安装其他 Controller 的服务器。 单击扩展部署并输入站点地址。

删除 Controller

从站点删除 Controller 时,不会卸载 Citrix 软件或任何其他组件;会从数据库中删除 Controller,这样它将再也无法用于代理连接和执行其他任务。 如果删除 Controller,您可以稍后将其添回到同一个站点中或添加到其他站点中。 一个站点至少需要一个 Controller,因此无法删除 Studio 中列出的最后一个 Controller。

从站点中删除 Controller 时,不会删除登录数据库服务器时使用的 Controller 登录信息。 这样可以避免删除同一计算机上由其他产品的服务所使用的登录信息的可能性。 如果不再需要,则必须手动删除登录信息;需要具有 securityadmin 服务器角色权限才能删除登录信息。

重要:请先将 Controller 从站点中删除,然后再将其从 Active Directory 中删除。

  1. 确保打开 Controller 的电源,以使 Studio 能够在一小时内加载。 Studio 加载要删除的 Controller 时,请在系统提示您关闭 Controller 的电源时执行此操作。
  2. 在 Studio 导航窗格中选择配置 > Controller,然后选择要删除的 Controller。
  3. 在“操作”窗格中单击删除 Controller。 如果没有正确的数据库角色和权限,可以选择生成一个脚本,数据库管理员可以通过该脚本为您删除 Controller。
  4. 您可能需要从数据库服务器中删除 Controller 的计算机帐户。 在执行此操作之前,请检查是否有其他服务在使用该帐户。

使用 Studio 删除 Controller 之后,该 Controller 的流量可能会出现短时间的延迟,以确保当前任务正常完成。 如果要在极短的时间内删除 Controller,Citrix 建议在服务器的安装位置将其关闭,或从 Active Directory 中删除该服务器。 然后在该站点上重新启动其他 Controller,确保不再与删除的 Controller 进一步通信。

将 Controller 移至其他区域

如果站点包含多个区域,可以将 Controller 移至其他区域。 有关此操作对 VDA 注册和其他操作的影响,请参阅区域一文。

  1. 在 Studio 导航窗格中选择配置 > Controller,然后选择要移动的 Controller。
  2. 在“操作”窗格中选择移动
  3. 指定要移动 Controller 的区域。

将 Controller 移至其他站点

无法将 Controller 移至使用此软件的早期版本创建的站点。

  1. 在 Controller 当前所在的站点(旧站点)上,从 Studio 导航窗格中选择配置 > Controller,然后选择要移动的 Controller。
  2. 在“操作”窗格中单击删除 Controller。 如果您没有相应的数据库角色和权限,可以选择生成一个脚本,以允许具有这些权限的人员(如数据库管理员)为您删除 Controller。 一个站点至少需要一个 Controller,因此无法删除 Studio 中列出的最后一个 Controller。
  3. 在要移动的 Controller 上,打开 Studio,出现相应提示时重置服务,然后选择加入现有站点,并输入新站点的地址。

将 VDA 移至另一个站点

如果 VDA 是使用 Provisioning Services 置备的或者 VDA 是现有映像,您可以在升级时或者将在测试站点中创建的 VDA 映像移至生产站点时将 VDA 移至另一个站点(从站点 1 移至站点 2)。 无法将使用 Machine Creation Services (MCS) 置备的 VDA 从一个站点移至另一个站点,因为 MCS 不支持更改 ListOfDDCs(一项 VDA 检查)以在 Controller 中注册;使用 MCS 置备的 VDA 始终检查与在其中创建了该 VDA 的站点关联的 ListOfDDCs。

可以通过以下两种方式将 VDA 移至另一个站点:使用安装程序或 Citrix 策略。

安装程序:运行安装程序并添加 Controller,在站点 2 中为控制器指定 FQDN(DNS 项)。 重要:仅当未使用 Controller 策略设置时,才在安装程序中指定 Controller。

组策略编辑器:以下是在站点之间移动多个 VDA 的示例。

  1. 在站点 1 中创建包含以下设置的策略,然后过滤此策略至交付组级别,以在站点间发起分阶段的 VDA 迁移。
    Controller - 包含站点 2 中一个或多个 Controller 的 FQDN(DNS 项)。
    启用 Controller 自动更新 - 设置为禁用。
  2. 在新策略创建 90 分钟内,交付组中的每个 VDA 都将收到警告。 VDA 将忽略其收到的控制器列表(因为自动更新已禁用);它会选择在策略(其列出了站点 2 中的控制器)中指定的一个控制器。
  3. 当 VDA 在站点 2 的控制器中成功注册后,它将接收站点 2 的 ListOfDDCs 和策略信息,默认情况下,自动更新功能已启用。 由于 VDA 在站点 1 中注册的控制器不在站点 2 控制器所发送的列表上,因此,VDA 将从站点 2 列表中选择控制器并重新注册。 从此时开始,VDA 会从站点 2 中自动更新信息。

基于 Active Directory OU 的控制器发现

支持此 Delivery Controller 发现方法主要是为实现向后兼容性,这种方法仅适用于 Virtual Delivery Agent (VDA) for Windows Desktop OS,而不适用于 VDA for Windows Server OS。 进行基于 Active Directory 的发现时,要求站点中的所有计算机都是域的成员,并且在控制器所使用的域与桌面所使用的域之间存在相互信任的关系。 如果您使用此方法,则必须在每个桌面注册表中配置 OU 的 GUID。

要执行基于 OU 的控制器发现,请运行控制器的 Set-ADControllerDiscovery.ps1 PowerShell 脚本(每个控制器都包含此脚本,位于 $Env:ProgramFiles\Citrix\Broker\Service\Setup Scripts 文件夹中)。 要运行该脚本,必须在父 OU 上拥有 CreateChild 权限,以及完全管理员权限。

如果希望桌面通过 Active Directory 发现站点中的控制器,在创建站点时,必须在 Active Directory 中创建相应的组织单位 (OU)。 可以在包含您计算机的林的任何域中创建该 OU。 最佳做法是,将站点中的控制器也包含在该 OU 内,但这不是强制或必需的条件。 具有适当权限的域管理员可以创建 OU 作为一个空容器,然后通过该 OU 将管理权限委派给 Citrix 管理员。

该脚本会创建多个关键的对象。 但只创建和使用标准的 Active Directory 对象。 扩展架构是没有必要的。

  • 一个控制器安全组。 站点中所有控制器的计算机帐户必须是此安全组中的成员。 只有当控制器是此安全组的成员时,站点中的桌面才会接受来自这些控制器的数据。

    确保所有控制器对运行 VDA 的所有虚拟桌面都具有“从网络中访问此计算机”权限。 为此,您可以向控制器安全组授予此权限。 如果控制器没有此权限,VDA 将不会注册。

  • 一个服务连接点 (SCP) 对象,包含有关站点的信息(例如站点名称)。 如果您使用 Active Directory 用户和计算机管理工具来检查站点 OU,可能需要启用“查看”菜单中的“高级功能”,才能看到 SCP 对象。
  • 一个称为 RegistrationServices 的容器,在站点 OU 中创建。 容器中针对站点内的每个控制器包含一个 SCP 对象。 每次启动控制器时,都会验证其 SCP 内容并根据需要进行更新。

如果在完成初始安装后,可能有多个管理员要添加和删除控制器,则他们需要对 RegistrationServices 容器具有创建和删除子项的权限,对控制器安全组具有写属性权限;这些权限自动授予运行 Set-ADControllerDiscovery.ps1 脚本的管理员。 域管理员或原始安装管理员可以授予这些权限,Citrix 建议您设置安全组来执行此任务。

如果使用站点 OU:

  • 只有在安装或卸载此软件,或者控制器启动并需要更新其 SCP 中的信息时(例如,由于重命名了控制器或更改了通信端口),信息才会写入 Active Directory。 默认情况下,Set-ADControllerDiscovery.ps1 脚本会相应设置对于站点 OU 中对象的权限,为控制器授予对其 SCP 的写访问权限。 站点 OU 中对象的内容用于在桌面与控制器之间建立信任关系。 请确保:
    • 只有经过授权的管理员才可以使用安全组的访问控制列表 (ACL) 在控制器安全组中添加或删除计算机。
    • 只有经过授权的管理员和各自的控制器才可以更改控制器 SCP 中的信息。
  • 如果部署使用复制,请确保了解潜在的延迟;有关详细信息,请参阅 Microsoft 文档。 如果要在域控制器位于多个 Active Directory 站点的域中创建站点 OU,这一点尤其重要。 如果您在最初创建站点 OU 时、安装或卸载控制器时或者更改控制器名称或通信端口时,对 Active Directory 进行了更改,则在信息被复制到适当的域控制器之前,这些更改可能对桌面不可见,具体取决于桌面、控制器和域控制器的位置。 此类复制延迟的表现包括桌面无法与控制器建立通信,因此不可用于用户连接。
  • 此软件在 Active Directory 中使用多个标准的计算机对象属性来管理桌面。 根据您的部署,存储于桌面的 Active Directory 记录中的计算机对象完全限定的域名,可以包含在返回给用户用以建立连接的连接设置中。 请确保此信息与 DNS 环境中的信息一致。

要使用基于 OU 的 Controller 发现将 Controller 移动到其他站点,请按照上述移动 Controller 的指示操作。 从旧站点删除 Controller(第 2 步)后,运行 PowerShell 脚本 Set-ADControllerDiscover –sync。 该脚本会将 OU 与控制器的当前设置进行同步。 加入现有站点(第 3 步)后,在新站点中的所有控制器上运行相同脚本。