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

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

中断期间
中断开始时:
- 辅助代理开始侦听传入的连接请求,并对其进行处理。
- 中断开始时,辅助代理没有当前的 VDA 注册数据,但当 VDA 与其通信时,会触发注册过程。在此过程中,辅助代理还会获取有关该 VDA 的当前会话信息。
- 当辅助代理正在处理客户端连接时,代理主体会持续监控该连接的状态。当连接恢复正常时,代理主体会指示辅助代理停止侦听连接信息,并且代理主体会重新开始执行其正常的代理操作。下次 VDA 与代理主体进行通信时,就会自动触发一个注册过程。辅助代理会清除上次中断期间遗留的所有 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 Server 精简版 本地数据库
本地主机缓存使用的 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。在您验证本地主机缓存正常工作后,请记住将所有 Controller 恢复到正常模式。这大约需要 15 分钟。
事件日志
事件日志指示同步和中断发生的时间。在事件查看器日志中,中断模式被称为 HA 模式。
配置同步器服务:
在正常操作期间,当 CSS 使用本地主机缓存代理将配置数据导入本地主机缓存数据库时,可能会发生以下事件。
- 503:Citrix 配置同步服务收到更新的配置。此事件指示同步过程的开始。
- 504:Citrix 配置同步服务导入了更新的配置。配置导入成功完成。
- 505:Citrix 配置同步服务导入失败。配置导入未成功完成。如果存在以前成功的配置,则在发生中断时会使用该配置。但是,它将与当前配置不同步。如果没有可用的以前配置,则服务在中断期间无法参与会话代理。在这种情况下,请参阅故障排除部分,并联系 Citrix 支持。
- 507:Citrix 配置同步服务放弃了导入,因为系统处于中断模式,并且本地主机缓存代理正在用于代理。服务收到了新配置,但由于发生中断而放弃了导入。这是预期行为。
- 510:未从主配置服务接收到任何配置服务配置数据。
- 517:与主代理通信时出现问题。
- 518:配置同步脚本中止,因为辅助代理(高可用性服务)未运行。
高可用性服务:
此服务也称为本地主机缓存代理。
- 3502:发生中断,本地主机缓存代理正在执行代理操作。
- 3503:故障已解决,正常操作已恢复。
- 3504:指示哪个本地主机缓存代理已当选,以及参与选举的其他本地主机缓存代理。
- 3507:每 2 分钟提供一次本地主机缓存的状态更新,指示本地主机缓存模式在当选代理上处于活动状态。包含故障摘要,包括故障持续时间、VDA 注册和会话信息。
- 3508:宣布本地主机缓存不再在当选代理上处于活动状态,并且正常操作已恢复。包含故障摘要,包括故障持续时间、本地主机缓存事件期间注册的计算机数量以及 LHC 事件期间成功启动的数量。
- 3509:通知本地主机缓存正在非当选代理上处于活动状态。包含每 2 分钟的故障持续时间,并指示当选代理。
- 3510:宣布本地主机缓存不再在非当选代理上处于活动状态。包含故障持续时间,并指示当选代理。
强制故障
您可能希望故意强制发生故障。
- 如果您的网络反复出现故障。强制故障直到网络问题解决,可以防止在正常模式和故障模式之间持续转换(以及由此导致的频繁 VDA 注册风暴)。
- 测试灾难恢复计划。
- 帮助确保本地主机缓存正常工作。
- 更换或维护站点数据库服务器时。
要强制发生故障,请编辑包含交付控制器的每台服务器的注册表。在 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 |
将代理从本地主机缓存模式中移除。此 cmdlet 仅在其运行所在的交付控制器上禁用本地主机缓存模式。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 Broker 仅保存配置信息。
- 在 LHC 模式下,所选交付控制器上的 LHC Broker 保存以下信息:
- 资源状态
- 会话详细信息
- VDA 注册
- 有关配置的信息