使用高级文件共享在 Azure 虚拟机上配置 SQL Server 故障转移群集实例
本文介绍如何使用高级文件共享在 Azure 虚拟机上创建 SQL Server 故障转移群集实例 (FCI)。
高级文件共享是由 SSD 支持的持续低延迟文件共享,在 Windows Server 2012 或更高版本上完全支持将它们用于 SQL Server 2012 或以上版本的故障转移群集实例。 高级文件共享提供更高的灵活性,使你能在不停机的情况下对文件共享进行大小调整和缩放。
准备阶段
在开始之前,需要了解几个事项并做好准备。
应该对以下技术有实际的了解:
要注意的一点是:在 Azure IaaS VM 故障转移群集上,建议为每个服务器(群集节点)设置一个 NIC,并且只使用一个子网。 Azure 网络具有物理冗余,于是不需要在 Azure IaaS VM 来宾群集上使用额外的 NIC 和子网。 群集验证报告将发出警告,指出节点只能在单个网络上访问。 你可以在 Azure IaaS VM 故障转移群集上忽略此警告。
此外,应该对以下技术有大致的了解:
高级文件共享提供符合许多工作负荷需求的 IOPS 和吞吐量。 对于 IO 密集型工作负荷,请考虑使用基于托管高级磁盘或超级磁盘的支持存储空间直通的 SQL Server 故障转移群集实例。
在开始部署或迁移之前,请检查环境的 IOPS 活动,并验证高级文件共享会提供所需的 IOPS。 使用“Windows 性能监视器”磁盘计数器来监视 SQL Server 数据、日志和 TempDB 文件需要的总 IOPS(磁盘传输量/每秒)和吞吐量(磁盘字节数/每秒)。
许多工作负载都有突发的 IO,因此最好在使用量大的时间段内检查,并记下最大 IOPS 和平均 IOPS。 高级文件共享提供基于共享大小的 IOPS。 还提供免费突发功能:你能突发 IO,使其能长达一小时为基准量的三倍。
请参阅文件共享性能层,详细了解高级文件共享性能。
许可和定价
在 Azure 虚拟机上,可以使用标准预付费套餐针对 SQL Server 授予许可,也可以使用自带许可 (BYOL) VM 映像。 选择的映像类型会影响收费方式。
使用标准预付费套餐许可,Azure 虚拟机上的 SQL Server 的故障转移群集实例 (FCI) 会对 FCI 的所有节点(包括被动节点)收取费用。 有关详细信息,请参阅 SQL Server Enterprise 虚拟机定价。
如果你已签署附带软件保障的企业协议,则可为每个活动节点使用一个免费的被动 FCI 节点。 若要在 Azure 中利用此优势,请使用 BYOL VM 映像,然后在 FCI 的主动节点和被动节点上使用相同的许可证。 有关详细信息,请参阅企业协议。
如需比较 Azure 虚拟机中 SQL Server 的标准预付费套餐和 BYOL 许可,请参阅 SQL VM 入门。
有关许可 SQL Server 的完整信息,请参阅定价。
文件流
使用高级文件共享的故障转移群集不支持文件流。 请使用存储空间直通部署群集,以使用文件流。
先决条件
在完成本文中的步骤之前,应已做好以下准备:
- 一个 Azure 订阅。
- Azure 虚拟机上的 Windows 域。
- 有权限在 Azure 虚拟机和 Active Directory 中创建对象的域用户帐户。
- 用于运行 SQL Server 服务以及可在装载文件共享时用于登录虚拟机的域用户帐户。
- 能够为以下组件提供足够 IP 地址空间的 Azure 虚拟网络和子网:
- 两个虚拟机。
- 故障转移群集的 IP 地址。
- 每个 FCI 的 IP 地址。
- 在 Azure 网络上配置的、指向域控制器的 DNS。
- 要基于数据库中数据文件的存储配额,用作群集驱动器的高级文件共享。
- 如果使用的是 Windows Server 2012 R2 及更低版本,你需要一个另外的文件共享,将其用作文件共享见证,因为 Windows 2016 和更高版本才支持云见证。 可以另外使用一个 Azure 文件共享,也可以在单独的虚拟机上使用文件共享。 如果要另外使用一个 Azure 文件共享,你可以使用与为群集驱动器使用的高级文件共享所用的进程来安装该文件共享。
满足这些先决条件后,即可开始构建故障转移群集。 第一步是创建虚拟机。
步骤 1:创建虚拟机
使用订阅登录到 Azure 门户。
-
可用性集可将各个容错域和更新域中的虚拟机分组。 它确保应用程序不会受到单一故障点(例如网络交换机或服务器机架电源装置)的影响。
如果尚未为虚拟机创建资源组,请在创建 Azure 可用性集时执行该操作。 若要使用 Azure 门户创建可用性集,请执行以下步骤:
在 Azure 门户中,选择“创建资源”以打开 Azure 市场。 搜索“可用性集”。
选择“可用性集”。
选择“创建”。
在“创建可用性集”下,提供以下值:
名称:可用性集的名称。
订阅:Azure 订阅。
资源组:如果想要使用现有的组,请单击“选择现有项”并从列表中选择该组。 否则,请选择“新建”并输入组的名称。
位置:设置要在其中创建虚拟机的位置。
容错域:使用默认值 (2)。
更新域:使用默认值 (5)。
选择“创建”以创建可用性集。
在可用性集中创建虚拟机。
在 Azure 可用性集中预配两个 SQL Server 虚拟机。 有关说明,请参阅在 Azure 门户中预配 SQL Server 虚拟机。
将两个虚拟机放在以下位置:
可用性集所在的 Azure 资源组中。
域控制器所在的同一个网络中。
能够为两个虚拟机提供足够 IP 地址空间的子网中,以及最终可能要在群集上使用的所有 FCI 中。
Azure 可用性集中。
重要
创建虚拟机后无法设置或更改可用性集。
从 Azure 市场中选择映像。 可以使用包含 Windows Server 和 SQL Server,或者只包含 Windows Server 的 Azure 市场映像。 有关详细信息,请参阅 Azure 虚拟机上的 SQL Server 概述。
Azure 库中的正式 SQL Server 映像包含已安装的 SQL Server 实例、SQL Server 安装软件和所需的密钥。
重要
创建虚拟机后,请删除预装的独立 SQL Server 实例。 将故障转移群集和高级文件存储设置为存储后,使用预装的 SQL Server 介质创建 SQL Server FCI。
或者,可以使用只包含操作系统的 Azure 市场映像。 选择一个 Windows Server 2016 Datacenter 映像,并在将故障转移群集和高级文件共享设置为存储后安装 SQL Server FCI。 此映像不包含 SQL Server 安装媒体。 将 SQL Server 安装媒体放在可以针对每个服务器运行该媒体的位置。
在 Azure 创建虚拟机之后,使用 RDP 连接到每个虚拟机。
首次使用 RDP 连接到虚拟机时,系统会提示是否允许在网络上发现该电脑。 请选择“是”。
如果使用某个基于 SQL Server 的虚拟机映像,请删除 SQL Server 实例。
在“程序和功能”中,右键单击“Microsoft SQL Server 201_ (64 位)”,然后选择“卸载/更改” 。
选择“删除”。
选择默认实例。
删除“数据库引擎服务”下的所有功能。 不要删除“共享功能”。 此时会显示以下屏幕截图中所示的内容:
依次选择“下一步”、“删除”。
-
在每个虚拟机上的 Windows 防火墙中打开以下端口:
目的 TCP 端口 说明 SQL Server 1433 SQL Server 的默认实例正常使用的端口。 如果使用了库中的某个映像,此端口会自动打开。 运行状况探测 59999 任何打开的 TCP 端口。 在后面的步骤中,需要将负载均衡器运行状况探测和群集配置为使用此端口。 文件共享 445 由文件共享服务使用的端口。
你可以在创建和配置虚拟机后,配置高级文件共享。
步骤 2:装载高级文件共享
登录到 Azure 门户,转到你的存储帐户。
转到“文件服务”下的“文件共享”,然后选择要用于 SQL 存储的高级文件共享 。
选择“连接”使系统显示文件共享的连接字符串。
从下拉列表中选择要使用的驱动器号,然后将两个代码块复制到记事本。
使用 RDP,通过 SQL Server FCI 将用作服务帐户的帐户连接到 SQL Server VM。
打开 PowerShell 命令管理控制台。
运行你早些时候在门户中工作时保存的命令。
使用文件资源管理器或“运行”对话框(Windows 徽标键 + R)转到共享。 使用网络路径
\\storageaccountname.file.core.chinacloudapi.cn\filesharename
。 例如:\\sqlvmstorageaccount.file.core.chinacloudapi.cn\sqlpremiumfileshare
在新连接的文件共享上创建至少一个文件夹,用于放置 SQL 数据文件。
在将加入群集的每个 SQL Server VM 上重复这些步骤。
重要
- 请考虑为备份文件单独使用一个文件共享,以便将该共享的 IOPS 和空间容量保留用于数据和日志文件。 可以为备份文件使用高级或标准文件共享。
- 如果使用的是 Windows 2012 R2 及更低版本,请执行相同的步骤来装载要用作文件共享见证的文件共享。
步骤 3:配置故障转移群集
下一步是配置故障转移群集。 在此步骤中,需要完成以下子步骤:
- 添加 Windows Server 故障转移群集功能。
- 验证群集。
- 创建故障转移群集。
- 创建云见证(适用于 Windows Server 2016 及更高版本)或文件共享见证(适用于 Windows Server 2012 R2 及更低版本)。
添加 Windows Server 故障转移群集
使用属于本地管理员的成员并且有权在 Active Directory 中创建对象的域帐户,通过 RDP 连接到第一个虚拟机。 使用此帐户完成余下的配置。
-
若要通过 UI 安装故障转移群集,请在两个虚拟机上执行以下步骤:
- 在“服务器管理器”中选择“管理”,然后选择“添加角色和功能”。
- 在“添加角色和功能向导”中,选择“下一步”,直到出现“选择功能”。
- 在“选择功能”中,选择“故障转移群集”。 请包含所有所需的功能和管理工具。 选择“添加功能”。
- 选择“下一步”,然后选择“完成”安装这些功能。
若要使用 PowerShell 安装故障转移群集,请在某个虚拟机上通过管理员 PowerShell 会话运行以下脚本:
$nodes = ("<node1>","<node2>") Invoke-Command $nodes {Install-WindowsFeature Failover-Clustering -IncludeAllSubFeature -IncludeManagementTools}
验证群集
使用 UI 或 PowerShell 验证群集。
若要使用 UI 验证群集,请在某个虚拟机中执行以下步骤:
在“服务器管理器”下,依次选择“工具”、“故障转移群集管理器”。
在“故障转移群集管理器”下,依次选择“操作”、“验证配置”。
选择“下一页”。
在“选择服务器或群集”下,输入两个虚拟机的名称。
在“测试选项”下,选择“仅运行选择的测试”。 选择“下一页”。
在“测试选择”下,选择除“存储”和“存储空间直通”以外的所有测试,如下所示 :
选择下一步。
在“确认”下,选择“下一步” 。
“验证配置向导”将运行验证测试。
若要使用 PowerShell 验证群集,请在某个虚拟机上通过管理员 PowerShell 会话运行以下脚本:
Test-Cluster -Node ("<node1>","<node2>") -Include "Inventory", "Network", "System Configuration"
验证群集后,创建故障转移群集。
创建故障转移群集
若要创建故障转移群集,需要:
- 将成为群集节点的虚拟机的名称。
- 故障转移群集的名称
- 故障转移群集的 IP 地址。 可以使用群集节点所在的同一 Azure 虚拟网络和子网中未使用的 IP 地址。
Windows server 2012 到 Windows Server 2016
对于 Windows server 2012 到 Windows Server 2016,可通过以下 PowerShell 脚本创建故障转移群集。 使用节点的名称(虚拟机名称)以及 Azure 虚拟网络中可用的 IP 地址更新脚本。
New-Cluster -Name <FailoverCluster-Name> -Node ("<node1>","<node2>") -StaticAddress <n.n.n.n> -NoStorage
Windows Server 2019
以下 PowerShell 脚本为 Windows Server 2019 创建故障转移群集。 有关详细信息,请参阅故障转移群集:群集网络对象。 使用节点的名称(虚拟机名称)以及 Azure 虚拟网络中可用的 IP 地址更新脚本。
New-Cluster -Name <FailoverCluster-Name> -Node ("<node1>","<node2>") -StaticAddress <n.n.n.n> -NoStorage -ManagementPointNetworkType Singleton
创建云见证(Win 2016 以上)
如果你使用的是 Windows Server 2016 及以上版本,需要创建云见证。 云见证是 Azure 存储 Blob 中存储的新型群集仲裁见证。 这样,就不需要托管见证共享的单独 VM,或不需要使用单独的文件共享。
创建 Blob 容器。
保存访问密钥和容器 URL。
配置仲裁
对于 Windows Server 2016 及以上版本,请将群集配置为使用刚创建的云见证。 按照在用户界面中配置仲裁见证的所有步骤操作。
对于 Windows Server 2012 R2 及以下版本,同样按照在用户界面中配置仲裁见证中的步骤操作,但在“选择仲裁见证”页上选择“配置文件共享见证”选项 。 指定分配为文件共享见证的文件共享,无论它是你在单独的虚拟机上配置的文件共享,还是从 Azure 装载的文件共享。
步骤 4:测试群集故障转移
测试群集的故障转移。 在“故障转移群集管理器”中,右键单击你的群集,选择“更多操作”>“移动核心群集资源”>“选择节点”,然后选择另一个群集节点 。 将核心群集资源移到群集的每个节点,再将它移回主节点。 如果可以成功将群集移到每个节点,则表示你已为安装 SQL Server 做好了准备。
步骤 5:创建 SQL Server FCI
配置故障转移群集后,可以创建 SQL Server FCI。
使用 RDP 连接到第一个虚拟机。
在“故障转移群集管理器”中,确保所有的核心群集资源都位于第一个虚拟机上。 如有必要,请将所有资源移到此虚拟机。
找到安装媒体。 如果虚拟机使用某个 Azure 市场映像,该媒体将位于
C:\SQLServer_<version number>_Full
。 选择“设置”。在“SQL Server 安装中心”中选择“安装” 。
选择“新建 SQL Server 故障转移群集安装”。 遵照向导中的说明安装 SQL Server FCI。
FCI 数据目录需位于高级文件共享上。 输入该共享的完整路径,格式为:
\\storageaccountname.file.core.chinacloudapi.cn\filesharename\foldername
。 系统将显示一条警告,提示你已将文件服务器指定为数据目录。 预计会出现此警告。 确保在保存文件共享时用于通过 RDP 连接 VM 的用户帐户正是 SQL Server 服务用于避免可能的失败的帐户。完成向导中的步骤后,安装程序会在第一个节点上安装 SQL Server FCI。
安装程序在第一个节点上安装 FCI 后,请使用 RDP 连接到第二个节点。
打开“SQL Server 安装中心”。 选择“安装”。
选择“将节点添加到 SQL Server 故障转移群集”。 按照向导中的说明安装 SQL Server 并将此服务器添加到 FCI。
注意
如果使用了包含 SQL Server 的 Azure 市场库映像,该映像已随附 SQL Server 工具。 如果未使用其中的某个映像,请单独安装 SQL Server 工具。 请参阅 Download SQL Server Management Studio (SSMS)(下载 SQL Server Management Studio (SSMS))。
步骤 6:创建 Azure 负载均衡器
在 Azure 虚拟机上,群集使用负载均衡器来保存每次都需要位于一个群集节点上的 IP 地址。 在此解决方案中,负载均衡器保存 SQL Server FCI 的 IP 地址。
有关详细信息,请参阅 创建并配置 Azure 负载均衡器。
在 Azure 门户中创建负载均衡器
若要创建负载均衡器,请执行以下操作:
在 Azure 门户中,转到包含虚拟机的资源组。
选择 添加 。 在 Azure 市场中搜索“负载均衡器”。 选择“负载均衡器”。
选择“创建”。
使用以下值设置负载均衡器:
- 订阅:Azure 订阅。
- 资源组:包含你的虚拟机的资源组。
- 名称:标识负载均衡器的名称。
- 区域:包含你的虚拟机的 Azure 位置。
- 类型:公共或专用。 可从虚拟网络内部访问专用负载均衡器。 大多数 Azure 应用程序可以使用专用负载均衡器。 如果应用程序需要通过 Internet 直接访问 SQL Server,请使用公共负载均衡器。
- SKU:标准。
- 虚拟网络:虚拟机所在的网络。
- IP 地址分配:静态。
- 专用 IP 地址:分配给 SQL Server FCI 群集网络资源的 IP 地址。
下图显示“创建负载均衡器”用户界面:
配置负载均衡器后端池
返回到包含虚拟机的 Azure 资源组,找到新的负载均衡器。 可能需要在资源组中刷新视图。 选择负载均衡器。
依次选择“后端池”、“添加”。
将该后端池与包含 VM 的可用性集进行关联。
在“目标网络 IP 配置”下选择“虚拟机”,并选择要作为群集节点参与操作的虚拟机。 请务必包括将承载 FCI 的所有虚拟机。
选择“确定”以创建后端池。
配置负载均衡器运行状况探测
在负载均衡器边栏选项卡上,选择“运行状况探测”。
选择 添加 。
在“添加运行状况探测”边栏选项卡中, 设置以下运行状况探测参数。
- 名称:运行状况探测的名称。
- 协议:TCP。
- 端口:为此步骤中的运行状况探测在防火墙中创建的端口。 在本文中,示例使用了 TCP 端口
59999
。 - 时间间隔:5 秒。
- 不正常阈值:2 次连续失败。
选择“确定”。
设置负载均衡规则
在负载均衡器边栏选项卡上,选择“负载均衡规则”。
选择 添加 。
设置负载均衡规则参数:
- 名称:负载均衡规则的名称。
- 前端 IP 地址:SQL Server FCI 群集网络资源的 IP 地址。
- 端口:SQL Server FCI TCP 端口。 默认实例端口为 1433。
- 后端端口:使用与启用“浮动 IP (直接服务器返回)”时为“端口”所用的相同值。
- 后端池:前面配置的后端池名称。
- 运行状况探测:前面配置的运行状况探测。
- 会话持久性:无。
- 空闲超时(分钟) :4.
- 浮动 IP (直接服务器返回) :已启用。
选择“确定”。
步骤 7:为探测配置群集
在 PowerShell 中设置群集探测端口参数。
若要设置群集探测端口参数,请使用环境中的值更新以下脚本中的变量。 从脚本中删除尖括号(<
和 >
)。
$ClusterNetworkName = "<Cluster Network Name>"
$IPResourceName = "<SQL Server FCI IP Address Resource Name>"
$ILBIP = "<n.n.n.n>"
[int]$ProbePort = <nnnnn>
Import-Module FailoverClusters
Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ILBIP";"ProbePort"=$ProbePort;"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
以下列表描述了需要更新的值:
<Cluster Network Name>
:Windows Server 故障转移群集的网络名称。 在“故障转移群集管理器”>“网络”中,右键单击该网络并选择“属性”。 正确的值位于“常规”选项卡的“名称”下。<SQL Server FCI IP Address Resource Name>
:SQL Server FCI IP 地址资源名称。 在“故障转移群集管理器”>“角色”中“SQL Server FCI”角色的“服务器名称”下,右键单击 IP 地址资源并选择单击“属性”。 正确的值位于“常规”选项卡的“名称”下。<ILBIP>
:ILB IP 地址。 在 Azure 门户中将此地址配置为 ILB 前端地址。 这也是 SQL Server FCI IP 地址。 可在“故障转移群集管理器”中找到该地址,它与<SQL Server FCI IP Address Resource Name>
位于同一属性页。<nnnnn>
:在负载均衡器运行状况探测中配置的探测端口。 任何未使用的 TCP 端口都有效。
重要
群集参数的子网掩码必须是 TCP IP 广播地址:255.255.255.255
。
设置群集探测后,可在 PowerShell 中看到所有群集参数。 运行此脚本:
Get-ClusterResource $IPResourceName | Get-ClusterParameter
步骤 8:测试 FCI 故障转移
测试 FCI 的故障转移以验证群集功能。 执行以下步骤:
使用 RDP 连接到 SQL Server FCI 群集节点之一。
打开“故障转移群集管理器”。 选择“角色”。 观察哪个节点拥有 SQL Server FCI 角色。
右键单击“SQL Server FCI”角色。
选择“移动”,再选择“最佳节点” 。
“故障转移群集管理器”显示该角色,其资源脱机。 然后资源会移动,并在另一个节点上恢复联机。
测试连接
若要测试连接,请登录到同一虚拟网络中的另一个虚拟机。 打开“SQL Server Management Studio”并连接到 SQL Server FCI 名称。
注意
如果需要,可以下载 SQL Server Management Studio。
限制
Azure 虚拟机支持 Windows Server 2019 上的 Microsoft 分布式事务处理协调器 (MSDTC),其中存储位于群集共享卷 (CSV) 和标准负载均衡器上。
在 Azure 虚拟机上,Windows Server 2016 或更早版本不支持 MSDTC,因为:
- 无法将群集 MSDTC 资源配置为使用共享存储。 在 Windows Server 2016 上,如果创建 MSDTC 资源,即使存储可用,它也不会显示任何可用的共享存储。 Windows Server 2019 中已修复此问题。
- 基本负载均衡器不处理 RPC 端口。