“主”服务器出现故障后 SQL Server 群集不可用

Fed*_*jdu 4 sql-server clustering

我在stackoverflow上提出了这个问题,但被要求在这里重新发布,所以这里是:

我有一个在集群环境中设置的数据库。这将是两台共享存储的服务器。ServerA 是我设置数据库的服务器,ServerB 是 SQLServer 集群中的一个节点。

如果我强行关闭 ServerB,一切都会按预期工作,但如果我关闭 ServerA,则实例不再可用。

Windows 集群仍处于活动状态(我可以通过共享名称远程桌面到集群上),但 SQL 不可见,并且集群管理器将资源报告为离线。

这有点违背了集群的目的,我需要解决它,但这并不是我的专业领域,我不知道从哪里开始。

提前致谢。

编辑(评论中询问的其他信息):安装了 Windows 我为 DTC 和 SQL Server 添加了集群功能。访问方面,机器的IP地址为*.101为主;*.102 为第二台服务器;*.99 用于接入点 SQL 服务器实例,*.111 用于集群管理器。我可以从两台机器访问 99 但不能从任何一台访问 101 或 102 的数据库。

编辑 #2 - 我尝试增加故障转移阈值(为了测试目的,在 24 小时内增加到 50),但是在切断 server1 的网络后服务器仍然没有唤醒。群集在大约 20 秒左右恢复,但 SQL Server 保持关闭。在日志中,我有几个错误和一条可能导致失败的严重级别消息。讯息是:

由于仲裁丢失,群集服务正在关闭。这可能是由于集群中某些或所有节点之间的网络连接丢失,或者见证磁盘的故障转移。运行验证配置向导以检查您的网络配置。如果这种情况仍然存在,请检查与网络适配器相关的硬件或软件错误。还要检查节点所连接的任何其他网络组件(例如集线器、交换机或网桥)中的故障。

Tho*_*ger 5

不查看集群日志或任何其他形式的错误报告,我所能做的就是在这里猜测。

但我最初的想法是您可能已经达到了故障转移阈值。默认情况下,这将设置为在 6 小时内最多发生n - 1 次故障(其中n是节点数)。是的,那是一段很长的时间,尤其是在故障不是很多(仅等于一次故障)的 2 节点集群中。设置此阈值是为了防止集群组的乒乓效应。

在生产中,这可能是一件好事。但是在测试/开发/非生产中,遇到这个最初令人困惑的问题是很常见的,因为您可能会尝试连续故障转移。值得注意的是,这些参数是 100% 可配置的。您需要做的就是进入集群组的属性,在“故障转移”选项卡中,您可以选择更改这两个参数(指定时间段内的最大故障数时间段(小时))。这是它的外观就像在故障转移群集管理器中一样:

在此处输入图片说明

注意:在我的屏幕截图中,阈值设置为 2 因为我有一个 3-node cluster

同样,这可以通过 PowerShell 看到(访问 FailoverClusters 模块)。

# you may need to set your cluster group name to whatever it is named
# in your environment
#
Get-ClusterGroup -Name "SQL Server (MSSQLSERVER)" | 
    Select-Object Name, FailoverThreshold, FailoverPeriod
Run Code Online (Sandbox Code Playgroud)

  • 您基本上失去了集群上的仲裁。你需要弄清楚为什么你失去了法定人数。这是一个两节点集群吗?你有一个节点和磁盘多数吗?如果是这样,这意味着有 3 票,对于法定人数,您需要有 2 票。你可以忍受其中一票的失败。如果再多,那么你就失去了法定人数。 (2认同)
  • 在该仲裁模型中,磁盘是单点故障。我会看看为什么与仲裁磁盘的通信丢失了。 (2认同)