故障转移群集故障排除

适用范围:SQL Server

本文提供有关以下问题的信息:

基本故障排除步骤

第一个诊断步骤是运行最新的群集验证检查。 有关验证的详细信息,请参阅创建故障转移群集:验证配置。 无需中断服务即可完成此作,因为它不会影响任何联机群集资源。

一旦故障转移群集功能安装完成,就可以在任何时候,包括部署群集前、创建群集期间以及群集运行时进行验证。 事实上,在使用群集后,会执行其他测试,检查是否针对高可用性工作负荷遵循了最佳做法。 在这些数十个测试中,只有一些测试会影响正在运行的群集工作负荷,这些工作负载都位于存储类别中,因此跳过此整个类别是避免中断性测试的一种简单方法。

故障转移群集附带了内置安全措施,以防止在验证期间运行存储测试时意外停机。 如果群集在启动验证时具有任何联机组,并且存储测试保持选中状态,则会提示用户确认他们是否要运行所有测试(并导致停机),或者跳过测试任何联机组的磁盘以避免停机。 如果从测试中排除了整个存储类别,则不会显示此提示。 这样,群集验证就无需停机。

如何重新验证群集

  1. 在“故障转移群集”管理单元中,在控制台树中,确保已选中故障转移群集管理,然后在管理下,选择验证配置

  2. 按照向导中的说明指定服务器和测试,然后运行这些测试。 在运行测试之后会显示 “摘要” 页。

  3. “摘要 ”页上,选择“ 查看报表 ”以查看测试结果。

    若要在关闭向导后查看测试结果,请参阅 %SystemRoot%\Cluster\Reports\Validation Report date and time.html,其中 %SystemRoot% 是操作系统安装的文件夹(例如,C:\Windows)。

  4. 若要查看有助于解释结果的帮助文章,请选择 有关群集验证测试的详细信息

若要在关闭向导后查看有关群集验证的帮助文章,请在故障转移群集管理单元中选择 “帮助”,选择“ 帮助主题”,选择“ 内容 ”选项卡,展开故障转移群集帮助的内容,然后选择“ 验证故障转移群集配置”。 验证向导运行完毕后,“摘要报告” 会显示结果。 所有带绿色复选标记或者在某些情况下带黄色三角形标记(警告)的测试表示通过。 查找问题区域(红色 X 或黄色问号),在汇总测试结果的报告中,选择单个测试以查看详细信息。 在解决 SQL Server 问题之前,需要解决任何红色 X 问题。

安装更新

安装更新是避免系统出现问题的重要部分。 有用的链接:

从故障转移群集故障中恢复

通常,故障转移群集故障有以下两个原因:

  • 双节点群集的一个节点出现硬件故障。 此硬件故障可能是由 SCSI 卡或操作系统中的故障造成的。

    若要从此故障中恢复,请使用 SQL Server 安装程序将故障节点从故障转移群集中删除,在计算机脱机的情况下解决硬件故障,重新将计算机联机,然后将修复后的节点添加回故障转移群集实例。

    有关详细信息,请参阅 创建新的 AlwaysOn 故障转移群集实例(安装程序) 并从 故障转移群集实例故障中恢复

  • 操作系统故障。 在这种情况下,节点处于脱机状态,但无法挽回损坏。

    若要从操作系统故障中恢复,请恢复节点并测试故障转移。 如果 SQL Server 实例无法正确执行故障转移,您必须使用 SQL Server 安装程序从故障转移群集中移除 SQL Server,进行必要的修复,使计算机恢复运行,然后将修复的节点重新添加到故障转移群集。

    使用此方法从操作系统故障中恢复可能要花些时间。 如果很容易从操作系统故障中恢复,请不要使用此方法。

    有关详细信息,请参阅 创建新的 AlwaysOn 故障转移群集实例(安装程序) 并从 故障转移群集实例故障中恢复

解决常见问题

以下列表介绍了常见的使用问题并说明如何解决这些问题。

问题:不正确使用命令提示语法安装 SQL Server

问题 1: 当从命令提示符使用 /qn 开关时,很难诊断安装程序问题,因为 /qn 开关会禁止显示所有安装程序对话框和错误消息。 /qn如果指定了开关,则所有安装程序消息(包括错误消息)都会写入安装程序日志文件。 有关日志文件的详细信息,请参阅 查看和读取 SQL Server 安装程序日志文件

解决方法 1:使用 /qb 开关而不是 /qn 开关。 如果使用 /qb 开关,则会显示每个步骤中的基本 UI,包括错误消息。

问题:SQL Server 迁移到另一个节点后无法连接到网络

问题 1: SQL Server 服务帐户无法与域控制器取得联系。

解决方法 1:检查事件日志以查看是否存在网络连接问题,例如适配器故障或 DNS 问题。 验证是否能成功对域控制器运行 ping 命令。

问题 2: 所有群集节点上的 SQL Server 服务帐户密码都不相同,或者该节点不会重启已从失败的节点迁移的 SQL Server 服务。

