Citrix DaaS™

本地主机缓存可见性工具

本文介绍了本地主机缓存 (LHC) 实时可见性工具,这是一个基于 PowerShell 的解决方案,可提供对 Citrix 本地主机缓存环境的可见性。使用此工具,您可以监控 Cloud Connector 运行状况,在 LHC 模式下识别选定的领导者,控制强制中断模式,并查询事件日志以排查 LHC 行为。

概述

本地主机缓存 (LHC) 实时可见性工具是一个全面的基于 PowerShell 的解决方案,用于提供 Citrix 本地主机缓存环境的可见性。它提供了一个命令行界面和可从 Cloud Connector 访问的简单 GUI,供您执行以下操作:

  • 发现区域或资源位置中的 Cloud Connector。
  • 在 LHC 模式下识别选定的领导者。
  • 启用或禁用区域或资源位置中所有 Cloud Connector 的强制中断模式。
  • 查询来自特定提供程序和事件 ID 的事件日志。
  • 在选定的领导者上运行 Broker PowerShell 命令。

先决条件

在部署和运行本地主机缓存可见性工具之前,请确保您的环境满足以下系统要求、权限和文件要求。

系统要求

  • Windows Server 2016 或更高版本
  • PowerShell 5.1 或更高版本
  • 必须在 Citrix Cloud Connector™ 上运行。
  • 所需服务:
    • Citrix 高可用性服务
    • Citrix 配置同步服务

权限

  • 本地计算机上的管理员权限
  • 区域中所有 Cloud Connector 的远程 PowerShell 执行权限
  • 与所有 Cloud Connector 的网络连接

所需文件

  • LHCVisibilityTool.ps1 - 核心 PowerShell 模块
  • LHCVisibilityToolGUI.ps1 - GUI 应用程序
  • HighAvailabilityServiceControl.psm1 - Citrix HA 服务控制模块

GUI PowerShell 脚本位于:

C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts
<!--NeedCopy-->

开始使用

运行该工具之前,请使用以下选项之一设置 PowerShell 执行策略:

  • 选项 1:RemoteSigned(限制性更强):

     Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
     <!--NeedCopy-->
    
  • 选项 2:仅当前会话(临时):

     Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
     <!--NeedCopy-->
    

注意:

您可能需要以管理员身份运行 PowerShell 才能更改执行策略。如果您只有用户级权限,请使用 -Scope CurrentUser

通过 GUI 应用程序使用该工具

GUI 提供了一个选项卡式界面,用于发现 Cloud Connector、控制中断模式、查询事件日志以及运行代理命令。启动该工具后,选择一个任务以查看其说明:

启动 GUI

cd "C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts"
.\LHCVisibilityToolGUI.ps1
<!--NeedCopy-->

启动 LHC 可见性工具 GUI

该工具采用三选项卡布局,底部带有一个持久状态栏。

窗口底部的三选项卡布局和持久状态栏

状态栏位于窗口底部,包含:

项目 描述
操作状态(左侧) 当前操作,或“就绪”
HA 模式状态 每个连接器的点指示器(最多显示 5 个;如果截断,则显示“+N 个更多”);悬停工具提示显示完整列表
上次更新时间 上次成功刷新 HA 状态的时间戳
查看日志 在记事本中打开会话日志文件

状态栏使用以下颜色指示 HA 状态:

状态 颜色
正常工作 绿色
待定HA 金黄色
待定恢复 橙色
初始HA 红色
扩展HA 红色
未知 / 不可达 灰色

发现 Cloud Connector 并识别主导者

系统状态和控制选项卡上,单击发现并识别主导者。该工具使用以下方式自动检测并显示区域中所有 Cloud Connector 之间选出的主导者:

  • 事件日志分析(事件 ID 3504)
  • 注册表 PeerStatus 和 IsElected 信息
  • 本地服务验证

系统状态和控制选项卡(/en-us/citrix-daas/media/lhc-visibility-tool-system-status.png)

控制强制中断模式

在“系统状态和控制”选项卡上,使用中断模式控件管理整个区域的 HA 模式:

  • 启用强制中断模式:
    • 强制区域中的所有 Cloud Connector 进入 HA 模式
    • 使用本地主机缓存进行代理
    • 要求 LHC 数据库同步
  • 禁用强制中断模式:
    • 允许系统恢复正常运行
    • 在可用时重新连接到主站点

警告:

这些操作会影响区域中的所有 Cloud Connector。

查询和跟踪事件日志

