Citrix Virtual Apps and Desktops 7 2203 LTSR

本地主机缓存

为确保 Citrix Virtual Apps and Desktops 站点数据库始终可用,Citrix 建议遵循 Microsoft 的高可用性最佳实践,从容错 SQL Server 部署开始。(有关支持的 SQL Server 高可用性功能,请参阅 数据库。)但是,网络问题和中断可能导致用户无法连接到其应用程序或桌面。

本地主机缓存功能允许在发生中断时,站点中的连接代理操作继续进行。当本地 Citrix® 环境中 Delivery Controller™ 与站点数据库之间的连接失败时,就会发生中断。当站点数据库无法访问 90 秒时,本地主机缓存将启用。

自 XenApp 和 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)提供了有关同步和中断的信息。

在中断模式下运行没有时间限制。

正常模式和中断模式之间的转换不会影响现有会话。它仅影响新会话的启动。

您也可以有意触发中断。有关执行此操作的原因和方式的详细信息,请参阅强制中断

具有多个控制器的站点

除其他任务外,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, ContollerDNSName, DesktopGroupName, RegistrationState
    • 运行这些命令后,您可以访问:
      • 所有 Get-Broker* 命令小程序。
  • 无法从主机服务获取管理程序凭据。所有计算机都处于未知电源状态,无法发出任何电源操作。但是,主机上已开机的虚拟机可用于连接请求。
  • 仅当在正常操作期间发生分配时,才能使用已分配的计算机。停机期间无法进行新的分配。
  • 无法自动注册和配置远程电脑访问计算机。但是,在正常操作期间已注册和配置的计算机是可用的。
  • 如果资源位于不同的区域,服务器托管的应用程序和桌面用户使用的会话可能超过其配置的会话限制。
  • 用户只能从包含当前活动/选定辅助代理的区域中的已注册 VDA 启动应用程序和桌面。停机期间不支持跨区域启动(从一个区域的辅助代理启动到不同区域的 VDA)。
  • 如果在交付组中 VDA 的计划重启开始之前发生站点数据库中断,则重启将在中断结束时开始。这可能会导致意外结果。有关详细信息,请参阅 由于数据库中断导致计划重启延迟
  • 无法配置 区域首选项。如果已配置,则在会话启动时不会考虑首选项。
  • 不支持将标签用于指定区域的 标签限制 用于会话启动。如果配置了此类标签限制,并且启用了 StoreFront 商店的 高级运行状况检查 选项,则会话可能会间歇性地启动失败。

应用程序和桌面支持

本地主机缓存支持服务器托管的应用程序和桌面以及静态(分配的)桌面。

本地主机缓存支持池化交付组中的桌面 VDA,具体如下:

  • 默认情况下,在本地主机缓存事件期间,池化交付组(由 MCS 或 Citrix Provisioning™ 创建)中启用了 ShutdownDesktopsAfterUse 属性的电源管理桌面 VDA 不可用于新连接。您可以更改此默认设置,以允许这些桌面在本地主机缓存期间使用。

    但是,在中断期间,您不能依赖电源管理。(电源管理在正常操作恢复后恢复。)此外,这些桌面可能包含来自以前用户的数据,因为它们尚未重启。

  • 要覆盖默认行为,必须在全站点范围和每个受影响的交付组中启用它。运行以下 PowerShell cmdlet。

    全站点范围:

    Set-BrokerSite -ReuseMachinesWithoutShutdownInOutageAllowed $true

    对于每个受影响的交付组,运行以下 PowerShell 命令:

    Set-BrokerDesktopGroup -Name "name" -ReuseMachinesWithoutShutdownInOutage $true

    在站点和交付组中启用此功能不会影响配置的 ShutdownDesktopsAfterUse 属性在正常操作期间的工作方式。启用此功能后,VDA 在 LHC 事件完成后不会自动重启。池化交付组中的电源管理桌面 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 服务器速成版本地数据库

本地主机缓存使用的 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 速成版 LocalDB 版本替换为新版本的信息,请参阅 替换 SQL Server 速成版 LocalDB

在产品安装和升级之后的默认设置

在全新安装 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.mdfHaDatabaseName_log.ldf
  • 在 Delivery Controller 上 强制中断。验证本地主机缓存正常工作后,请记住将所有 Controller 恢复到正常模式。这可能需要大约 15 分钟。

事件日志

事件日志指示同步和中断发生的时间。在事件查看器日志中,中断模式被称为 HA 模式

配置同步器服务:

在正常操作期间,当 CSS 使用本地主机缓存代理将配置数据导入本地主机缓存数据库时,可能会发生以下事件。

  • 503:Citrix 配置同步服务收到更新的配置。此事件指示同步过程的开始。
  • 504: Citrix 配置同步服务导入了更新的配置。配置导入成功完成。
  • 505: Citrix 配置同步服务导入失败。配置导入未成功完成。如果存在以前成功的配置,则在发生中断时会使用该配置。但是,它将与当前配置不同步。如果没有可用的以前配置,则服务在中断期间无法参与会话代理。在这种情况下,请参阅 (#troubleshoot) 部分,并联系 Citrix 支持。
  • 507: Citrix 配置同步服务放弃了导入,因为系统处于中断模式,并且正在使用本地主机缓存代理进行代理。服务收到了新配置,但由于发生中断而放弃了导入。这是预期行为。
  • 510: 未从主配置服务接收到配置服务配置数据。
  • 517: 与主代理通信时出现问题。
  • 518: 配置同步脚本已中止,因为辅助代理(高可用性服务)未运行。

高可用性服务:

此服务也称为本地主机缓存代理。

  • 3502: 发生中断,本地主机缓存代理正在执行代理操作。
  • 3503: 中断已解决,正常操作已恢复。
  • 3504: 指示哪个本地主机缓存代理当选,以及参与选举的其他本地主机缓存代理。

强制中断

您可能希望故意强制中断。

  • 如果您的网络反复出现故障。强制中断直到网络问题解决,可以防止在正常模式和中断模式之间连续转换(以及由此导致的频繁 VDA 注册风暴)。
  • 测试灾难恢复计划。
  • 为帮助确保本地主机缓存正常工作。
  • 在更换或维护站点数据库服务器时。

要强制中断,请编辑包含 Delivery Controller 的每台服务器的注册表。在 HKLM\Software\Citrix\DesktopServer\LHC 中,创建 OutageModeForced 并将其设置为 REG_DWORD,值为 1。此设置指示本地主机缓存代理进入中断模式,无论数据库状态如何。将值设置为 0 可使本地主机缓存代理退出中断模式。

要验证事件,请监视 C:\ProgramData\Citrix\WorkspaceCloud\Logs\Plugins\HighAvailabilityService 中的 Current_HighAvailabilityService 日志文件。

故障排除

当同步导入到本地主机缓存数据库失败并发布 505 事件时,可以使用多种故障排除工具。

CDF 跟踪: 包含 ConfigSyncServerBrokerLHC 模块的选项。这些选项以及其他代理模块可能会识别问题。

报告: 如果同步导入失败,您可以生成报告。此报告会在导致错误的对象处停止。此报告功能会影响同步速度,因此 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

本地主机缓存