解决方法 2: 使用 SQL Server 配置管理器更改 SQL Server 服务帐户密码。 如果不这样做,并且在一个节点上更改了 SQL Server 服务帐户密码,则必须在所有其他节点上也进行更改。 SQL Server 配置管理器会自动执行此操作。

问题:SQL Server 无法访问群集磁盘

问题 1: 固件或驱动程序不会在所有节点上更新。

解决方法 1: 确保所有节点都使用正确的固件版本和相同的驱动程序版本。

问题 2: 节点无法恢复已从共享群集磁盘上具有不同驱动器号的失败节点迁移的群集磁盘。

解决方法 2: 两台服务器上的群集磁盘的磁盘驱动器号必须相同。 如果不是,请查看操作系统的原始安装和Microsoft群集服务 (MSCS)。

问题:SQL Server 服务故障导致故障转移

解决方法: 若要防止特定服务的故障导致 SQL Server 组进行故障转移,请使用 Windows 中的群集管理器配置这些服务,如下所示:

  • “全文属性” 对话框的 “高级” 选项卡中,清除 “影响组” 复选框。 但是,如果 SQL Server 导致故障转移,则全文搜索服务将重新启动。

问题:SQL Server 不会自动启动

解决方法: 使用 MSCS 中的群集管理器自动启动某个故障转移群集。 SQL Server 服务应该设置为手动启动,应该在 MSCS 中配置群集管理器,使其启动 SQL Server 服务。 有关详细信息,请参阅 管理服务

问题:网络名称处于脱机状态,无法使用 TCP/IP 连接到 SQL Server

问题 1: DNS 失败,而群集资源设置为需要 DNS。

解决方法 1: 更正 DNS 问题。

问题 2: 网络上存在重复的名称。

解决方法 2: 使用 nbtstat 查找重复的名称,然后更正问题。

问题 3: SQL Server 未使用命名管道进行连接。

解决方法 3: 若要使用命名管道进行连接,请使用 SQL Server 配置管理器创建一个别名,以连接到适当的计算机。 例如,如果有一个群集包含两个节点(节点 A节点 B)和一个具有默认实例的故障转移群集实例 (Virtsql),则可以执行下列步骤连接到网络名称资源已离线的服务器:

  1. 使用群集管理器确定包含 SQL Server 实例的组在哪个节点上运行。 对于此示例,它是 节点 A

  2. 使用 net start 命令启动该计算机上的 SQL Server 服务。 有关使用 net start的详细信息,请参阅 手动启动 SQL Server

  3. 节点 A 上启动 SQL Server SQL Server 配置管理器。查看服务器正在侦听的管道名称。 它应该类似于 \\.\$$\VIRTSQL\pipe\sql\query

  4. 在客户端计算机上,启动 SQL Server 配置管理器。

  5. 创建别名 SQLTEST1 以通过命名管道连接到此管道名称。 为此,请输入 节点 A 作为服务器名称,并编辑要作为 \\.\pipe\$$\VIRTSQL\sql\query的管道名称。

  6. 使用别名 SQLTEST1 作为服务器名称连接到此实例。

问题:群集上的 SQL Server 安装程序因发生错误 11001 而失败

问题:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.X\Cluster 中存在孤立的注册表项。

分辨率: 请确保 MSSQL.X 注册表配置单元当前未使用,然后删除群集密钥。

问题:群集安装错误:“安装程序没有足够的特权,无法访问此目录: <驱动器>\Microsoft SQL Server。 安装无法继续。 请以管理员身份登录,或与您的系统管理员联系”

问题: 此错误是由未正确分区的 SCSI 共享驱动器引起的。

分辨率: 使用以下步骤在共享磁盘上重新创建单个分区:

  1. 从群集中删除磁盘资源。
  2. 删除磁盘上的所有分区。
  3. 在磁盘属性中验证磁盘是否为基本磁盘。
  4. 在共享磁盘上创建一个分区、格式化该磁盘并为磁盘分配一个驱动器号。
  5. 使用群集管理器 (cluadmin) 将磁盘添加到群集中。
  6. 运行 SQL Server 安装程序。

问题:应用程序无法在分布式事务中登记 SQL Server 资源

问题: 由于 Windows 中未完全配置Microsoft分布式事务处理协调器(MS DTC),因此应用程序可能无法在分布式事务中登记 SQL Server 资源。 此问题可能会影响使用分布式事务的链接服务器、分布式查询和远程存储过程。 有关如何配置 MS DTC 的详细信息,请参阅 Before Installing Failover Clustering

解决方法: 若要避免此类问题,必须在安装 SQL Server 和配置 MS DTC 的服务器上完全启用 MS DTC 服务。

