本地主机缓存
为确保 XenApp 和 XenDesktop 站点数据库始终可用,Citrix 建议遵循 Microsoft 的高可用性最佳实践,从容错 SQL Server 部署开始。((/zh-cn/xenapp-and-xendesktop/7-15-ltsr/system-requirements.html) 文章中的“数据库”部分列出了 XenApp 和 XenDesktop 中支持的 SQL Server 高可用性功能。)但是,网络问题和中断可能导致用户无法连接到其应用程序或桌面。
本地主机缓存 (LHC) 功能允许 XenApp 或 XenDesktop 站点中的连接代理操作在发生中断时继续进行。当 Delivery Controller™ 与站点数据库之间的连接失败时,就会发生中断。当站点数据库在 90 秒内无法访问时,本地主机缓存将启用。
本地主机缓存是 XenApp 和 XenDesktop 中最全面的高可用性功能。它是 XenApp 7.6 中引入的连接租用功能更强大的替代方案。
尽管此本地主机缓存实现与 XenApp 6.x 及更早版本 XenApp 版本中的本地主机缓存功能同名,但它有显著改进。此实现更强大,不易损坏。维护要求已降至最低,例如无需定期执行 dsmaint 命令。从技术上讲,此本地主机缓存是一个完全不同的实现;请继续阅读以了解其工作原理。
注意:
尽管 7.15 LTSR 版本支持连接租用,但它将在后续版本中移除。
数据内容
本地主机缓存包含以下信息,这些信息是主数据库中信息的子集:
- 那些被明确授予了访问站点发布的资源权限的用户和组的身份信息。
- 当前正在使用或最近使用过站点发布的资源的用户的身份信息。
- 在站点中配置的 VDA 计算机(包括远程 PC 访问计算机)的身份。
- 正在积极用于连接已发布资源的客户端 Citrix Receiver™ 计算机的身份(名称和 IP 地址)。
它还包含当前活动连接的信息,这些连接是在主数据库不可用时建立的:
- Citrix Receiver 执行的任何客户端计算机端点分析的结果。
- 与站点相关的基础设施机器(例如 NetScaler Gateway 和 StoreFront™ 服务器)的身份。
- 用户最近活动的日期、时间和类型。
工作原理
下图阐释了本地主机缓存的组件及其在正常运行期间的通信路径。

正常运行期间:
- 控制器上的主代理 (Citrix Broker Service) 接受来自 StoreFront 的连接请求,并与站点数据库通信,以将用户与已向控制器注册的 VDA 连接起来。
- 每两分钟检查一次,以确定主代理的配置是否已更改。这些更改可能由 PowerShell/Studio 操作(例如更改交付组属性)或系统操作(例如计算机分配)发起。
- 如果自上次检查以来已进行更改,主代理将使用 Citrix 配置同步服务 (CSS) 将信息同步(复制)到控制器上的辅助代理 (Citrix High Availability Service)。所有代理配置数据都将被复制,而不仅仅是自上次检查以来已更改的项目。辅助代理将数据导入控制器上的 Microsoft SQL Server Express LocalDB 数据库。CSS 确保辅助代理的 LocalDB 数据库中的信息与站点数据库中的信息匹配。每次同步时都会重新创建 LocalDB 数据库。
- 如果自上次检查以来未发生任何更改,则不复制任何数据。
下图阐释了当主代理与站点数据库失去联系(即发生中断)时,通信路径所发生的变化:

