Product Documentation

Delivery Controller 环境

Oct 12, 2015

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

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

Virtual Delivery Agent (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

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

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

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

使用自动更新

启用控制器自动更新策略设置位于 Virtual Delivery Agent 类别中。
  • 要启用自动更新,请启用启用控制器自动更新策略设置。默认情况下,此设置处于启用状态。
  • 要禁用自动更新,请禁用启用控制器自动更新策略设置。

如果启用自动更新,在安装 Virtual Delivery Agent (VDA) 时,VDA 将尝试以在安装 VDA 时指定的其中一个 Delivery 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

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

使用 Citrix 策略设置进行自我管理

更新控制器策略设置中指定的 FQDN 值。此策略设置位于 Virtual Delivery Agent 类别中。

如果部署中还使用 ListOfSIDs,请更新在控制器 SID 策略设置中指定的 SID 值。

使用注册表进行自我管理

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

更新 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 位于此位置。

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

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

添加、删除或移动 Controller

要添加、删除或移动 Delivery Controller,需要具有以下角色或权限:
操作用途服务器角色数据库角色
创建数据库创建合适的空数据库dbcreator 
创建架构创建服务特定的所有架构,并将第一个 Controller 添加到站点securityadmin *db_owner
添加 Controller将 Controller(除第一个外)添加到站点securityadmin *db_owner
添加 Controller(镜像服务器)将 Controller 登录信息添加到当前位于镜像数据库的镜像角色中的数据库服务器securityadmin * 
删除 Controller从站点中删除 Controller db_owner
更新架构应用架构更新或修补程序 db_owner

* 虽然在技术层面上的限制更加严格,但实际上应将 securityadmin 服务器角色视为等同于 sysadmin 服务器角色。

使用 Desktop Studio 执行这些操作时,用户帐户必须明确属于 sysadmin 服务器角色的成员。

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

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

添加 Controller

无法将安装了旧版软件的服务器添加到使用此版本创建的站点中。
  1. 在要添加的服务器上,运行安装程序并选择 Delivery Controller 以及任何其他要安装的核心组件。
  2. 在 Studio 中,单击加入现有部署,并输入站点地址。

删除 Controller

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

注意:确保打开 Controller 的电源,以使 Studio 能够在一小时内加载。Studio 加载要删除的 Controller 时,请在系统提示您关闭 Controller 的电源时执行此操作。

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

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

  1. 在 Studio 的左侧窗格中,选择配置 > Controller,然后选择要删除的 Controller。
  2. 在“操作”窗格中单击删除 Controller。如果没有正确的数据库角色和权限,可以选择生成一个脚本,数据库管理员可以通过该脚本为您删除 Controller。
  3. 您可能需要从数据库服务器中删除 Controller 的计算机帐户。在执行此操作之前,请检查是否有其他服务在使用该帐户。

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

将 Controller 移至其他站点

无法将 Controller 移至使用此软件的早期版本创建的站点。
  1. 在 Controller 当前所在的站点(旧站点)上,在 Studio 的左侧窗格中,选择配置 > Controller,然后选择要移动的 Controller。
  2. 在“操作”窗格中单击删除 Controller。如果没有正确的数据库角色和权限,可以选择生成一个脚本,数据库管理员可以通过该脚本为您删除 Controller。一个站点至少需要一个 Controller,因此无法删除 Studio 中列出的最后一个 Controller。
  3. 在您移动的 Controller 上,打开 Studio,出现相应提示时重置服务,然后单击加入现有站点,并输入新站点的地址。

将 Virtual Delivery Agent (VDA) 移动到其他站点

在升级期间,或者在将测试站点中所创建的 VDA 映像移动到生产站点时,可以将 VDA 移动到其他站点(从站点 1 到站点 2)。有两种方法来完成此操作:使用安装程序或使用 Citrix 策略。

使用安装程序移动 VDA

重要:仅当未使用 Controller 策略设置时,才在安装程序中指定 Delivery Controller。

运行安装程序并添加 Delivery Controller,在站点 2 中为控制器指定 FQDN(DNS 项)。

使用 Citrix 策略移动 VDA

使用组策略编辑器将多个 VDA 在站点之间移动。

例如:
  1. 在站点 1 中创建用于指定以下设置的策略,然后过滤该策略至交付组级别,以在站点间发起分阶段的 VDA 迁移。
    • 控制器 - 包含站点 2 中一个或多个控制器的 FQDN(DNS 项)。
    • 启用控制器自动更新 - 设置为禁用。
  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,而不适用于 VDA for Windows Server。进行基于 Active Directory 的发现时,要求站点中的所有计算机都是域的成员,并且在控制器所使用的域与桌面所使用的域之间存在相互信任的关系。如果您使用此方法,则必须在每个桌面注册表中配置 OU 的 GUID。

要执行基于 OU 的 Controller 发现,请在 Controller 上运行Set-ADControllerDiscovery.ps1PowerShell 脚本(每个 Controller 的文件夹 $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(第 2 步)后,运行 PowerShell 脚本Set-ADControllerDiscover –sync

该脚本会将 OU 与控制器的当前设置进行同步。加入现有站点(第 4 步)后,在新站点中的所有控制器上运行相同脚本。

在控制器上使用 SSL 并更改 HTTP/HTTPS 端口

XML Service 在 Delivery Controller 上运行并支持 HTTP 和 HTTPS 协议。

使用 SSL

对于 HTTPS,XML Service 通过使用服务器证书(而非客户端证书)来支持安全套接字层 (SSL) 功能。要使用 HTTPS,必须在所有 Controller 上获取、安装和注册服务器证书,然后使用 SSL 证书配置端口。

更改默认 HTTP 或 HTTPS 端口

默认情况下,XML Service 在端口 80 上侦听 HTTP 流量,在端口 443 上侦听 HTTPS 流量。尽管可以在控制器上对 HTTP 或 HTTPS 通信使用非默认端口,但请务必记得,这会将控制器暴露给不可信的网络,从而导致安全风险。相比更改默认端口,更好的方式是部署单独的 StoreFront 服务器。

  1. 在 Controller 上运行以下命令:BrokerService.exe -WIPORT http port -WISSLPORT https port

    http port 是 HTTP 通信的端口号,https port是 HTTPS 通信的端口号。

  2. 如果希望 XML Service 忽略默认端口上的 HTTP 或 HTTPS 通信,请在控制器上设置以下注册表值并重新启动 Broker Service。这两个值都位于 HKLM\Software\Citrix\DesktopServer\ 中。
    警告:注册表编辑不当会导致严重问题,可能导致需要重新安装操作系统。Citrix 无法保证因“注册表编辑器”使用不当导致出现的问题能够得以解决。使用“注册表编辑器”需自担风险。在编辑注册表之前,请务必进行备份。
    • 要忽略 HTTP 流量,请将 XmlServicesEnableNonSsl 设置为 0。
    • 要忽略 HTTPS 流量,请将 XmlServicesEnableSsl 设置为 0。