本地主机缓存
为确保 Citrix Virtual Apps and Desktops 站点数据库始终可用,Citrix 建议从容错 SQL Server 部署开始,遵循 Microsoft 的高可用性最佳实践。(有关支持的 SQL Server 高可用性功能,请参阅 数据库。)但是,网络问题和中断可能导致用户无法连接到其应用程序或桌面。
本地主机缓存功能允许在发生中断时,站点中的连接代理操作继续进行。当本地 Citrix® 环境中 Delivery Controller™ 与站点数据库之间的连接失败时,就会发生中断。当站点数据库在 90 秒内无法访问时,本地主机缓存将启用。
自 XenApp 和 XenDesktop 7.16 起,连接租用功能(早期版本中的前身高可用性功能)已从产品中移除,不再可用。
数据内容
本地主机缓存包含以下信息,这些信息是主数据库中信息的子集:
- 被分配了从站点发布的资源权限的用户和组的身份。
- 当前正在使用或最近使用过来自该站点的已发布资源的用户身份。
- 站点中配置的 VDA 计算机(包括远程电脑访问计算机)的身份。
- 正在主动用于连接已发布资源的客户端 Citrix Receiver™ 计算机的身份(名称和 IP 地址)。
它还包含有关当前活动连接的信息,这些连接是在主数据库不可用时建立的:
- 由 Citrix Receiver 执行的任何客户端计算机端点分析的结果。
- 与站点相关的基础架构计算机(例如 NetScaler Gateway 和 StoreFront™ 服务器)的身份。
- 用户最近活动的日期、时间和类型。
工作原理
以下图表展示了本地主机缓存的各个组件及其在正常运行状态下的通信路径。

正常运行期间
- 控制器上的主代理 (Citrix Broker Service) 接受来自 StoreFront 的连接请求。代理与站点数据库通信,以将用户与已向控制器注册的 VDA 连接。
- Citrix 配置同步服务 (CSS) 大约每 5 分钟检查一次代理,以查看是否进行了任何更改。这些更改可以是管理员发起(例如更改交付组属性)或系统操作(例如计算机分配)。
-
如果自上次检查以来发生了配置更改,CSS 会将信息同步(复制)到控制器上的辅助代理。(辅助代理也称为高可用性服务。)
所有配置数据都会被复制,而不仅仅是自上次检查以来发生更改的项目。CSS 将配置数据导入到控制器上的 Microsoft SQL Server Express LocalDB 数据库中。此数据库称为本地主机缓存数据库。CSS 确保本地主机缓存数据库中的信息与站点数据库中的信息匹配。每次同步时都会重新创建本地主机缓存数据库。
安装控制器时,会自动安装 Microsoft SQL Server Express LocalDB(由本地主机缓存数据库使用)。(在从命令行安装控制器时,可以禁止安装此项。)本地主机缓存数据库无法在控制器之间共享。您无需备份本地主机缓存数据库。每次检测到配置更改时,都会重新创建该数据库。
- 如果自上次检查以来未发生任何更改,则不会复制任何数据。
以下图表展示了当主代理与站点数据库失去连接时(即中断开始),通信路径所发生的变化。

