配置 SQL Server 群集仲裁于 Azure 虚拟机上

适用于:Azure 虚拟机上的 SQL Server

本文介绍如何为 SQL Server 在 Azure 虚拟机上运行的 Windows Server 故障转移群集配置三个仲裁选项之一:

  • 磁盘见证
  • 云见证
  • 文件共享见证

概述

群集的仲裁由必须成为活动群集成员的投票节点数量决定,这样才能确保群集正确启动或持续运行。 配置仲裁器资源,使两节点集群能够在只有一个节点在线时继续运行。 Windows Server故障转移群集是Azure VM上SQL Server高可用性选项的基础技术:故障转移群集实例(FCI)可用性组(AG)

磁盘见证是最具弹性仲裁选项,但若要在 Azure VM 上的SQL Server上使用磁盘见证,必须使用Azure共享磁盘,这会对高可用性解决方案施加一些限制。 因此,在配置使用 Azure 共享磁盘的故障转移群集实例时,请使用磁盘见证,否则尽可能使用云见证。 如果使用 Windows Server 2012 R2 或更早版本(不支持云见证),则可以使用文件共享见证。

以下仲裁选项可用于 Azure 虚拟机上的 SQL Server:

云见证 磁盘见证 文件共享见证
支持的 OS Windows Server 2016+ 全部 全部

若要了解有关仲裁的详细信息,请参阅 Windows Server 故障转移群集概述

云见证

云见证是一种故障转移群集仲裁见证,它使用Azure存储来提供群集仲裁的投票。

下表提供了有关云见证的其他信息和注意事项:

见证类型 说明 要求和建议
云见证
  • 使用Azure存储作为云见证,仅包含时间戳。
  • 适用于在多个站点、多个分区和多个地区中进行部署的理想选择。
  • 在 Microsoft 存储帐户下创建已知容器 msft-cloud-witness
  • 写入一个 blob 文件,其中包含对应群集的唯一 ID,该 ID 用作此容器下 blob 文件的文件名
  • 默认大小为 1 MB。
  • 使用“常规用途”作为帐户类型。 不支持 Blob 存储。
  • 使用标准存储。 不支持Azure Premium Storage。
  • 故障转移集群使用 blob 文件作为仲裁点,在读取数据时需保证一定的一致性。 因此,对于“复制”类型,必须选择“本地冗余存储”。
  • 应从备份和防病毒扫描中排除
  • Storage Spaces Direct不支持磁盘见证
  • 云见证使用 HTTPS(默认端口 443)与Azure Blob Storage建立通信。 确保可通过网络代理访问 HTTPS 端口。

为故障转移集群配置云见证仲裁资源时,请考虑:

  • 您的故障转移群集不存储访问密钥。 而是生成并安全地存储共享访问安全(SAS)令牌。
  • 只要访问密钥保持有效,生成的 SAS 令牌就仍有效。 在轮换主访问密钥时,必须先在所有使用该存储帐户的群集上利用辅助访问密钥更新 Cloud Witness,然后才重新生成主访问密钥。
  • 云见证使用 Azure Storage 帐户服务的 HTTPS REST 接口。 这意味着它需要在所有群集节点上打开 HTTPS 端口。

云见证需要一个 Azure 存储帐户。 要配置存储帐户,请执行以下步骤:

  1. 转到 Azure 门户中的 Storage 帐户页。

  2. “存储帐户 ”页上,选择“ + 创建 ”以打开 “创建存储帐户 ”页。

  3. “创建存储帐户”页上,配置以下设置:

    1. 为存储帐户输入名称。 存储帐户名称必须为 3 到 24 个字符,并且只能包含数字和小写字母。 存储帐户名称还必须在Azure内是唯一的。
    2. 对于 帐户类型“常规用途 ”是合适的。
    3. 对于 性能标准 是合适的。
    4. 对于 复制本地冗余存储(LRS) 是合适的。

创建存储帐户后,请按照以下步骤为故障转移群集配置云见证仲裁资源:

现有的 Set-ClusterQuorum PowerShell 命令具有与云见证对应的新参数。

可以使用 PowerShell 命令通过 cmdlet Set-ClusterQuorum 配置云见证:

Set-ClusterQuorum -CloudWitness -AccountName <StorageAccountName> -AccessKey <StorageAccountAccessKey>

在极少数情况下,需要使用不同的终结点,请使用以下 PowerShell 命令:

Set-ClusterQuorum -CloudWitness -AccountName <StorageAccountName> -AccessKey <StorageAccountAccessKey> -Endpoint <servername>

有关查找存储帐户访问密钥的帮助,请参阅 云见证文档

磁盘见证

磁盘见证是群集可用存储组中的小型群集磁盘。 此磁盘具有高可用性,并且可在节点之间故障切换。

建议在使用共享存储高可用性解决方案时, 例如使用Azure共享磁盘的故障转移群集实例时,选择磁盘见证作为法定人数选项。

下表提供了有关仲裁磁盘见证的其他信息和注意事项:

见证类型 说明 要求和建议
磁盘见证
  • 存储群集数据库副本的专用 LUN
  • 对具有共享(非复制)存储的群集最有用
  • LUN 的大小必须至少有 512 MB
  • 必须专用于群集并且不分配给群集角色
  • 必须包括在群集存储中并且通过存储验证测试
  • 不可以是群集共享卷 (CSV) 磁盘
  • 具有单个卷的基本磁盘
  • 不需要有驱动器号
  • 可以使用 NTFS 或 ReFS 格式化
  • 可以选择使用硬件 RAID 配置以实现容错功能。
  • 应从备份和防病毒扫描中排除
  • Storage Spaces Direct不支持磁盘见证

