本地主机缓存
为确保 Citrix Virtual Apps and Desktops 站点数据库始终可用,Citrix 建议从容错 SQL Server 部署开始,遵循 Microsoft 的高可用性最佳实践。(有关支持的 SQL Server 高可用性功能,请参阅 数据库。)但是,网络问题和中断可能导致用户无法连接到其应用程序或桌面。
本地主机缓存功能允许在发生中断时,站点中的连接代理操作继续进行。当本地 Citrix® 环境中 Delivery Controller™ 与站点数据库之间的连接失败时,就会发生中断。当站点数据库在 90 秒内无法访问时,本地主机缓存将启用。
从 XenApp 和 XenDesktop 7.16 开始,连接租用功能(早期版本中的前身高可用性功能)已从产品中移除,不再可用。
数据内容
本地主机缓存包含以下信息,这些信息是主数据库中信息的子集:
- 被授予访问从站点发布的资源权限的用户和组的身份信息。
- 那些当前正在使用或最近使用过从站点发布的资源的用户,其身份信息。
- 在站点中配置的 VDA 计算机(包括远程 PC 访问计算机)的身份。
- 正在主动用于连接到已发布资源的客户端 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 检测到部署中已经发生了配置更改时,它会立即恢复信息的同步过程。
在极少数情况下,如果在同步过程中发生故障,则当前的导入操作将被废弃,并采用上次已知的配置。
(#event-logs) 提供了有关同步和中断的信息。
在中断模式下运行没有时间限制。
正常模式和中断模式之间的转换不会影响现有会话。它仅影响新会话的启动。
您也可以有意触发中断。有关执行此操作的原因和方式的详细信息,请参阅 (#force-an-outage)。
具有多个控制器的站点
除其他任务外,CSS 会定期向辅助代理提供有关区域中所有控制器的信息。(如果您的部署不包含多个区域,则此操作会影响站点中的所有控制器。)拥有该信息后,每个辅助代理都会了解区域中在其他控制器上运行的所有对等辅助代理。
辅助代理通过单独的通道相互通信。这些代理使用其运行所在计算机的 FQDN 名称的字母顺序列表来确定(选举)如果发生中断,哪个辅助代理将成为区域中的代理操作。中断期间,所有 VDA 都向当选的辅助代理注册。区域中未当选的辅助代理会主动拒绝传入连接和 VDA 注册请求。
如果在中断期间当选的辅助代理发生故障,则会选举另一个辅助代理接管,并且 VDA 会向新当选的辅助代理注册。
在中断期间,如果控制器重新启动:
- 如果该控制器不是当选的代理,则重新启动没有影响。
- 如果该控制器是当选的代理,则会选举另一个控制器,导致 VDA 注册。重新启动的控制器通电后,它会自动接管代理,这会导致 VDA 再次注册。在这种情况下,注册期间的性能可能会受到影响。
如果在正常操作期间关闭控制器,然后在中断期间将其打开,则如果该控制器被选为代理,则无法在该控制器上使用本地主机缓存。
(#event-logs) 提供了有关选举的信息。
中断期间哪些不可用,以及其他差异
在中断模式下运行没有时间限制。但是,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 用于数据库缓存,另有 200 MB 用于运行 SQL Server Express LocalDB)。如果中断持续时间较长且发生大量登录(例如,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。
- 在交付控制器服务器上,浏览到
- 在交付控制器上(#force-an-outage)。验证本地主机缓存正常工作后,请记住将所有控制器恢复到正常模式。这大约需要 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
重要提示:
仅在交付控制器上运行此模块。
Import PowerShell module
要导入模块,请在 Delivery Controller 上运行以下命令。
cd C:\Program Files\Citrix\Broker\Service\ControlScripts
Import-Module .\HighAvailabilityServiceControl.psm1
用于管理本地主机缓存 (LHC) 的 PowerShell 命令
以下命令可帮助您在 Delivery Controller 上激活和管理 LHC 模式。
| 命令 | 功能 |
|---|---|
Enable-LhcForcedOutageMode |
将 Broker 置于 LHC 模式。ConfigSync 服务必须已成功创建 LHC 数据库文件,Enable-LhcForcedOutageMode 才能正常运行。此 cmdlet 仅在运行它的 Delivery Controller 上强制启用 LHC。要使 LHC 处于活动状态,必须在区域内的所有 Delivery Controller 上运行此命令。 |
Disable-LhcForcedOutageMode |
将代理从 LHC 模式中移除。此 cmdlet 仅禁用运行它的交付控制器上的 LHC 模式。Disable-LhcForcedOutageMode 必须在区域内的所有交付控制器上运行。 |
Set-LhcConfigSyncIntervalOverride |
设置 Citrix 配置同步服务 (CSS) 检查站点内配置更改的间隔。时间间隔范围为 60 秒(一分钟)到 3600 秒(一小时)。此设置仅适用于运行它的 Delivery Controller。为确保所有 Delivery Controller 之间的一致性,请考虑在每个 Delivery Controller 上运行此 cmdlet。例如:Set-LhcConfigSyncIntervalOverride -Seconds 1200
|
Clear-LhcConfigSyncIntervalOverride |
将 Citrix 配置同步服务 (CSS) 检查站点内配置更改的间隔设置为默认值 300 秒(五分钟)。此设置仅适用于运行它的交付控制器。为了在所有交付控制器之间保持一致性,请考虑在每个交付控制器上运行此 cmdlet。 |
Enable-LhcHighAvailabilitySDK |
启用对运行它的交付控制器中所有 Get-Broker* cmdlet 的访问。 |
Disable-LhcHighAvailabilitySDK |
禁用对运行它的交付控制器中 Broker cmdlet 的访问。 |
注意:
- 在交付控制器上运行
Get-Broker*cmdlet 时,请使用端口 89。例如:
Get-BrokerMachine -AdminAddress localhost:89- 当不在 LHC 模式下时,交付控制器上的 LHC Broker 仅保存配置信息。
- 在 LHC 模式下,当选的交付控制器上的 LHC Broker 保存以下信息:
- 资源状态
- 会话详细信息
- VDA 注册
- 配置方面的信息