注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
使用监听程序和负载平衡器在 OCI 上配置 Microsoft SQL Server Always On 可用性组
简介
在 Oracle Cloud Infrastructure (OCI) 中部署 Microsoft SQL Server 为企业提供了一个强大的平台来满足其高可用性和业务连续性目标。Microsoft SQL Server 高可用性最有效的方法之一是 Always On 可用性组功能。Microsoft SQL Server Always On 可用性组提供高可用性和灾难恢复解决方案,支持跨多个 SQL Server 实例进行无缝故障转移和数据复制。
有多种方法可以设置 Microsoft SQL Server 可用性组。一种方法是将 SQL Server 虚拟机放置在同一虚拟网络中的单独子网中。要使用多子网体系结构部署 SQL Server 可用性组,请参阅使用 Always On 可用性组在 OCI 上部署高可用性 Microsoft SQL Server 数据库和在 OCI 上为 HA 和 DR 部署 Microsoft SQL Server Always On 可用性组。
按照本教程,您将使用单个子网内的虚拟机在 OCI 上部署和配置 SQL Server Always On 可用性组。此配置包括充当监听程序的专用 OCI 负载平衡器,可实现无缝客户端连接和高可用性。此方法非常适合以简单性和可靠性为关键的环境,提供自动故障转移、数据冗余以及对 SQL Server 数据库的不间断访问。借助此设置,您的基础设施能够以强大的业务连续性为关键任务工作负载提供支持。对于生产部署,请考虑实施增强的监视、日志记录、安全强化以及备份策略来补充此高可用性配置。
如果您希望在单个子网中部署 Always On 可用性组,本教程提供了使用 OCI 虚拟机和 OCI 负载平衡器进行设置的分步指导。本教程将指导您使用单个子网中的虚拟机以及 OCI 负载平衡器在 OCI 上设置双节点“始终可用”组。
体系结构
下图显示了解决方案的示例高级别体系结构。
本教程的排除项
-
在 OCI 上配置 Active Directory 域服务。有关更多信息,请参见 Creating Active Directory Domain Services in Oracle Cloud Infrastructure 。
-
在 OCI 上安装和配置 SQL Server。有关详细信息,请参阅 Oracle Cloud Infrastructure 上的 Microsoft SQL Server 。
-
Windows 故障转移群集的配置。有关详细信息,请参阅创建集群。
-
配置文件共享见证人。有关更多信息,请参见 Add a file share for a cluster quorum 。
目标
- 在 OCI 上使用单个子网中的虚拟机部署和配置 SQL Server Always On 可用性组。它包括设置 SQL Server 2022 Always On 可用性组和 OCI Load Balancer,以便通过监听程序实现高可用性和自动故障转移,实现无缝客户端连接。
先决条件
-
建议您基本了解 SQL Server Always On 可用性组。
-
访问具有已定义区间的 OCI 租户以托管所有相关资源。
-
配置有至少一个专用子网的虚拟云网络 (VCN)。
-
本教程至少需要 6 个专用 IP 地址。
- 1 用于域控制器
- 两个 SQL Server 节点的 2 个
- 1 个用于 Windows Server 故障转移群集 IP
- SQL Server Always On 可用性组监听程序 IP 1
- 1 个用于 OCI 负载平衡器
由于在 OCI 中不支持浮动 IP 地址,因此 SQL 可用性组 (AG) 监听程序和 OCI 负载平衡器的 IP 地址将不同。
-
为实施 SQL Server Always On 可用性组配置的安全列表规则 -
1433
和5022
端口已打开。 -
三个 Windows Server 2022 OCI 虚拟机实例。
- 配置为 Active Directory 域控制器的一个 VM。
- 安装了 SQL Server 2022 和 SQL Server Management Studio (SSMS) 的两个 VM。
-
需要文件共享见证才能支持法定配置。
- 为了简单起见,本教程使用域控制器上的共享文件夹来托管文件共享见证。
- 对于生产环境,请考虑实施更强大的法定模型。
-
必须在两个 SQL Server VM 之间配置 Windows 故障转移集群。
任务 1:配置 SQL Server Always On 可用性组
任务 1.1:在 SQL Server 节点(DevSQL1
和 DevSQL2
)上启用可用性组
-
在
DevSQL1
节点中,转至开始,搜索并打开 SQL Server 2022 Configuration Manager 。 -
选择 SQL Server Services ,右键单击 SQL Server (MSSQLSERVER) 服务并选择 Properties(属性)。如果使用命名实例,则将为 SQL Server (
INSTANCENAME
)。 -
单击始终在可用性组上,然后选择始终在可用性组上启用。
-
选择 Apply ,然后单击 OK 。
-
重新启动 SQL Server 服务。
-
在另一个节点 (
DevSQL2
) 上重复步骤 1 到 5。
任务 1.2:在第一个 SQL Server 节点 (DevSQL1
) 上创建数据库并进行完全备份
-
在
DevSQL1
节点中,转至开始,搜索 SSMS ,然后打开 SQL Server Management Studio (SSMS) 。 -
连接到主 SQL Server。在本教程中,它是
DevSQL1
。 -
在对象浏览器下,右键单击数据库,然后单击新建数据库。
-
在常规下,输入数据库名称,在选项下,选择完全作为恢复模型。
-
单击确定。
-
要执行完整备份,请右键单击 database "AdventureWorks2022" 、 Tasks 并单击 Backup 。
-
在 General(常规)下,确保 Backup Type(备份类型)为 Full(完全),在 Destination(目标)下,选择 Disk(磁盘)作为 Backup to(备份到),单击 Add(添加),然后输入完整备份的位置和文件名。
-
单击确定。
还可以使用 Transact-SQL 进行备份。例如:
Transact-SQL:
BACKUP DATABASE [AdventureWorks2022] TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Backup\AdventuresWork2022.bak' WITH NOFORMAT, NOINIT, NAME = N'AdventureWorks2022-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
任务 1.3:创建可用性组
-
打开 SQL Server Management Studio,连接到
DevSQL1
。在对象浏览器下,右键单击始终处于高可用性状态,然后单击新建可用性组向导。这将打开新可用性组页。单击下一步。
-
在指定选项下,输入 Availability Group Name 作为
DevAG
,输入 Cluster type 作为 Windows Server Failover Cluster ,然后单击 Next 。 -
在选择数据库中,选择要添加到此可用性组的数据库。在状态下,应看到满足先决条件,以便能够将数据库添加到可用性组。如果有任何问题,它会告诉你原因,我们需要采取必要的行动来满足先决条件。例如,完整数据库备份可能处于暂挂状态。
-
在 Specify Replicas(指定副本)中,添加副本。单击副本可确保两个节点都添加到可用性副本下,并将可用性模式更改为同步提交。您可以根据自己的要求使用不同的可用性模式。
-
单击端点可确保端点使用相同的端口,并且这些端口在防火墙和安全列表中处于打开状态。默认情况下将为端口
5022
。注:对于本教程,我们将所有其他选项保留为默认值。截至目前,请勿创建监听程序。
-
接下来,我们需要选择数据同步。选择自动植入并单击下一步。
-
在验证中,确保验证为成功并修复任何失败。您可以忽略检查监听程序配置警告,因为稍后我们将创建监听程序。单击下一步,创建可用性组后,选择关闭以关闭向导。
-
在对象浏览器中,展开始终保持高可用性,然后展开可用性组。现在应在此容器中看到新的可用性组。右键单击可用性组,然后选择显示仪表盘。
-
打开 Failover Cluster Manager(故障转移群集管理器),转至 Start(启动),搜索并打开 Failover Cluster Manager(故障转移群集管理器)。连接到集群并单击角色。
我们使用的可用性组名称是群集中的角色,并且该可用性组没有用于客户机连接的 IP 地址,因为我们未配置监听程序。我们将在创建 OCI 负载平衡器后配置监听程序。
在此阶段,可用性组已成功配置有两个 SQL Server 副本,允许在实例之间进行故障转移。但是,由于尚未设置监听程序,因此无法使用监听程序建立客户机连接。
任务 2:创建 OCI 负载平衡器并配置可用性组监听程序
在 OCI 上配置 SQL Server Always On 可用性组监听程序的方法有多种,包括使用多子网设置或为每个虚拟机分配辅助 IP 地址。虽然这些方法有效,但它们通常需要额外的配置或定制脚本来管理故障转移事件期间的 IP 移动。
如果您希望在单个子网环境中部署 Always On 可用性组,并且希望避免使用定制脚本,则使用专用 OCI 负载平衡器可提供简化的可靠解决方案。本节将指导您完成 OCI 负载平衡器配置,使其充当“始终可用”可用性组的监听程序,从而在单个子网内实现无缝连接和故障转移处理。
任务 2.1:为 SQL Server Always On 可用性组监听程序保留静态专用 IP 地址
保留 OCI 中的静态专用 IP,稍后将在 Windows 故障转移集群中分配给 SQL Server Always On 可用性组监听程序 IP。我们保留此 IP 地址以确保在 OCI 上未分配任何其他服务或 VM。客户端不会使用此 IP 地址进行连接,但这将有助于可用性组的故障转移并确保 OCI 负载平衡器将连接路由到正确的主服务器。
-
转到 OCI 控制台,导航到网络,然后单击虚拟云网络。
-
转到要用于 SQL Server 节点的 VCN。
-
单击子网,转到用于 SQL Server 节点的子网。
-
在资源下,单击 IPv4 地址。
-
单击添加预留的 IPv4 地址。
-
输入要分配给 SQL Server Always On 可用性组监听程序的 IP 地址。这可以是任何未使用的 IP 地址,请注意,客户机将无法使用此 IP 地址进行远程连接。这是将分配给 Windows 故障转移群集中的 SQL Server Always On 可用性组监听程序的虚拟 IP。在本教程中,我们使用了
10.0.0.148
。
任务 2.2:创建专用 OCI 负载平衡器
注:此处未提及的字段将保留为默认值。
-
转到 OCI 控制台,导航到网络和负载平衡器。
-
单击 Load Balancer 和 Create load balancer 。
-
输入负载平衡器名称并选择专用作为可见性类型。
-
在选择网络中,选择将用于此负载平衡器的 VCN 和子网的区间名称。使用您用于 SQL Server 节点的同一 VCN 和子网。
-
在管理中,选择将在其中创建此负载平衡器的区间。确保启用防止在负载平衡器、监听程序和后端仍处于活动状态时将其删除,以避免意外中断服务,然后单击下一步。
-
在后端中,将负载平衡策略指定为加权循环。
-
在选择后端服务器中,同时添加 SQL Server 节点:
DevSQL1
和DevSQL2
。将端口号更改为1433
;如果要对 SQL Server 使用其他端口,请输入相应的端口号。 -
在 Specify health check policy 中,将 TCP Protocol 与端口号
59999
一起使用。可以使用任何未使用的端口。 -
将所有其他设置保留为默认,我们正在对所选 VCN 使用安全列表。单击下一步。
-
在 Configure Listener(配置监听程序)中,输入 Listener name(监听程序名称)、 TCP 流量和 Port(端口)编号作为
1433
。将所有其他设置保留为默认值。 -
单击下一步,查看配置,然后单击提交。
-
预配 OCI 负载平衡器后,您可以通过转到网络、负载平衡器并单击负载平衡器来记下 OCI 负载平衡器的专用 IP 地址。
在本教程中,负载平衡器的 IP 地址为 10.0.0.149
。这是客户机将用于连接到 SQL Server Always On 可用性组监听程序的 IP 地址。
任务 2.3:配置 SQL Server Always On 可用性组监听程序
-
远程桌面协议 (Remote Desktop Protocol,RDP) 到托管主副本的 VM。在本教程中,它是
DevSQL1
。要确认这一点,您可以打开 Windows 故障转移群集管理器、角色,对于 SQL 可用性组角色,请查看 Owner Node(所有者节点)列以确认哪个节点是主副本。 -
转到 Networks 并将网络 Name 作为
$ClusterNetworkName
变量记下。 -
添加客户机访问点。客户机访问点是应用程序用于连接到可用性组中的数据库的网络名称。
-
在 Failover Cluster Manager(故障转移群集管理器)中,展开群集名称并选择 Roles(角色)。
-
单击角色,右键单击可用性组名称,选择添加资源,然后单击客户端访问点。
-
在名称中,为此新监听程序创建名称。新监听程序的名称是应用程序用于连接到 SQL Server 可用性组中的数据库的网络名称。
-
单击 Next 两次,然后选择 Finish 。此时不要使监听程序或资源联机。
-
-
使可用性组的群集角色脱机。在故障转移群集管理器中,单击角色,右键单击角色,然后选择停止角色。
-
为可用性组配置 IP 资源。
-
单击资源,然后展开您创建的客户端访问点。客户机访问点处于脱机状态。
-
右键单击 IP 资源,然后选择属性。将 IP 地址的名称记为
$IPResourceName
变量。在本教程中,名称为IP Address 10.0.0.0
。 -
单击 IP Address ,然后选择 Static IP Address 。将 IP 地址设置为我们在任务 2.1 中预留的 IP 地址。在本教程中,它是
10.0.0.148
。
-
-
使 SQL Server 可用性组依赖于客户机访问点。
-
在 Failover Cluster Manager(故障转移群集管理器)中,单击 Roles(角色),然后选择可用性组。
-
单击其他资源下的资源,右键单击可用性组资源,然后单击属性。
-
单击相关项并添加客户机访问点(监听程序)的名称。
-
单击确定。
-
-
使客户机访问点依赖于 IP 地址。
-
在 Failover Cluster Manager(故障转移群集管理器)中,单击 Roles(角色),然后选择可用性组。
-
单击资源,右键单击服务器名称下的客户机访问点,然后单击属性。
-
单击 Dependencies(相关项)并验证 IP 地址是否为相关项。如果不是,请设置对 IP 地址的依赖性。如果列出了多个资源,请验证 IP 地址是否具有 OR (而非 AND )依赖项,然后单击 OK (确定)。
-
-
在 Windows PowerShell 中设置群集参数。
-
将以下 PowerShell 脚本复制到 SQL Server 实例之一。更新环境的变量。
-
通过选择 Networks(网络)在 Failover Cluster Manager(故障转移群集管理器)中查找
$ClusterNetworkName
名称,右键单击网络并选择 Properties(属性)。$ClusterNetworkName
位于 General(常规)选项卡中的 Name(名称)下方。 -
$IPResourceName
是为 Failover Cluster Manager 中的 IP 地址资源指定的名称。通过选择角色,选择 SQL Server 可用性组或 FCI 名称,选择服务器名称下的资源,右键单击 IP 地址资源,然后单击属性,可以在故障转移集群管理器中找到此属性。正确的值位于 General(常规)选项卡中的 Name(名称)下方。 -
$ListenerILBIP
是您在 Azure 负载平衡器中为可用性组监听程序创建的 IP 地址。在 Failover Cluster Manager(故障转移集群管理器)中,找到与 SQL Server AG/FCI 监听程序资源名称相同的属性页上的$ListenerILBIP
。 -
$ListenerProbePort
是您在 Azure 负载平衡器上为可用性组监听程序(例如59999
)配置的端口。任何未使用的 TCP 端口都有效。
$ClusterNetworkName = "<MyClusterNetworkName>" # The cluster network name. Use Get-ClusterNetwork on Windows Server 2012 or later to find the name. $IPResourceName = "<IPResourceName>" # The IP address resource name. $ListenerILBIP = "<n.n.n.n>" # The IP address that we reserved in Task 2.1. This is the static IP address for the SQL Server AG Listener that you reserved in OCI Console. [int]$ListenerProbePort = <nnnnn> Import-Module FailoverClusters Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ListenerILBIP";"ProbePort"=$ListenerProbePort;"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
对于本教程,我们使用了以下内容:
$ClusterNetworkName = "Cluster Network 1" # The cluster network name. Use Get-ClusterNetwork on Windows Server 2012 or later to find the name. $IPResourceName = "IP Address 10.0.0.0" # The IP address resource name. $ListenerILBIP = "10.0.0.148" # The IP address of the internal load balancer. This is the static IP address for the load balancer that you configured in the Azure portal. [int]$ListenerProbePort = 59999 Import-Module FailoverClusters Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ListenerILBIP";"ProbePort"=$ListenerProbePort;"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
-
-
通过在其中一个群集节点上运行 PowerShell 脚本来设置群集参数。
-
-
添加排除将阻止其他系统进程动态分配给同一端口。对于此方案,在所有群集节点上配置以下排除项。
netsh int ipv4 add excludedportrange tcp startport=59999 numberofports=1 store=persistent
-
使可用性组的群集角色联机。在 Failover Cluster Manager(故障转移群集管理器)中,单击 Roles(角色),右键单击该角色,然后选择 Start Role(启动角色)。
-
在 SQL Server Management Studio 中,设置监听程序端口。
-
打开 SQL Server Management Studio 并连接到主副本。
-
转到 Always On High Availability 、 Availability Groups(可用性组),然后单击 Availability group listeners(可用性组监听程序)。
-
右键单击在任务 2.2 中创建的监听程序名称,然后单击属性。
-
在 Port(端口)中,指定可用性组监听程序的端口号,然后单击 OK(确定)。默认值为
1433
。
-
-
在 DNS 服务器中,确保专用 OCI 负载平衡器 IP 地址存在指向 SQL 可用性组监听程序名称的主机 A 记录。确保 SQL 监听程序计算机对象无法更新 DNS 记录。这是为了确保在故障转移后,DNS 条目不会更新为 Windows 故障转移群集中使用的 IP 地址。
在本教程中,我们更新了 IP 地址为
10.0.0.149
而不是10.0.0.148
的 SQL 可用性组监听程序的主机 A 记录,并更新了安全性以确保SQLAGL$
计算机对象无法更新此记录,并且只能读取它。
可能有更多的方法来实现这一点,你可以实现自己的解决方案。目标是为 SQL Server 可用性组监听程序设置 IP 地址为 OCI 负载平衡器的 DNS 记录。
现在,您可以测试从 SSMS 或任何其他客户端工具到 SQL Server 可用性组监听程序的连接。
相关链接
确认
- 作者 — Deviprasad Moolya(首席云架构师)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Configure Microsoft SQL Server Always On Availability Group on OCI with Listener and Load Balancer
G33423-01
Copyright ©2025, Oracle and/or its affiliates.