本地主机缓存
为确保 Citrix Virtual Apps and Desktops 站点数据库始终可用,Citrix 建议从容错 SQL Server 部署开始,遵循 Microsoft 的高可用性最佳实践。(有关支持的 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 配置同步服务 (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 商店的 高级运行状况检查 选项,则会话可能会间歇性地无法启动。
应用程序和桌面支持
本地主机缓存支持服务器托管的应用程序和桌面,以及静态(分配的)桌面。
本地主机缓存支持池化交付组中的桌面 VDA,具体如下:
-
默认情况下,在本地主机缓存事件期间,池化交付组(由 MCS 或 Citrix Provisioning™ 创建)中启用了
ShutdownDesktopsAfterUse属性的电源管理桌面 VDA 不可用于新连接。您可以更改此默认设置,以允许这些桌面在本地主机缓存期间使用。但是,在中断期间,您不能依赖电源管理。(电源管理在正常操作恢复后恢复。)此外,这些桌面可能包含来自上一用户的数据,因为它们尚未重新启动。
-
要覆盖默认行为,必须在全站点范围和每个受影响的交付组中启用它。运行以下 PowerShell cmdlet。
全站点范围:
Set-BrokerSite -ReuseMachinesWithoutShutdownInOutageAllowed $true对于每个受影响的交付组,运行以下 PowerShell 命令:
Set-BrokerDesktopGroup -Name "name" -ReuseMachinesWithoutShutdownInOutage $true
要默认启用交付组设置,请运行以下 PowerShell 命令:
Set-BrokerSite -DefaultReuseMachinesWithoutShutdownInOutage $true
在启用此设置后创建的所有新的交付组都将适用此设置。
要为现有交付组启用此设置,请运行以下 PowerShell 命令:
Set-BrokerDesktopGroup -Name "name" -ReuseMachinesWithoutShutdownInOutage $true
在站点和交付组中启用此功能不会影响配置的 ShutdownDesktopsAfterUse 属性在正常操作期间的工作方式。启用此功能后,LHC 事件完成后 VDA 不会自动重新启动。池化交付组中电源管理的桌面 VDA 可以保留以前会话的数据,直到 VDA 重新启动。这可能发生在用户在非 LHC 操作期间从 VDA 注销时,或者可以手动触发重新启动。
重要提示:
如果未在站点级别启用 ReuseMachinesWithoutShutdownInOutageAllowed 并在交付组级别启用 ReuseMachinesWithoutShutdownInOutage,则在本地主机缓存事件期间,所有针对池化交付组中电源管理的桌面 VDA 的会话启动尝试都将失败。
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 速成版 本地数据库 版本替换为新版本的信息,请参阅 替换 SQL Server 速成版 本地数据库。
产品安装和升级后的默认配置和设置
在全新安装 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 和 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 注册风暴)。
- 测试灾难恢复计划。
- 帮助确保本地主机缓存正常工作。
- 在更换或维护站点数据库服务器时。
要强制中断,请编辑包含 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 模块的选项。这些选项以及其他代理模块可能会识别出问题。
报告: 如果同步导入失败,您可以生成报告。此报告会在导致错误的D对象处停止。此报告功能会影响同步速度,因此 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
用于管理 LHC 的 PowerShell 相关命令
以下命令可帮助您在 Delivery Controllers 上激活和管理 LHC 模式。
| 命令小程序 | 功能 |
|---|---|
Enable-LhcForcedOutageMode |
将 Broker 置于 LHC 模式。LHC 数据库文件必须已由 ConfigSync Service 成功创建,Enable-LhcForcedOutageMode 才能正常运行。此 cmdlet 仅在其运行的 Delivery Controller 上强制启用 LHC。要使 LHC 处于活动状态,必须在区域内的所有 Delivery Controller 上运行此命令。 |
Disable-LhcForcedOutageMode |
使 Broker 退出 LHC 模式。此 cmdlet 仅在其运行的交付控制器上禁用 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 |
启用对在其上运行的 Delivery Controller 中所有 Get-Broker* cmdlet 命令的访问。 |
Disable-LhcHighAvailabilitySDK |
禁用对在其运行的交付控制器中的代理命令行小程序 的访问。 |
注意:
- 在交付控制器上运行
Get-Broker*命令行小程序时,请使用端口 89。例如:
Get-BrokerMachine -AdminAddress localhost:89- 当未处于 LHC 模式时,位于 Delivery Controller 上的 LHC Broker 仅负责存储配置信息。
- 在 LHC 模式下,所选的交付控制器上的 LHC 代理包含以下信息:
- 资源状态
- 会话详细信息
- VDA 注册
- 有关配置的信息