在“事件日志查询”选项卡上,配置以下查询参数:

  • 目标:选择:
    • 所有云连接器
    • 仅选定的领导者
    • 特定计算机(输入 FQDN)
  • 提供程序名称:选择或输入自定义提供程序:
    • Citrix 高可用性服务
    • Citrix 配置同步服务
    • Citrix 代理服务
  • 事件 ID:逗号分隔列表(例如,3502,3503,3506
  • 时间范围:可选地按开始和结束时间筛选
  • 最大事件数:每台计算机检索的最大事件数(默认值:100)

使用以下按钮处理事件:

  • 查询事件:使用配置的查询参数查询事件日志。
  • 过去的 HA 事件:根据配置的查询参数查找 LHC 的开始和结束边界(事件 3502、3503、3508),并显示结束摘要事件以提供概述。
  • 清除事件:清除事件列表、详细信息面板和跟踪状态。
  • 导出报告: 从 GUI 中查询到的事件创建统计信息,并将其保存为文本文件。(使用“显示事件统计信息”按钮的输出。)

事件日志查询选项卡

实时跟踪行为如下:

  • 当 LHC 处于活动状态时,实时跟踪每 120 秒监控一次新的摘要事件。
  • 当实时跟踪开始时,它通过引用事件 3502 确定 LHC 模式的开始时间,并列出自开始以来出现的所有事件。
  • 实时跟踪可以手动停止,或者在 LHC 模式结束时自动停止。

下半部分提供两种主要视图:

  • 左侧面板:
    • 事件按时间顺序排列,并包含关键详细信息(事件编号、时间、ID、类型)。
    • 每个事件都根据其类型通过颜色进行视觉区分,遵循事件 ID 参考。
    • 选择一个事件会显示有关它的更多信息。
  • 右侧面板: 两个显示选项允许您在所选事件的统计摘要和详细信息之间切换:
    • 显示事件详细信息: 所选事件的全面详细信息。
    • 显示事件统计信息: 总结 HA 模式事件的统计信息,包括来自摘要事件 (3507) 的表格指标和 ASCII 条形图。

下图显示了事件详细信息视图:

事件详细信息视图

下图显示了事件统计信息视图:

事件统计信息视图

参考:HA 和 ConfigSync 事件 ID

以下部分按提供程序列出了常见的事件 ID。

Citrix 高可用性服务:

事件 ID 描述
3502 进入 HA 模式(当选代理)
3503 退出 HA 模式(恢复正常操作)
3506 进入 HA 模式(非当选代理)
3507 定期 HA 模式摘要(选定的代理)
3508 HA 模式摘要结束(选定的代理)

Citrix ConfigSync 服务:

事件 ID 描述
503 同步过程已启动
504 同步成功完成
505 同步失败
507 由于 HA 模式,同步已中止
510 未收到配置数据
517 与主代理通信时出现问题
518 配置同步中止(HA 服务未运行)

运行代理命令

代理命令选项卡上,预定义命令如下:

  • Get-BrokerMachine:检索 VDA/计算机信息
  • Get-BrokerSession:检索活动会话
  • Get-BrokerDesktopGroup:检索交付组
  • Get-BrokerCatalog:检索计算机目录
  • Get-BrokerApplication:检索已发布的应用程序

代理命令选项卡(/en-us/citrix-daas/media/lhc-visibility-tool-broker-commands.png)

提示:

使用筛选器文本框可同时在所有字符串列中搜索结果中的特定项目。

运行自定义命令:

  1. 输入命令,例如 Get-BrokerMachine -MaxRecordCount 2
  2. (可选)指定要返回的属性(以逗号分隔)。
  3. 单击 Execute

自定义命令

注意:

当满足以下条件时,代理命令会从 LHC 数据库提供最新信息:

  • 系统处于 LHC 模式。
  • 已识别出当选领导者。
  • LHC 数据库可用。

查看会话日志

要打开当前会话日志,请单击状态栏中的 View Log。日志将在记事本中打开。

每个会话都会在 %TEMP%\LHCVisibilityTool_<yyyyMMdd_HHmmss>.log 创建一个日志文件。消息也会以颜色编码写入主机控制台。

通过命令行使用该工具

除了 GUI,您还可以直接从 PowerShell 运行该工具。导入模块后,使用以下命令执行每个任务。选择一个任务以转到其命令:

启动命令行工具

cd "C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts"
. .\LHCVisibilityTool.ps1
<!--NeedCopy-->

发现云连接器

$connectors = Get-CloudConnectorsInZone
$connectors | ForEach-Object { Write-Host $_ }
<!--NeedCopy-->

识别选定的领导者

$leader = Get-ElectedLeader
Write-Host "Elected Leader: $leader"
<!--NeedCopy-->

获取中断状态

$states = Get-OutageState
foreach ($connector in $states.Keys) {
    Write-Host "$connector : $($states[$connector].State)"
}
<!--NeedCopy-->

查询事件日志

查询所有 Cloud Connector 的 HA 事件:

$results = Get-LHCEventLogs -EventID @(3502, 3503, 3506) `
    -ProviderName "Citrix High Availability Service" `
    -StartTime (Get-Date).AddDays(-7) `
    -EndTime (Get-Date) `
    -MaxEvents 100

# Display results
foreach ($computer in $results.Keys) {
    Write-Host "`n=== $computer ==="
    if ($results[$computer].Success) {
        $results[$computer].Events | Format-Table TimeCreated, Id, Message -AutoSize
    } else {
        Write-Host "ERROR: $($results[$computer].Error)" -ForegroundColor Red
    }
}
<!--NeedCopy-->

仅查询选定的领导者:

$results = Get-LHCEventLogs -ComputerName "ElectedLeader" `
    -EventID @(3507) `
    -ProviderName "Citrix High Availability Service" `
    -MaxEvents 50
<!--NeedCopy-->

查询特定计算机:

$results = Get-LHCEventLogs -ComputerName "CC-01.domain.com" `
    -EventID @(503, 504, 505) `
    -ProviderName "Citrix ConfigSync Service"
<!--NeedCopy-->

运行代理命令

获取所有计算机:

$machines = Invoke-BrokerCommand -Command "Get-BrokerMachine" `
    -Properties @("MachineName", "RegistrationState", "SessionCount")
$machines | Format-Table -AutoSize
<!--NeedCopy-->

获取活动会话:

$sessions = Invoke-BrokerCommand -Command "Get-BrokerSession" `
    -Properties @("UserName", "MachineName", "SessionState")
$sessions | Format-Table -AutoSize
<!--NeedCopy-->

运行带参数的自定义命令:

$params = @{
    MaxRecordCount = 10
}
$results = Invoke-BrokerCommand -Command "Get-BrokerMachine" `
    -Parameters $params `
    -Properties @("MachineName", "DesktopGroupName")
<!--NeedCopy-->

控制中断模式

在所有 Cloud Connector 上启用强制中断模式:

$results = Set-LHCOutageMode -Enable

# Check results
foreach ($connector in $results.Keys) {
    $status = if ($results[$connector].Success) { "SUCCESS" } else { "FAILED" }
    Write-Host "$connector : $status"
    if (-not $results[$connector].Success) {
        Write-Host "  Error: $($results[$connector].Error)" -ForegroundColor Red
    }
}
<!--NeedCopy-->

禁用强制中断模式:

$results = Set-LHCOutageMode

# Check results
foreach ($connector in $results.Keys) {
    $status = if ($results[$connector].Success) { "SUCCESS" } else { "FAILED" }
    Write-Host "$connector : $status"
}
<!--NeedCopy-->

故障排除

要解决该工具的问题,请遵循以下一般流程:

  1. 检查应用程序事件日志以获取详细错误消息。
  2. 验证是否满足所有先决条件。
  3. 查看下表中的常见问题以及本文后面描述的 最佳实践
  4. 请参阅 本地主机缓存避免可能对 DaaS 弹性产生负面影响的常见错误配置 技术简报。

下表列出了使用该工具时可能遇到的常见问题及其推荐解决方案。

问题 解决方案
未找到云连接器

  1. 验证您是否正在云连接器上运行。
  2. 检查所需服务是否正在运行,方法是使用 Get-Service CitrixHighAvailabilityService, CitrixConfigSyncService
  3. 检查注册表项 HKLM:\SOFTWARE\Citrix\Broker\Service\State\LHC
无法识别选定的领导者
  1. 检查应用程序日志中是否存在事件 ID 3502。
  2. 验证与所有云连接器的连接。
代理命令失败


  1. 确保系统处于 HA 模式。
  2. 验证是否已识别选定的领导者。
  3. 检查 LHC 数据库是否已同步。
  4. 验证 HighAvailabilityServiceControl.psm1 是否存在。
远程执行错误

  1. 使用 Test-WSMan -ComputerName <CloudConnectorFQDN> 验证所有 Cloud Connector 上是否已启用 WinRM。
  2. 检查防火墙规则是否允许 PowerShell 远程处理。
  3. 验证您是否具有管理员权限。
事件日志查询未返回任何结果

  1. 验证所选提供程序的事件 ID 是否正确。
  2. 检查时间范围是否包含预期事件。
  3. 确保事件日志大小限制未导致旧事件被覆盖。

最佳实践

遵循这些最佳实践,以充分利用该工具并安全地操作您的本地主机缓存环境。

定期监控

  • 定期运行 发现云连接器识别当选领导者
  • 监控 ConfigSync 事件(503、504、505)以查找同步问题。

事件日志分析

  • 查询过去 7 天的 HA 事件以了解中断模式。
  • 在 HA 模式下查找事件 ID 3507 以获取详细统计信息。

代理命令

  • 仅在选定的领导者上运行。
  • 限制属性选择以提高性能。
  • 对于大型环境,请使用 MaxRecordCount 参数。

中断模式

  • 仅将强制中断模式用于测试或计划维护。
  • 始终在启用前验证 LHC 数据库是否已同步。
  • 主连接恢复后,禁用强制中断模式。

安全

  • 尽可能使用最低权限帐户运行。
  • 使用安全通道进行远程执行。
  • 审计中断模式更改。

示例

以下示例假设您已在 C:\Reports 创建了一个文件夹来保存输出。

示例 1:每日 HA 模式报告

# Import module
. "C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts\LHCVisibilityTool.ps1"

# Discover environment
$connectors = Get-CloudConnectorsInZone
Write-Host "Found $($connectors.Count) Cloud Connectors"

# Check HA status
$leader = Get-ElectedLeader
if ($leader) {
    Write-Host "System is in HA mode. Elected leader: $leader"

    # Get HA summary events from elected leader
    $events = Get-LHCEventLogs -ComputerName "ElectedLeader" `
        -EventID @(3507, 3508) `
        -ProviderName "Citrix High Availability Service" `
        -StartTime (Get-Date).AddHours(-24) `
        -MaxEvents 100

    # Export to file
    $events[$leader].Events | Select-Object TimeCreated, Id, LevelDisplayName, Message | Export-Csv -Path "C:\Reports\HA-Status-$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
} else {
    Write-Host "System is in normal operations mode"
}
<!--NeedCopy-->

示例 2:检查所有连接器上的 ConfigSync 状态

. "C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts\LHCVisibilityTool.ps1"

$results = Get-LHCEventLogs -ComputerName "All" `
    -EventID @(503, 504, 505) `
    -ProviderName "Citrix ConfigSync Service" `
    -StartTime (Get-Date).AddHours(-6) `
    -MaxEvents 10

foreach ($computer in $results.Keys) {
    $lastEvent = $results[$computer].Events | Sort-Object TimeCreated -Descending | Select-Object -First 1
    $status = switch ($lastEvent.Id) {
        503 { "In Progress" }
        504 { "Success" }
        505 { "Failed" }
    }
    Write-Host "$computer - Last Sync: $($lastEvent.TimeCreated) - Status: $status"
}
<!--NeedCopy-->

示例 3:在 HA 模式下获取会话计数

. "C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts\LHCVisibilityTool.ps1"

# Ensure we have an elected leader
$leader = Get-ElectedLeader
if ($leader) {
    # Get all sessions
    $sessions = Invoke-BrokerCommand -Command "Get-BrokerSession"
    Write-Host "Total Sessions: $($sessions.Count)"

    # Group by state
    $sessionsByState = $sessions | Group-Object SessionState
    foreach ($group in $sessionsByState) {
        Write-Host "  $($group.Name): $($group.Count)"
    }
} else {
    Write-Host "Not in HA mode - cannot query sessions from LHC"
}
<!--NeedCopy-->

高级场景

以下场景将多个工具功能组合到脚本中,以实现更复杂的操作,例如自动化中断测试和导出历史 HA 模式数据。

自动化中断测试

# Enable outage mode
Write-Host "Enabling forced outage mode..."
$enableResults = Set-LHCOutageMode -Enable
$allEnabled = $enableResults.Values | Where-Object { -not $_.Success }
if ($allEnabled) {
    Write-Host "WARNING: Some connectors failed to enable outage mode - aborting test" -ForegroundColor Yellow
    return
}
Start-Sleep -Seconds 30

# Verify elected leader
$leader = Get-ElectedLeader
Write-Host "Elected leader: $leader"

# Test brokering
$machines = Invoke-BrokerCommand -Command "Get-BrokerMachine" -Properties @("MachineName", "RegistrationState")
Write-Host "Retrieved $($machines.Count) machines"

# Disable outage mode
Write-Host "Disabling forced outage mode..."
$disableResults = Set-LHCOutageMode
<!--NeedCopy-->

导出 HA 模式历史记录

$haEvents = Get-LHCEventLogs -ComputerName "All" `
    -EventID @(3502, 3503) `
    -ProviderName "Citrix High Availability Service" `
    -StartTime (Get-Date).AddDays(-30) `
    -MaxEvents 1000

$report = foreach ($computer in $haEvents.Keys) {
    if (-not $haEvents[$computer].Success) { continue }
    foreach ($event in $haEvents[$computer].Events) {
        [PSCustomObject]@{
            Computer  = $computer
            EventID   = $event.Id
            EventType = if ($event.Id -eq 3502) { "Entered HA Mode" } else { "Exited HA Mode" }
            Time      = $event.TimeCreated
        }
    }
}
$report | Sort-Object Time | Export-Csv -Path "C:\Reports\HA-History.csv" -NoTypeInformation
<!--NeedCopy-->
本地主机缓存可见性工具