Azure 虚拟机上的 SQL Server 故障转移群集实例 (FCI)
本文介绍了在 Azure 虚拟机 (VM) 上使用 SQL Server 故障转移群集实例 (FCI) 时的功能差异。
若要开始,请准备 VM。
概述
Azure VM 上的 SQL Server 使用 Windows Server 故障转移群集 (WSFC) 功能通过冗余在服务器实例级别(故障转移群集实例)上提供本地高可用性。 FCI 是跨 WSFC(或只是群集)节点和(可能)跨多个子网安装的 SQL Server 的单个实例。 在网络上,FCI 显示为在单台计算机上运行的单个 SQL Server 实例。 但是,如果当前节点变得不可用,则 FCI 提供从一个 WSFC 节点到另一个 WSFC 节点的故障转移。
本文的其余部分重点介绍在将故障转移群集实例与 Azure VM 上的 SQL Server 一起使用时这些实例的区别。 若要详细了解故障转移群集技术,请参阅:
Quorum
Azure 虚拟机上的 SQL Server 故障转移群集实例支持对群集仲裁使用磁盘见证、云见证或文件共享见证。
若要了解详细信息,请参阅 Azure 中 SQL Server VM 的仲裁最佳做法。
存储
在传统本地群集环境中,Windows 故障转移群集将可供所有节点访问的存储区域网络 (SAN) 用作共享存储。 SQL Server 文件托管在共享存储上,且只有活动节点可同时访问这些文件。
Azure VM 上的 SQL Server 提供各种选项用作共享存储解决方案,它适用于 SQL Server 故障转移群集实例的部署:
Azure 共享磁盘 | 高级文件共享 | 存储空间直通 (S2D) | |
---|---|---|---|
最低操作系统版本 | All | Windows Server 2012 | Windows Server 2016 |
最低 SQL Server 版本 | All | SQL Server 2012 | SQL Server 2016 |
受支持的 VM 可用性 | 高级 SSD LRS:包含或不包含邻近放置组的可用性集 高级 SSD ZRS:可用性区域 超级磁盘:相同的可用性区域 |
可用性集和可用性区域 | 可用性集 |
支持文件流 | 是 | No | 是 |
支持 MSDTC | 是 | 否 | 否 |
此部分的其余内容列出了可用于 Azure VM 上的 SQL Server 的每个存储选项的优点和限制。
Azure 共享磁盘
Azure 共享磁盘是 Azure 托管磁盘的一项功能。 Windows Server 故障转移群集支持将 Azure 共享磁盘与故障转移群集实例一起使用。
支持的操作系统:All
支持的 SQL 版本:All
优点:
- 适用于希望迁移到 Azure,同时保持其高可用性和灾难恢复 (HADR) 体系结构不变的应用程序。
- 得益于 SCSI 持久性预留 (SCSI PR) 支持,可按原样将群集应用程序迁移到 Azure。
- 支持共享的 Azure 高级 SSD 和 Azure 超级磁盘存储。
- 可使用单个共享磁盘或对多个共享磁盘设置带区来创建共享存储池。
- 支持文件流。
- 高级 SSD 支持可用性集。
- 高级 SSD 区域冗余存储 (ZRS) 支持可用性区域。 FCI 的 VM 部分可以放在不同的可用性区域中。
- 从 Windows Server 2019 开始支持 Microsoft 分布式事务处理协调器 (MSDTC)。
注意
虽然 Azure 共享磁盘也支持标准 SSD 大小,但由于存在性能限制,不建议对 SQL Server 工作负载使用标准 SSD。
限制:
- 不支持高级 SSD 磁盘缓存。
- 超级磁盘不支持可用性集或区域冗余存储 (ZRS)。
- Ultra Disks 支持可用性区域,但 VM 必须位于同一可用性区域中,这会将虚拟机的可用性降低至 99.9%。
首先,请参阅使用 Azure 共享磁盘配置故障转移群集实例。
存储空间直通
存储空间直通是一项 Windows Server 功能,可用于 Azure 虚拟机上的故障转移群集。 它提供基于软件的虚拟 SAN。
支持的操作系统:Windows Server 2016 及更高版本
支持的 SQL 版本:SQL Server 2016 及更高版本
优点:
- 充足的网络带宽可实现可靠且性能高的共享存储解决方案。
- 支持 Azure Blob 缓存,因此可从缓存中本地提供读取。 (更新同步复制到两个节点。)
- 支持文件流。
限制:
- 仅适用于 Windows Server 2016 及更高版本。
- 不支持可用性区域。
- 要求对两个虚拟机附加相同的磁盘容量。
- 由于仍在进行的磁盘复制,需要高网络带宽来实现高性能。
- 由于对每个 VM 附加了存储,因此需要更大的 VM 大小且存储费用加倍。
- 不支持 Microsoft 分布式事务处理协调器 (MSDTC)。
首先,请参阅使用存储空间直通配置故障转移群集实例。
高级文件共享
高级文件共享是 Azure 文件存储的一项功能。 高级文件共享由 SSD 提供支持,始终具有低延迟。 它们完全支持在 Windows Server 2012 或更高版本上用于 SQL Server 2012 或更高版本的故障转移群集实例。 高级文件共享提供更高的灵活性,使你能在不停机的情况下对文件共享进行大小调整和缩放。
支持的操作系统:Windows Server 2012 和更高版本
支持的 SQL 版本:SQL Server 2012 和更高版本
优点:
- 适合虚拟机的共享存储解决方案可跨多个可用性区域分布。
- 完全托管的文件系统,具有单位数的延迟和可突发的 I/O 性能。
- 并非所有 SQL Server 功能都受支持 - 例如数据库快照、文件流和 CHECKDB(无 TABLOCK)。 有关详细信息,请参阅限制。
限制:
- 仅适用于 Windows Server 2012 及更高版本。
- 不支持 FileStream。
- 不支持 Microsoft 分布式事务处理协调器 (MSDTC)。
首先,请参阅使用高级文件共享配置故障转移群集实例。
Partner
有一些合作伙伴群集解决方案采用受支持的存储。
支持的操作系统:All
支持的 SQL 版本:All
一个示例是将 SIOS DataKeeper 用作存储。 有关详细信息,请参阅故障转移群集和 SIOS DataKeeper 博客文章。
iSCSI 和 ExpressRoute
还可通过 Azure ExpressRoute 公开 iSCSI 目标共享块存储。
支持的操作系统:All
支持的 SQL 版本:All
例如,NetApp 专用存储 (NPS) 使用 Equinix 通过 ExpressRoute 向 Azuer VM 公开 iSCSI 目标。
对于 Azure 合作伙伴提供的共享存储和数据复制解决方案,如有任何关于在故障转移时访问数据的问题,请联系供应商。
连接
若要在连接到故障转移群集实例时提供与本地体验一致的体验,请将 SQL Server VM 部署到同一虚拟网络中的多个子网。 如果有多个子网,则无需额外依赖 Azure 负载均衡器或分布式网络名称 (DNN) 将流量路由到 FCI。
如果将 SQL Server VM 部署到单个子网,则可以配置虚拟网络名称 (VNN) 和 Azure 负载均衡器,或者配置分布式网络名称 (DNN) 以将流量路由到故障转移群集实例。 查看两者之间的差异;然后,为故障转移群集实例部署分布式网络名称或虚拟网络名称。
建议尽可能地使用分布式网络名称,因为这样可以加快故障转移的速度,而且可以消除负载均衡器的管理开销和成本。
使用 DNN 时,大多数 SQL Server 功能可以透明使用 FCI,但某些功能可能需要满足特殊的考虑因素。 有关详细信息,请参阅 FCI 和 DNN 互操作性。
注意
如果相同群集上有多个 AG 或 FCI,并且使用 DNN 或 VNN 侦听器,则每个 AG 或 FCI 都需要自己的独立连接点。
限制
有限的扩展支持
目前,向 SQL IaaS 代理扩展注册的 Azure 虚拟机上的 SQL Server 故障转移群集实例仅支持通过基本注册提供的有限数量的功能,而不支持需要代理的功能,例如自动备份、修补和高级门户管理。 请参阅权益表以了解更多信息。
如果 SQL Server VM 注册到 SQL IaaS 代理扩展,并且已启用任何需要代理的功能,则需要通过删除相应 VM 的 SQL 虚拟机资源从 SQL Server VM 中删除该扩展,然后再次将其注册到 SQL IaaS 代理扩展。 使用 Azure 门户删除 SQL 虚拟机资源时,请取消勾选相应虚拟机旁边的复选框,从而避免删除该虚拟机。
MSDTC
Azure 虚拟机支持 Windows Server 2019 上的 Microsoft 分布式事务处理协调器 (MSDTC),其中存储位于群集共享卷 (CSV) 和 Azure 标准负载均衡器上,或者位于正在使用 Azure 共享磁盘的 SQL Server VM 上。
在 Azure 虚拟机上,具有群集共享卷的 Windows Server 2016 或更早版本不支持 MSDTC,因为:
- 无法将群集 MSDTC 资源配置为使用共享存储。 在 Windows Server 2016 上,如果创建 MSDTC 资源,即使存储可用,也不会显示任何可用的共享存储。 Windows Server 2019 中已修复此问题。
- 基本负载均衡器不处理 RPC 端口。