若要完全启用 MS DTC,请执行下列步骤:

  1. 在控制面板中打开 “管理工具” ,然后打开 “计算机管理”

  2. 在“计算机管理”的左窗格中,展开 “服务和应用程序”,然后选择“ 服务”。

  3. 在“计算机管理”的右窗格中,右键单击“分布式事务处理协调器”,并选择“属性”。

  4. “分布式事务处理协调器 ”窗口中,选择“ 常规 ”选项卡,然后选择“ 停止 ”以停止服务。

  5. “分布式事务处理协调器 ”窗口中,选择 “登录 ”选项卡,并设置登录帐户 NT AUTHORITY\NetworkService

  6. 选择 “应用 ”和 “确定 ”关闭 “分布式事务处理协调器 ”窗口。 关闭 “计算机管理” 窗口。 关闭 “管理工具” 窗口。

问题:SQL Server 代理 无法连接到使用自定义端口的多子网故障转移群集实例

问题:当以下所有条件都成立时,SQL Server 代理 无法连接到本地 数据库引擎:

  1. SQL Server 被安装为多子网故障转移群集实例。
  2. 故障转移群集实例是默认实例。
  3. 数据库引擎侦听的固定 TCP 端口不是默认的 1433 端口。
  4. SQL Server 代理 在启动时连接到本地实例。

对于多子网故障切换集群实例,SQL Server 代理 的初始连接将使用 MultiSubnetFailover=Yes。 此设置使客户端使用 TCP。 连接不会退回到共享内存或命名管道。 当目标为 (local) 且未指定端口时,连接将尝试使用 TCP 端口 1433。 如果数据库引擎没有监听该端口,连接就会失败。

你可能会在ODBC走线中看到类似的连接:

DRIVER=ODBC Driver 17 for SQL Server;SERVER=(local);APP=SQLAgent - Initial Boot Probe;DATABASE=master;MultiSubnetFailover=YES;

解决方法:创建一个TCP别名,将SQL Server 代理连接指向故障转移集群实例的虚拟网络名称和配置的TCP端口。 在每个可以承载故障转移集群实例的节点上配置别名。

步骤1:确认配置好的TCP端口

  1. 在活动节点上,打开 SQL Server 配置管理器
  2. 展开 SQL Server 网络配置,然后选择 MSSQLSERVER 协议
  3. 打开 TCP/IP,然后选择 IP地址 标签。
  4. 如果 Listen All 设置为“是”,请注意 IPAllTCP 端口的值。
  5. 如果 “全部侦听” 设置为 “否”,请记下故障转移集群实例所使用的每个已启用 IP 地址的 TCP 端口 值。
  6. 确认 SQL Server 错误日志显示 数据库引擎 正在监听预期端口。

有关详细信息,请参阅将 SQL Server 配置为侦听特定 TCP 端口

步骤2:在每个集群节点创建TCP别名

在每个可以承载故障转移集群实例的节点上完成以下步骤:

  1. 打开适用于已安装SQL Server版本的SQL Server客户端别名配置工具。
  2. 创建一个新别名。
  3. 别名中,输入本地 SQL Server 代理 连接的唯一名称。 每个节点都使用相同的别名。
  4. 选择 TCP/IP 作为协议。
  5. 服务器中输入故障转移集群实例的虚拟网络名称。 不要输入物理节点名称。
  6. 端口号中输入步骤1中识别的固定TCP端口。
  7. 保存化名。

有关详细说明和版本要求,请参见 为客户端创建或删除服务器别名

Important

SQL Server 别名是一种客户端配置项。 在所有可以拥有故障转移集群实例的节点上创建一个相同的别名。 否则,SQL Server 代理 可能会在实例移动到未配置别名的节点后失败。

步骤3:配置SQL Server 代理以使用别名

  1. 在 SQL Server Management Studio 中,连接到故障转移集群实例。
  2. 对象资源管理器 中,展开实例。
  3. 右键点击 SQL Server 代理,然后选择属性
  4. 选择页面中,选择 连接
  5. Alias本地主机服务器中,输入步骤2创建的别名名称。
  6. 选择“确定”
  7. 重启 SQL Server 代理。

欲了解更多信息,请参见为 SQL Server 代理 服务设置 SQL Server 别名

步骤4:验证配置

  1. 确认 SQL Server 代理 成功启动。
  2. 查看 SQL Server 代理 日志,确认该代理已连接到预定的本地 数据库引擎 实例。
  3. 运行一个简单的 SQL Server 代理 作业,确认作业可以连接到实例。
  4. 在不会干扰正常业务活动的时候,将故障转移集群实例迁移到另一个可能的所有者节点。
  5. 确认 SQL Server 代理 启动且测试作业在该节点成功。
  6. 针对每个可能的所有者节点重复该测试。

使用扩展存储过程和 COM 对象

如果在故障转移群集配置中使用扩展存储过程,所有扩展存储过程都必须安装在与 SQL Server相关的群集磁盘中。 这样做可确保当某节点发生故障转移时,仍能继续使用扩展存储过程。

如果扩展存储过程使用 COM 组件,管理员必须在群集的所有节点中都注册 COM 组件。 活动节点的注册表中必须包含加载和执行 COM 组件所需的信息,才能创建这些组件。 否则,这些信息将保留在最先注册 COM 组件的计算机的注册表中。