为 Always On 可用性组生成和分析 CLUSTER.LOG
适用于: SQL Server
作为故障转移群集资源,SQL Server、Windows Server 故障转移群集服务 (WSFC) 群集和 SQL Server 资源 DLL (hadrres.dll) 之间存在外部交互,SQL Server 中无法对其进行监视。 WSFC 日志(即 CLUSTER.LOG)可以诊断 WSFC 群集或 SQL Server 资源 DLL 中的问题。
生成群集日志
可以通过两种方式来生成群集日志:
在命令提示符处使用
cluster /log /g
命令。 此命令会将群集日志生成到每个 WSFC 节点上的 \windows\cluster\reports 目录。 此方法的优点是,可以使用/level
选项在生成的日志中指定详细信息级别。 其缺点在于,不能为生成的群集日志指定目标目录。 有关详细信息,请参阅 How to create the cluster.log in Windows Server 2008 Failover Clustering(如何在 Windows Server 2008 故障转移群集中创建 cluster.log)。使用 Get-ClusterLog PowerShell cmdlet。 此方法的优点是,可以从所有节点将群集日志生成到运行 cmdlet 的节点上的一个目标目录。 其缺点在于,不能在生成的日志中指定详细信息级别。
以下 PowerShell 命令在过去 15 分钟内从所有群集节点生成群集日志,并将其放在当前目录中。 在具有管理权限的 PowerShell 窗口中运行命令。
Import-Module FailoverClusters
Get-ClusterLog -TimeSpan 15 -Destination .
Always On 日志详细级别
可以增加可用性组的 CLUSTER.LOG 中日志的详细级别。 若要修改详细级别,请执行下列步骤:
从“开始”菜单中打开“故障转移群集管理器” 。
展开群集和“服务和应用程序”节点,然后单击可用性组名称。
在“详细信息”窗格中,右键单击可用性组资源,然后单击“属性”。
单击“属性”选项卡。
修改“VerboseLogging”属性。 默认情况下,VerboseLogging 设置为
0
,它会报告信息、警告和错误。 可以将“VerboseLogging”从0
设置为2
。单击“确定”。
再次右键单击可用性组资源,然后单击“使此资源脱机”。
再次右键单击可用性组资源,然后单击“将此资源联机”。
可用性组资源事件
下表显示了可在 CLUSTER.LOG 中看到的不同种类的事件,这些事件与可用性组资源有关。 有关 WSFC 中资源宿主子系统 (RHS) 和资源控制监视器 (RCM) 的详细信息,请参阅 Resource Hosting Subsystem (RHS) In Windows Server 2008 Failover Clusters(Windows Server 2008 故障转移群集中的资源宿主子系统 (RHS))。
标识符 | 源 | CLUSTER.LOG 中的示例 |
---|---|---|
带有 [RES] 和 [hadrag] 前缀的消息 |
hadrres.dll(Always On 资源 DLL) | 00002cc4.00001264::2011/08/05-13:47:42.543 INFO [RES] SQL Server 可用性组 <ag>: [hadrag] 脱机请求。00002cc4.00003384::2011/08/05-13:47:42.558 ERR [RES] SQL Server 可用性组 <ag>: [hadrag] 租约线程已终止00002cc4.00003384::2011/08/05-13:47:42.605 INFO [RES] SQL Server 可用性组 <ag>: [hadrag] 免费 SQL 语句00002cc4.00003384::2011/08/05-13:47:42.902 INFO [RES] SQL Server 可用性组 <ag>: [hadrag] 从 SQL Server 断开连接 |
带有 [RHS] 前缀的消息 |
RHS.EXE(资源宿主子系统,hadrres.dll 的主机进程) | 00000c40.00000a34::2011/08/10-18:42:29.498 INFO [RHS] Resource ag 已脱机。 RHS 即将向 RCM 报告资源状态。 |
带有 [RCM] 前缀的消息 |
资源控制监视器(群集服务) | 000011d0.00000f80::2011/08/05-13:47:42.480 INFO [RCM] rcm::RcmGroup::Move: 首先使“ag”组脱机... 000011d0.00000f80::2011/08/05-13:47:42.496 INFO [RCM] TransitionToState(ag) Online-->OfflineCallIssued. |
RcmApi/ClusAPI | API 调用,通常意味着 SQL Server 正在请求操作 | 000011d0.00000f80::2011/08/05-13:47:42.465 INFO [RCM] rcm::RcmApi::MoveGroup: (ag, 2) |
隔离调试 Always On 资源 DLL
调试的最佳做法是将群集配置为与其他资源 DLL 隔离开来运行 Always On 资源 DLL (hadrres.dll)。 默认情况下,WSFC 集群在 rhs.exe 的单个实例中运行所有资源 DLL。 这会导致群集中的所有资源都共享相同的 rhs.exe 实例。 如果尝试使用调试器对 hadrres.dll 进行调试,则在断点处暂停可能导致共享 rhs.exe 实例的其他资源也暂停。 此外,在同一群集中运行多个可用性组时,如果在断点处暂停以调试一个可用性组,则相同的配置可能导致所有可用性组都暂停。
若要将可用性组与其他群集资源 DLL(包括其他可用性组)隔离,请执行以下操作以在单独的 rhs.exe 进程内运行 hadrres.dll:
打开注册表编辑器并导航到以下项:HKEY_LOCAL_MACHINE\Cluster\Resources。 此项包含所有资源的关键值,每个关键值具有不同的 GUID。
查找包含与可用性组名称相匹配的“名称”值的资源关键字。
将“SeparateMonitor”值更改为“1” 。
在 WSFC 集群中重启可用性组的集群服务。