若要为磁盘见证使用Azure共享磁盘,必须先创建磁盘并装载该磁盘。 为此,请按照《Azure共享磁盘故障转移群集实例指南》的 Mount disk 部分中的步骤进行操作。 磁盘不必是高级的。

装载磁盘后,请按照以下步骤将其添加到群集存储:

  1. 打开故障转移群集管理器。
  2. 在左侧导航窗格上,选择“存储”下的“磁盘”。
  3. 在右侧导航窗格上,选择“操作”下的“添加磁盘”。
  4. 选择刚装载的Azure共享驱动器并记下名称,例如 Cluster Disk 3

将磁盘添加为群集存储后,请使用 PowerShell 将其配置为磁盘见证:

现有的 Set-ClusterQuorum PowerShell 命令具有与云见证对应的新参数。

使用 PowerShell cmdlet Set-ClusterQuorum 时,使用文件共享的路径作为磁盘见证的参数:

Set-ClusterQuorum -NodeAndDiskMajority "Cluster Disk 3"

还可以使用故障转移群集管理器;遵循与云见证相同的步骤,但改为选择磁盘见证作为仲裁选项。

文件共享见证

文件共享见证人是通常在运行 Windows Server 的文件服务器上配置的 SMB 文件共享。 它在 witness.log 文件中维护群集信息,但不存储群集数据库的副本。 在Azure中,可以在单独的虚拟机上配置文件共享。

如果磁盘见证或云见证在你的环境中不可用或不受支持,则配置文件共享见证。

下表提供了有关仲裁文件共享见证的其他信息和注意事项:

见证类型 说明 要求和建议
文件共享见证
  • 在运行Windows Server的文件服务器上配置的 SMB 文件共享
  • 不存储群集数据库的副本
  • 仅在 witness.log 文件中维护群集信息
  • 对具有复制存储的多站点群集最有用
  • 必须至少具有 5 MB 的可用空间
  • 必须专用于单个群集而不用于存储用户或应用程序数据
  • 必须对群集名称的计算机对象启用写入权限

以下是有关托管文件共享见证的文件服务器的其他注意事项:
  • 单个文件服务器可以被配置为多个群集的文件共享见证。
  • 文件服务器必须位于与群集工作负载分开的站点上。 如果站点到站点网络通信丢失,则这种分离允许任何群集站点生存的机会相等。 如果文件服务器位于同一站点上,则该站点成为主站点,并且它是可以访问文件共享的唯一站点。
  • 如果虚拟机未托管在使用文件共享见证的同一群集上,则文件服务器可以在虚拟机上运行。
  • 可以在单独的故障转移群集上配置文件服务器以实现高可用性。

创建文件共享并正确配置权限后,请将文件共享装载到群集节点。 可以遵循高级文件共享故障转移群集实例操作指南的 装载文件共享部分 中所述的相同的一般步骤。

正确配置和装载文件共享后,使用 PowerShell 将文件共享添加为仲裁见证资源:

Set-ClusterQuorum -FileShareWitness <UNC path to file share> -Credential $(Get-Credential)

系统会提示输入针对文件共享的非管理员的本地帐户和密码,该帐户对共享具有完全的管理员权限。 群集会保持名称和密码的加密,并且任何人都无法访问。

你还可以使用故障转移群集管理器;遵循与云见证相同的步骤,但改为选择文件共享见证作为仲裁选项。

更改仲裁投票

可以更改参与 Windows Server 故障转移群集的节点的仲裁投票。

有关详细信息,请查看 WSFC 仲裁模式和投票配置

修改节点投票设置时,请遵循以下指导原则:

法定人数投票指南
默认从没有投票的每个节点开始。 每个节点应该只有一个附带明确理由的投票。
为承载可用性组主副本的群集节点或故障转移群集实例的首选所有者启用投票。
启用对自动故障转移管理者的投票。 在可能由于自动故障转移而托管主副本或FCI的情况下,每个节点都应有投票权。
如果某个可用性组具有多个次要副本,则仅为具有自动故障转移的副本启用投票。
对处于次级灾难恢复站点的节点禁用投票功能。 如果主站点没有任何问题,则辅助站点中的节点不应该影响群集脱机决策。
投票数应为奇数,且至少有三个法定人数投票。 如有必要,请在双节点群集中添加 仲裁见证 以获得第三票。
故障转移后重新评估投票分配。 你不希望故障转移到不支持有效仲裁的群集配置。

可以使用故障转移群集管理器或 PowerShell 调整仲裁投票:

Import-Module FailoverClusters  
  
$node = "AlwaysOnSrv1"  
(Get-ClusterNode $node).NodeWeight = 0  
  
$cluster = (Get-ClusterNode $node).Cluster  
$nodes = Get-ClusterNode -Cluster $cluster  
  
$nodes | Format-Table -property NodeName, State, NodeWeight  

还可以在提升的命令提示符中使用 cluster.exe:

cluster.exe Cluster001 node AlwaysOnSrv1 /prop NodeWeight=0