中断期间
当中断开始时:
- 辅助代理开始监听连接请求,并对其进行处理。
- 当中断开始时,辅助代理没有当前的 VDA 注册数据,但当 VDA 与其通信时,会触发注册过程。在此过程中,辅助代理还会获取有关该 VDA 的当前会话信息。
- 当辅助代理处理连接时,Brokering Principal 会继续监视连接。连接恢复后,Brokering Principal 会指示辅助代理停止侦听连接信息,然后 Brokering Principal 会恢复代理操作。VDA 下次与 Brokering Principal 通信时,将触发注册过程。辅助代理会删除上次中断中剩余的任何 VDA 注册。当 CSS 得知部署中发生了配置更改时,它会恢复同步信息。
在极不可能发生的情况下,如果在同步过程中发生中断,当前的导入操作将被废弃,并使用上次已知的配置。
事件日志 提供有关同步和中断的信息。
在中断模式下运行没有施加时间限制。
正常模式和中断模式之间的转换不影响现有会话。它仅影响新会话的启动。
您也可以有意触发中断。有关这样做的原因和方法,请参阅强制中断。
具有多个控制器的站点
除其他任务外,CSS 会定期向辅助代理提供有关区域中所有控制器的信息。(如果您的部署不包含多个区域,此操作会影响站点中的所有控制器。)拥有该信息后,每个辅助代理都知道区域中其他控制器上运行的所有对等辅助代理。
辅助代理通过单独的通道相互通信。这些代理使用其运行的计算机的 FQDN 名称的字母顺序列表来确定(选举)如果发生中断,哪个辅助代理将负责区域中的代理操作。在中断期间,所有 VDA 都向选定的辅助代理注册。区域中未被选定的辅助代理会主动拒绝传入的连接和 VDA 注册请求。
如果选定的辅助代理在中断期间发生故障,将选举另一个辅助代理来接管,并且 VDA 会向新选定的辅助代理注册。
在中断期间,如果控制器重新启动:
- 如果该控制器不是选定的代理,则重新启动没有影响。
- 如果该控制器是选定的代理,将选举另一个控制器,导致 VDA 注册。重新启动的控制器通电后,它会自动接管代理,这会导致 VDA 再次注册。在这种情况下,注册期间的性能可能会受到影响。
如果您在正常操作期间关闭控制器,然后在中断期间将其打开,则如果该控制器被选为代理,则无法在该控制器上使用本地主机缓存。
事件日志 提供有关选举的信息。
停机期间哪些功能不可用,以及其他差异
在停机模式下运行没有强制的时间限制。然而,Citrix 建议尽快恢复连接。
停机期间:
- 您无法使用 Studio。
-
您对 PowerShell SDK 的访问权限有限。
- 您必须首先:
- 添加注册表项
EnableCssTestMode,其值为 1:New-ItemProperty -Path HKLM:\SOFTWARE\Citrix\DesktopServer\LHC -Name EnableCssTestMode -PropertyType DWORD -Value 1 - 使用端口 89:
Get-BrokerMachine -AdminAddress localhost:89 | Select MachineName, ControllerDNSName, DesktopGroupName, RegistrationState
- 添加注册表项
- 运行这些命令后,您可以访问:
- 所有
Get-Broker*命令。
- 所有
- 您必须首先:
- 无法从主机服务获取管理程序凭据。所有计算机都处于未知电源状态,并且无法发出任何电源操作。但是,主机上已开机的 VM 可用于连接请求。
- 仅当在正常操作期间进行分配时,才能使用已分配的计算机。停机期间无法进行新的分配。
- 无法自动注册和配置远程电脑访问计算机。但是,在正常操作期间已注册和配置的计算机是可用的。
- 如果资源位于不同的区域,服务器托管的应用程序和桌面用户可能会使用超出其配置会话限制的会话。
- 用户只能从包含当前活动/选定辅助代理的区域中的已注册 VDA 启动应用程序和桌面。停机期间不支持跨区域启动(从一个区域中的辅助代理到不同区域中的 VDA)。
- 如果在交付组中 VDA 的计划重启开始之前发生站点数据库中断,则重启将在中断结束时开始。这可能会导致意外结果。有关详细信息,请参阅 由于数据库中断导致计划重启延迟。
- 无法配置 区域首选项。如果已配置,则在会话启动时不会考虑首选项。
- 会话启动不支持使用标签指定区域的 标签限制。如果配置了此类标签限制,并且启用了 StoreFront 商店的 高级健康检查 选项,则会话可能会间歇性地启动失败。
应用程序和桌面支持
LHC 支持以下类型的 VDA 和交付模型:
| VDA 类型 | 交付模型 | LHC 事件期间的 VDA 可用性 |
|---|---|---|
| 多会话操作系统 | 应用程序和桌面 | 始终可用。 |
| 单会话操作系统静态(已分配) | 桌面 | 始终可用。 |
| 电源管理单会话操作系统随机(池化)
|
桌面
|
默认情况下不可用。默认情况下,所有针对池化交付组中电源管理型 VDA 的会话启动尝试都将失败。
您可以在 LHC 事件期间使其可用于新连接。有关详细信息,请参阅 使用 Web Studio 启用 和 使用 PowerShell 启用。 重要提示: 启用对电源管理型单会话池化计算机的访问可能会导致先前用户会话中的数据和更改出现在后续会话中。 |
注意:
在池化交付组中启用对电源管理型桌面 VDA 的访问不会影响配置的
ShutdownDesktopsAfterUse属性在正常操作期间的工作方式。在 LHC 期间启用对这些桌面的访问时,VDA 不会在 LHC 事件完成后自动重启。池化交付组中的电源管理型桌面 VDA 可以保留先前会话中的数据,直到 VDA 重启。VDA 重启可能发生在用户在非 LHC 操作期间注销 VDA 时,或者管理员重启 VDA 时。
使用 Web Studio 为电源管理型单会话操作系统池化 VDA 启用 LHC
使用 Web Studio,您可以在 LHC 事件期间按交付组使这些计算机可用于新连接:
注意:
此设置仅在 Web Studio 中适用于交付电源管理型 VDA 的池化桌面交付组。
使用 PowerShell 为电源管理型单会话操作系统池化 VDA 启用 LHC
要在特定交付组中为 VDA 启用 LHC,请执行以下步骤:
-
通过运行此命令在站点级别启用此功能:
Set-BrokerSite -ReuseMachinesWithoutShutdownInOutageAllowed $true -
通过运行此命令并指定交付组名称,为交付组启用 LHC:
Set-BrokerDesktopGroup -Name "name" -ReuseMachinesWithoutShutdownInOutage $true
要更改新创建的、具有电源管理型 VDA 的池化交付组的默认 LHC 可用性,请运行以下命令:
Set-BrokerSite -DefaultReuseMachinesWithoutShutdownInOutage $true
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 需求会更高。站点(区域)中的每个辅助代理都必须能够处理本地主机缓存数据库和所有受影响的 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 可能需要 10 分钟或更长时间才能完成。
与 XenApp 6.x 版本的差异
尽管此本地主机缓存实现与 XenApp 6.x 及更早的 XenApp 版本中的本地主机缓存功能同名,但存在显著改进。此实现更健壮,不易损坏。维护要求已降至最低,例如,无需定期执行 dsmaint 命令。从技术上讲,此本地主机缓存是完全不同的实现。
管理本地主机缓存
要使本地主机缓存正常工作,每个控制器上的 PowerShell 执行策略必须设置为 RemoteSigned、Unrestricted 或 Bypass。
SQL 服务器 Express 本地数据库
本地主机缓存使用的 Microsoft SQL Server Express LocalDB 软件会在您安装控制器或将控制器从 7.9 之前的版本升级时自动安装。只有辅助代理与此数据库通信。您不能使用 PowerShell cmdlet 更改此数据库的任何内容。LocalDB 不能在控制器之间共享。
无论是否启用本地主机缓存,都会安装 SQL Server Express LocalDB 数据库软件。
为防止其安装,请使用 XenDesktopServerSetup.exe 命令安装或升级控制器,并包含 /exclude "Local Host Cache Storage (LocalDB)" 选项。但是,请记住,如果没有此数据库,本地主机缓存功能将无法工作,并且您不能将其他数据库与辅助代理一起使用。
此 LocalDB 数据库的安装对您是否安装 SQL Server Express 作为站点数据库没有影响。
有关将早期 SQL Server Express 本地数据库 版本替换为新版本的信息,请参阅 替换 SQL Server Express 本地数据库。
产品安装和升级过程后的默认设置
在Citrix Virtual Apps and Desktops(最低版本7.16)的新安装过程中,本地主机缓存已启用。
升级到版本7.16或更高版本后,如果整个部署中的VDA数量少于10,000个,则会启用本地主机缓存。
启用和禁用本地主机缓存
-
要启用本地主机缓存,请输入:
Set-BrokerSite -LocalHostCacheEnabled $true要确定本地主机缓存是否已启用,请输入
Get-BrokerSite。检查LocalHostCacheEnabled属性是否为True。 -
要禁用本地主机缓存,请输入:
Set-BrokerSite -LocalHostCacheEnabled $false
请记住:自XenApp and XenDesktop 7.16起,连接租用(在版本7.6中开始,早于本地主机缓存的功能)已从产品中移除,不再可用。
验证本地主机缓存是否正常工作
要验证本地主机缓存是否已正确设置并正常工作:
- 确保同步导入成功完成。检查事件日志。
- 确保在每个Delivery Controller上创建了SQL Server Express LocalDB数据库。这确认了辅助代理可以在需要时接管。
- 在交付控制器服务器上,浏览到
C:\Windows\ServiceProfiles\NetworkService。 - 验证
HaDatabaseName.mdf和HaDatabaseName_log.ldf是否已创建。
- 在交付控制器服务器上,浏览到
- 在 Delivery Controller 上(#force-an-outage)。在您验证本地主机缓存正常工作后,请记住将所有 Controller 恢复到正常模式。这大约需要 15 分钟。
事件日志
事件日志指示同步和中断发生的时间。在事件查看器日志中,中断模式被称为 HA 模式。
配置同步器服务:
在正常操作期间,当 CSS 使用本地主机缓存代理将配置数据导入本地主机缓存数据库时,可能会发生以下事件。
- 503:Citrix 配置同步服务收到更新的配置。此事件表示同步过程的开始。
- 504:Citrix 配置同步服务导入了更新的配置。配置导入成功完成。
- 505:Citrix 配置同步服务导入失败。配置导入未成功完成。如果存在以前成功的配置,则在发生中断时将使用该配置。但是,它将与当前配置不同步。如果没有可用的以前配置,则服务在中断期间无法参与会话代理。在这种情况下,请参阅(#troubleshoot)部分,并联系 Citrix 支持。
- 507:Citrix 配置同步服务放弃了导入,因为系统处于中断模式,并且正在使用本地主机缓存代理进行代理。服务收到了新配置,但由于发生中断而放弃了导入。这是预期行为。
- 510: 未从主要的配置服务接收到配置服务的配置数据。
- 517:与主代理通信时出现问题。
- 518:配置同步脚本已中止,因为辅助代理(高可用性服务)未运行。
高可用性服务:
此服务也称为本地主机缓存代理。
- 3502:发生中断,本地主机缓存代理正在执行代理操作。
- 3503:故障已解决,正常操作已恢复。
- 3504:指示哪个本地主机缓存代理已当选,以及参与选举的其他本地主机缓存代理。
- 3507:每 2 分钟提供一次本地主机缓存的状态更新,指示本地主机缓存模式在当选代理上处于活动状态。包含故障摘要,包括故障持续时间、VDA 注册和会话信息。
- 3508:宣布本地主机缓存不再在当选代理上处于活动状态,并且正常操作已恢复。包含故障摘要,包括故障持续时间、本地主机缓存事件期间注册的计算机数量以及 LHC 事件期间成功启动的数量。
- 3509:通知本地主机缓存在未当选代理上处于活动状态。每 2 分钟包含一次故障持续时间,并指示当选代理。
- 3510:宣布本地主机缓存不再在未当选代理上处于活动状态。包含故障持续时间并指示当选代理。
强制故障
您可能希望故意强制发生故障。
- 如果您的网络反复出现故障。强制故障直到网络问题解决,可以防止正常模式和故障模式之间的持续转换(以及由此导致的频繁 VDA 注册风暴)。
- 测试灾难恢复计划。
- 帮助确保本地主机缓存正常工作。
- 在更换或维护站点数据库服务器时。
要强制发生故障,请编辑包含 Delivery Controller 的每个服务器的注册表。在 HKLM\Software\Citrix\DesktopServer\LHC 中,创建并将 OutageModeForced 设置为 REG_DWORD 到 1。此设置指示本地主机缓存代理进入故障模式,无论数据库状态如何。将值设置为 0 会使本地主机缓存代理退出故障模式。
要验证事件,请监视 C:\ProgramData\Citrix\WorkspaceCloud\Logs\Plugins\HighAvailabilityService 中的 Current_HighAvailabilityService 日志文件。
故障排除
当同步导入到本地主机缓存数据库失败并发布 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。
本地主机缓存 PowerShell 命令
您可以使用 PowerShell 命令在交付控制器上管理本地主机缓存 (LHC)。
PowerShell 模块位于交付控制器上的以下位置:
C:\Program Files\Citrix\Broker\Service\ControlScripts
重要提示:
仅在交付控制器上运行此模块。
导入 PowerShell 相关的模块
要在 Delivery Controller 上导入模块,请运行以下命令。
cd C:\Program Files\Citrix\Broker\Service\ControlScripts
Import-Module .\HighAvailabilityServiceControl.psm1
用于管理本地主机缓存的 PowerShell 命令
以下命令可帮助您在 Delivery Controller 上激活和管理 LHC 模式。
| 命令 | 功能 |
|---|---|
Enable-LhcForcedOutageMode |
将 Broker 置于 LHC 模式。ConfigSync Service 必须已成功创建 LHC 数据库文件,Enable-LhcForcedOutageMode 才能正常运行。此 cmdlet 仅在运行它的 Delivery Controller 上强制启用 LHC。要使 LHC 处于活动状态,必须在区域内的所有 Delivery Controller 上运行此命令。 |
Disable-LhcForcedOutageMode |
使代理退出 LHC 模式。此命令小程序仅禁用其运行所在交付控制器上的 LHC 模式。Disable-LhcForcedOutageMode 必须在区域内的所有交付控制器上运行。 |
Set-LhcConfigSyncIntervalOverride |
设置 Citrix Config Synchronizer Service (CSS) 检查站点内配置更改的时间间隔。时间间隔范围为 60 秒(一分钟)到 3600 秒(一小时)。此设置仅适用于运行它的 Delivery Controller。为了在所有 Delivery Controller 之间保持一致性,请考虑在每个 Delivery Controller 上运行此 cmdlet。例如:Set-LhcConfigSyncIntervalOverride -Seconds 1200
|
Clear-LhcConfigSyncIntervalOverride |
将 Citrix 配置同步服务 (CSS) 检查站点内配置更改的间隔设置为默认值 300 秒(五分钟)。此设置仅适用于运行它的 Delivery Controller。为了在所有 Delivery Controller 之间保持一致性,请考虑在每个 Delivery Controller 上运行此 cmdlet。 |
Enable-LhcHighAvailabilitySDK |
启用对运行此命令的交付控制器中所有 Get-Broker* cmdlet 的访问。 |
Disable-LhcHighAvailabilitySDK |
禁用对运行此命令的交付控制器中代理 cmdlet 的访问。 |
注意:
- 在交付控制器上运行
Get-Broker*cmdlet 时,请使用端口 89。例如:
Get-BrokerMachine -AdminAddress localhost:89- 当不在 LHC 模式下时,交付控制器上的 LHC 代理仅保存配置信息。
- 在 LHC 模式下,当选的交付控制器上的 LHC 代理包含以下信息:
- 资源状态
- 会话详细信息
- VDA 注册
- 配置相关的信息