中断开始时:
- 主代理无法再与站点数据库通信,并停止侦听 StoreFront 和 VDA 信息(在图中标记为 X)。然后,主代理指示辅助代理 (High Availability Service) 开始侦听和处理连接请求(在图中用红色虚线标记)。
- 中断开始时,辅助代理没有当前的 VDA 注册数据,但只要有 VDA 与其通信,就会触发重新注册过程。在此过程中,辅助代理还会获取有关该 VDA 的当前会话信息。
- 当辅助代理处理连接时,主代理会继续监视与站点数据库的连接。连接恢复后,主代理会指示辅助代理停止侦听连接信息,然后主代理会恢复代理操作。VDA 下次与主代理通信时,将触发重新注册过程。辅助代理会删除上次中断中所有剩余的 VDA 注册,并恢复使用从 CSS 接收的配置更改更新 LocalDB 数据库。
在极少数情况下,如果同步期间发生中断,则会放弃当前导入并使用上次已知的配置。
事件日志提供有关同步和中断的信息。有关详细信息,请参阅下面的“监视”部分。
您也可以有意触发中断;有关执行此操作的原因和方式的详细信息,请参阅下面的“强制中断”部分。
具有多个 Controller 的站点
除其他任务外,CSS 会定期向辅助代理提供区域中所有 Controller 的信息。(如果您的部署不包含多个区域,则此操作会影响站点中的所有 Controller。)获得该信息后,每个辅助代理都会了解所有对等辅助代理。
辅助代理通过单独的通道相互通信。它们使用其运行所在计算机的 FQDN 名称的字母顺序列表来确定(选举)如果发生中断,哪个辅助代理将负责区域中的代理操作。中断期间,所有 VDA 都会向当选的辅助代理重新注册。区域中未当选的辅助代理将主动拒绝传入连接和 VDA 注册请求。
如果当选的辅助代理在中断期间发生故障,则会选举另一个辅助代理接管,并且 VDA 将向新当选的辅助代理重新注册。
中断期间,如果 Controller 重新启动:
- 如果该 Controller 不是当选的主代理,则重新启动没有影响。
- 如果该 Controller 是当选的主代理,则会选举另一个 Controller,从而导致 VDA 重新注册。重新启动的 Controller 启动后,它会自动接管代理,这会导致 VDA 再次重新注册。在这种情况下,重新注册期间的性能可能会受到影响。
如果在正常操作期间关闭 Controller,然后在中断期间将其打开,则如果该 Controller 被选为主代理,则无法在该 Controller 上使用本地主机缓存。
事件日志提供有关选举的信息。请参阅下面的“监视”部分。
设计时需要考虑的因素和要求
本地主机缓存支持服务器托管的应用程序和桌面以及静态(分配的)桌面;不支持池化 VDI 桌面(由 MCS 或 PVS 创建)。
对在中断模式下运行没有时间限制。但是,请尽快将站点恢复到正常运行状态。
中断期间不可用或发生更改的内容:
- 您无法使用 Studio 控制台或运行 PowerShell 命令。
- 无法从主机服务获取虚拟机管理程序凭据。所有计算机都处于未知电源状态,并且无法发出任何电源操作。但是,主机上已开机的 VM 可用于连接请求。
- 仅当在正常操作期间进行分配时,才能使用已分配的计算机。中断期间无法进行新的分配。
- 无法自动注册和配置远程电脑访问计算机。但是,在正常操作期间已注册和配置的计算机是可用的。
- 如果资源位于不同的区域,则服务器托管的应用程序和桌面用户使用的会话可能超出其配置的会话限制。
- 用户只能从包含当前活动/选定(辅助)代理的区域中的已注册 VDA 启动应用程序和桌面。中断期间不支持跨区域启动(从一个区域中的代理到不同区域中的 VDA)。
默认情况下,当发生中断时,已启用 ShutdownDesktopsAfterUse 属性的池式交付组中的电源管理桌面 VDA 将置于维护模式。您可以更改此默认设置,以允许这些桌面在中断期间使用。但是,您不能依赖中断期间的电源管理。(电源管理在正常操作恢复后恢复。)此外,这些桌面可能包含来自以前用户的数据,因为它们尚未重新启动。
要覆盖默认行为,您必须在站点范围内以及为每个受影响的交付组启用它。
对于站点,运行以下 PowerShell 命令:
Set-BrokerSite -ReuseMachinesWithoutShutdownInOutageAllowed $true
对于每个受影响的交付组,运行以下 PowerShell cmdlet:
Set-BrokerDesktopGroup -Name "\<*name*\>" -ReuseMachinesWithoutShutdownInOutage $true
在站点和交付组中启用此功能不会影响配置的 ShutdownDesktopsAfterUse 属性在正常操作期间的工作方式。
RAM 大小:
LocalDB 服务大约可以使用 1.2 GB 的 RAM(其中数据库缓存最多占用 1 GB,运行 SQL Server Express LocalDB 占用 200 MB)。如果中断持续时间较长且发生大量登录(例如,12 小时内有 1 万用户登录),高可用性服务最多可以使用 1 GB 的 RAM。这些内存要求是控制器正常 RAM 要求的额外部分,因此您可能需要增加 RAM 总容量。
请注意,如果您将 SQL Server Express 安装用于站点数据库,则服务器将有两个 sqlserver.exe 进程。
CPU 核心和套接字配置:
控制器的 CPU 配置,特别是可用于 SQL Server Express LocalDB 的核心数量,直接影响本地主机缓存性能,甚至比内存分配的影响更大。此 CPU 开销仅在数据库无法访问且高可用性服务处于活动状态的中断期间才会出现。
虽然 LocalDB 可以使用多个核心(最多 4 个),但它仅限于单个套接字。添加更多套接字不会提高性能(例如,4 个套接字,每个套接字 1 个核心)。相反,Citrix 建议使用具有多个核心的多个套接字。在 Citrix 测试中,2x3(2 个套接字,3 个核心)配置比 4x1 和 6x1 配置提供了更好的性能。
存储:
当用户在中断期间访问资源时,LocalDB 会增长。例如,在以每秒 10 次登录运行的登录/注销测试期间,数据库每 2-3 分钟增长 1 MB。当正常操作恢复时,本地数据库会重新创建并释放空间。但是,代理必须在安装 LocalDB 的驱动器上具有足够的空间,以允许数据库在中断期间增长。本地主机缓存还在中断期间产生额外的 I/O:大约每秒 3 MB 的写入,以及数十万次读取。
性能:
在中断期间,一个代理处理所有连接,因此在正常操作期间在多个控制器之间进行负载平衡的站点(或区域)中,选定的代理可能需要在中断期间处理比正常情况多得多的请求。因此,CPU 需求会更高。站点(区域)中的每个代理都必须能够处理 LocalDB 和所有受影响的 VDA 施加的额外负载,因为在中断期间选定的代理可能会发生变化。
VDI 限制:
- 在单区域 VDI 部署中,中断期间最多可有效处理 10,000 个 VDA。
- 在多区域 VDI 部署中,中断期间每个区域最多可有效处理 10,000 个 VDA,站点中最多可处理 40,000 个 VDA。例如,中断期间可以有效处理以下每个站点:
- 一个包含四个区域的站点,每个区域包含 10,000 个 VDA。
- 一个包含七个区域的站点,其中一个区域包含 10,000 个 VDA,另外六个区域每个包含 5,000 个 VDA。
在中断期间,站点的负载管理可能会受到影响。负载评估器(尤其是会话计数规则)可能会超出限制。
在所有 VDA 重新向代理注册期间,该代理可能无法获得有关当前会话的完整信息。因此,在此期间的用户连接请求可能会导致启动新会话,即使可以重新连接到现有会话。此间隔(即“新”代理在重新注册期间从所有 VDA 获取会话信息的时间)是不可避免的。请注意,在中断开始时已连接的会话在转换期间不受影响,但新会话和会话重新连接可能会受到影响。
每当 VDA 必须重新向不同的代理注册时,就会出现此间隔:
- 中断开始:当从主代理迁移到辅助代理时,即会发生中断。
- 中断期间代理故障:从发生故障的辅助代理迁移到新选出的辅助代理时。
- 从中断中恢复:当正常操作恢复,并且主代理重新取得控制权时,系统便会恢复正常。
您可以通过降低 Citrix Broker Protocol 的 HeartbeatPeriodMs 注册表值来缩短此间隔(默认值 = 600000 毫秒,即 10 分钟)。此心跳值是 VDA 用于 ping 的间隔的两倍,因此默认值会导致每 5 分钟 ping 一次。
例如,以下命令将心跳更改为五分钟(300000 毫秒),这将导致每 2.5 分钟 ping 一次:
New-ItemProperty -Path HKLM:\SOFTWARE\Citrix\DesktopServer -Name HeartbeatPeriodMs -PropertyType DWORD –Value 300000
无论 VDA 注册速度多快,此间隔都无法完全消除。
代理之间同步所需的时间会随着对象数量(例如 VDA、应用程序、组)的增加而增加。例如,同步 5000 个 VDA 可能需要十分钟或更长时间才能完成。有关事件日志中同步条目的信息,请参阅下面的“监视”部分。
管理本地主机缓存
为使本地主机缓存正常工作,每个控制器上的 PowerShell 执行策略必须设置为 RemoteSigned、Unrestricted 或 Bypass。
SQL Server Express LocalDB
本地主机缓存使用的 Microsoft SQL Server Express LocalDB 在您安装控制器或将控制器从 7.9 之前的版本升级时会自动安装。LocalDB 不需要管理员维护。只有辅助代理与此数据库通信;您不能使用 PowerShell cmdlet 更改此数据库的任何内容。LocalDB 不能在控制器之间共享。
无论是否启用本地主机缓存,都会安装 SQL Server Express LocalDB 数据库软件。
为防止其安装,请使用 XenDesktopServerSetup.exe 命令安装或升级 Controller,并包含 /exclude “Local Host Cache Storage (LocalDB)” 选项。但是,请记住,如果没有数据库,本地主机缓存功能将无法工作,并且不能将不同的数据库与辅助代理一起使用。
安装此 LocalDB 数据库不会影响您是否安装 SQL Server Express 作为站点数据库。
XenApp 或 XenDesktop® 安装和升级后的默认设置
在 XenApp® 和 XenDesktop 的新安装过程中,本地主机缓存默认启用。(连接租用默认禁用。)
升级后,本地主机缓存设置保持不变。例如,如果早期版本中启用了本地主机缓存,则在升级版本中仍保持启用状态。如果早期版本中禁用了本地主机缓存(或不支持),则在升级版本中仍保持禁用状态。
启用和禁用本地主机缓存
要启用本地主机缓存,请输入:
Set-BrokerSite -LocalHostCacheEnabled $true -ConnectionLeasingEnabled $false
此 cmdlet 还会禁用连接租用功能。请勿同时启用本地主机缓存和连接租用。
要确定是否启用了本地主机缓存,请输入:
Get-BrokerSite
Check that the LocalHostCacheEnabled property is True, and that the ConnectionLeasingEnabled property is False.
要禁用本地主机缓存(并启用连接租用),请输入:
Set-BrokerSite -LocalHostCacheEnabled $false -ConnectionLeasingEnabled $true
验证本地主机缓存是否正常工作
要验证本地主机缓存是否已正确设置并正常工作,请执行以下操作:
- 确保同步导入成功完成。检查事件日志。
- 确保已在每个 Delivery Controller 上创建 SQL Server Express LocalDB 数据库。这确认了高可用性服务可以在需要时接管。
- On the Delivery Controller server, browse to C:\Windows\ServiceProfiles\NetworkService.
- 请务必检查 HaDatabaseName.mdf 和 HaDatabaseName_log.ldf 这两个文件是否已经成功创建并存在于指定位置。
- 在 Delivery Controller 上强制中断。验证本地主机缓存正常工作后,请记住将所有 Controller 恢复到正常模式。这可能需要大约 15 分钟,以避免 VDA 注册风暴。
强制中断
您可能希望故意强制数据库中断。
- 如果您的网络反复出现故障。强制中断直到网络问题解决,可以防止在正常模式和中断模式之间持续转换。
- 测试灾难恢复计划。
- 更换或维护站点数据库服务器时。
要强制中断,请编辑包含 Delivery Controller 的每台服务器的注册表。
- 在 HKLM\Software\Citrix\DesktopServer\LHC 中,将 OutageModeForced 设置为 1。这会指示代理进入中断模式,无论数据库状态如何。(将值设置为 0 会使服务器退出中断模式。)
- 在 Citrix Cloud™ 场景中,连接器进入中断模式,无论与控制平面或主区域的连接状态如何。
监视
事件日志指示同步和中断发生的时间。
配置同步器服务:
在正常操作期间,当 CSS 复制并导出代理配置并使用高可用性服务(辅助代理)将其导入 LocalDB 时,可能会发生以下事件。
- 503:在主代理配置中发现更改,正在开始导入。
- 504:代理配置已成功复制、导出并导入到 LocalDB。
- 505:导入 LocalDB 失败;有关详细信息,请参见下文。
- 510:没有收到来自主配置服务的配置服务配置数据。
- 517:与主代理通信时出现问题。
- 518:配置同步脚本已中止,因为辅助代理(高可用性服务)未运行。
高可用性服务:
- 3502:发生中断,辅助代理(高可用性服务)正在执行代理操作。
- 3503:中断已解决,正常操作已恢复。
- 3504:指示哪个辅助代理被选中,以及参与选举的其他代理。
故障排除
当同步导入到 LocalDB 失败并发布 505 事件时,可以使用多种故障排除工具。
CDF 跟踪: 包含 ConfigSyncServer 和 BrokerLHC 模块的选项。这些选项以及其他代理模块可能会识别出问题。
报告: 如果同步导入失败,您可以生成一份报告。此报告会在导致错误的对象处停止。此报告功能会影响同步速度,因此 Citrix 建议在不使用时禁用它。
要启用并生成 CSS 跟踪报告,请输入以下命令:
New-ItemProperty -Path HKLM:\SOFTWARE\Citrix\DesktopServer\LHC -Name EnableCssTraceMode -PropertyType DWORD -Value 1
HTML 报告发布在 C:\\Windows\\ServiceProfiles\\NetworkService\\AppData\\Local\\Temp\\CitrixBrokerConfigSyncReport.html。
报告生成完毕后,请输入以下命令以禁用报告功能:
Set-ItemProperty -Path HKLM:\SOFTWARE\Citrix\DesktopServer\LHC -Name EnableCssTraceMode -Value 0
导出代理配置: 提供用于调试的精确配置。
Export-BrokerConfiguration | Out-File file-pathname
例如,Export-BrokerConfiguration | Out-File C:\\BrokerConfig.xml。