注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
在 OCI 上为 DR 部署 Microsoft SQL Server Distributed Always On 可用性组
简介
Distributed Always On 可用性组(分布式可用性组)是 Microsoft SQL Server 中的一项强大功能,它扩展了 SQL Server 传统可用性组的功能。
通过分布式可用性组,您可以创建跨在不同 Oracle Cloud Infrastructure (OCI) 区域中运行的多个 Windows Server 故障转移集群 (WSFC) 的灾难恢复 (Disaster Recovery,DR) 解决方案。
这使您能够为在 OCI 上运行的关键 SQL Server 数据库实现更高级别的可用性、灾难恢复功能和地理分布。
本教程的排除项
在本教程中,我们将不介绍如何逐步创建单个 Microsoft SQL Server Always On 可用性组。有关详细信息,请参阅在 OCI 上为 HA 和 DR 部署 Microsoft SQL Server Always On 可用性组。
请参阅以下官方 Microsoft 文档:
目标
- 在 OCI 上创建 Microsoft SQL Server 分布式 Always On 可用性组解决方案。
先决条件
-
分布式可用性组的构建块包括:
-
VCN:将 OCI 虚拟云网络 (Virtual Cloud Networks,VCN) 创建为两个单独的 OCI 区域,并通过动态路由网关 (Dynamic Routing Gateways,DRG) 远程对等连接。
-
AOAG 1:这在 OCI 区域 1 中运行。这就是要复制的数据库正常运行的地方。这基于以下示例(巴黎 OCI 区域)中在 SQL Server #1 和 SQL Server #2 上运行的 WSFC。
-
AOAG 2:此功能在 OCI 区域 2 中运行。这是完全独立的 Always On 可用性组,在由以下示例(马赛 OCI 区域)中的 SQL Server #3 和 SQL Server #4 组成的 WSFC 上运行。
-
分布式 AOAG:这是在要复制的 SQL 数据库中创建的逻辑构造。
下图显示了分布式可用性组的逻辑表示。
-
-
创建两个独立的“始终可用”组(一个在第一个区域中,另一个在第二个区域中)。有关详细信息,请参阅在 OCI 上为 HA 和 DR 部署 Microsoft SQL Server Always On 可用性组。
现在,我们在两个不同的 OCI 区域中运行了两个独立的 Always On 可用性组,在此示例中,OCI 区域是 Paris 和 Marseille 。
-
第一个区域中的第一个 WSFC 集群 (
paris-wsfc
),第一个 SQL Always On 可用性组 (paris-aoag
) 和 SQL Always On 可用性组的 SQL 监听程序 (paris-sql-list
)。两个 Windows 节点分别是
sql-srv1
和sql-srv2
。 -
在第二个区域中,我们有第二个 WSFC 集群 (
marseille-wsfc
),第二个 SQL Always On 可用性组 (marseille-aoag
) 和第二个 SQL Always On 可用性组的 SQL 监听程序 (mars-sql-list
)。两个 Windows 节点分别是
sql-srv3
和sql-srv4
。 -
从 SQL Server 的角度来看,从
sql-srv1
(paris-aoag
) 开始,我们可以在此示例中看到 DemoDB ,该数据库是使用第一个“始终可用”组和新创建的distributed-aoag
复制的数据库。 -
因此,通过与
sql-srv3
(marseille-aoag
) 连接,我们还可以在此示例中看到 DemoDB ,该数据库与第一个 Always On 可用性组、新创建的distributed-aoag
以及第二个 Always On 可用性组(在第二个站点(马赛)中创建的marseille-aoag
一起复制。
-
任务 1:创建分布式可用性组
创建分布式可用性组 (distributed-aoag
),该组由两个已运行的 Always On 可用性组组成。
如前所述,我们假设两个独立的 Always On 可用性组已在两个不同的 OCI 区域中启动并运行。
第二个“始终可用”组 (marseille-aoag
),即备用组,需要没有关联的数据库,因此在创建分布式可用性组之前,第二个“始终可用”组几乎需要为空,因此没有任何关联的可用性数据库。您可以像往常一样使用关联的初始数据库创建第二个“始终可用”组,之后可以删除仅用于创建第二个“始终可用”组的此数据库。这是因为图形界面无法创建与任何数据库关联的“始终可用”组。
-
在第一个“始终可用”组上创建分布式可用性组。
连接到第一个服务器上的 SQL Server(本示例中为巴黎站点
sql-srv1
节点),然后运行以下 SQL 命令。注:
-
监听程序名称为
paris-sql-list
和mars-sql-list
。 -
要使用的 TCP 端口,
5022
是端点的端口,必须使用。这通常与监听程序端口 (1433
) 不同。 -
可用性组名称必须正好是已运行的 Always On 可用性组使用的名称。
USE MASTER; CREATE AVAILABILITY GROUP [distributed-aoag] WITH (DISTRIBUTED) AVAILABILITY GROUP ON 'paris-aoag' WITH ( LISTENER_URL = 'tcp://paris-sql-list.acme.corp:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, FAILOVER_MODE = MANUAL, SEEDING_MODE = AUTOMATIC ), 'marseille-aoag' WITH ( LISTENER_URL = 'tcp://mars-sql-list.acme.corp:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, FAILOVER_MODE = MANUAL, SEEDING_MODE = AUTOMATIC ); GO
-
-
加入第二个 Always On 可用性组上的分布式可用性组。
连接到第二个 Always On 可用性组(Marseille 站点
sql-srv3
服务器)的第一个服务器上的 SQL Server,然后运行以下 SQL 命令。USE MASTER; ALTER AVAILABILITY GROUP [distributed-aoag] JOIN AVAILABILITY GROUP ON 'paris-aoag' WITH ( LISTENER_URL = 'tcp://paris-sql-list.acme.corp:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, FAILOVER_MODE = MANUAL, SEEDING_MODE = AUTOMATIC ), 'marseille-aoag' WITH ( LISTENER_URL = 'tcp://mars-sql-list.acme.corp:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, FAILOVER_MODE = MANUAL, SEEDING_MODE = AUTOMATIC ); GO
-
与传统可用性组不同,分布式可用性组不需要 WSFC 中的资源组或角色,这一点非常重要。所有元数据都在 SQL Server 中进行管理。这意味着即使是 SQL Server Management Studio 也不会直接显示分布式可用性组中的数据库名称。
要查看此信息,请运行以下 Transact-SQL 脚本。
--View metadata and status of the Distributed Availability Group SELECT r.replica_server_name, r.endpoint_url, rs.connected_state_desc, rs.role_desc, rs.operational_state_desc, rs.recovery_health_desc,rs.synchronization_health_desc, r.availability_mode_desc, r.failover_mode_desc FROM sys.dm_hadr_availability_replica_states rs INNER JOIN sys.availability_replicas r ON rs.replica_id=r.replica_id ORDER BY r.replica_server_name
注:为了适应区域之间的潜在网络延迟,我们已使用异步提交复制配置了主和辅助 Always On 可用性组。这样可以最大限度地降低主数据库的性能开销。在每个 Always On 可用性组中,我们选择了在副本之间进行同步提交复制,以确保高可用性。但是,对于异步提交副本之间的故障转移(如果是分布式可用性组),减少数据丢失需要在启动故障转移之前临时切换到同步提交模式。对于 failover_mode,分布式可用性组的唯一可用模式是手动模式。
任务 2:分布式可用性组的故障转移过程
在本任务中,我们将讨论两个 Always On 可用性组之间的故障转移。数据库的故障转移过程由以下简单步骤和检查组成。
-
初始检查。
-
将主要 Always On 可用性组和辅助 Always On 可用性组的可用性模式从异步更改为同步。
-
运行脚本以检查同步是否正常。
-
将主要“始终可用”组的角色从主要组更改为辅助组。
-
故障转移到辅助 Always On 可用性组。
-
将主要 Always On 可用性组和辅助 Always On 可用性组的可用性模式从同步更改为异步。
执行相应步骤:
-
运行以下脚本以检查同步是否正常,首先在当前主站点的当前主 SQL 上,然后在该次站点的主 SQL 上。
执行的结果必须为
CONNECTED_STATE
=CONNECTED
,SYNCHRONIZATION_HEALTH
=HEALTHY
。select ag.name, ag.is_distributed, ar.replica_server_name, ar.availability_mode_desc, ars.connected_state_desc, ars.role_desc, ars.operational_state_desc, ars.synchronization_health_desc from sys.availability_groups ag join sys.availability_replicas ar on ag.group_id=ar.group_id left join sys.dm_hadr_availability_replica_states ars on ars.replica_id=ar.replica_id where ag.is_distributed=1 GO
-
更改可用性模式。首先在当前主站点的当前主 SQL Server 上运行以下脚本,然后在辅助站点的主 SQL Server 上运行。
--Run this first on the primary replica of the primary AOAG and then again on the secondary AOAG USE MASTER; ALTER AVAILABILITY GROUP [distributed-aoag] MODIFY AVAILABILITY GROUP ON 'paris-aoag' WITH ( AVAILABILITY_MODE = SYNCHRONOUS_COMMIT ), 'marseille-aoag' WITH ( AVAILABILITY_MODE = SYNCHRONOUS_COMMIT );
-
要确保不丢失数据,请验证此步骤的结果。状态必须为
SYNCHRONIZED
,对于全局主数据库和转发器上的每个数据库,last_hardened_lsn
应匹配。-- Run this query on the Global Primary and the forwarder -- Check the results to see if synchronization_state_desc is SYNCHRONIZED, and the last_hardened_lsn is the same per database on both the global primary and forwarder -- If not rerun the query on both side every 5 seconds until it is the case -- SELECT ag.name , drs.database_id , db_name(drs.database_id) as database_name , drs.group_id , drs.replica_id , drs.synchronization_state_desc , drs.last_hardened_lsn FROM sys.dm_hadr_database_replica_states drs INNER JOIN sys.availability_groups ag on drs.group_id = ag.group_id;
-
现在,您已准备好在当前主站点的当前主 SQL Server 上设置
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
。--Run this script into Primary AOAG USE MASTER; ALTER AVAILABILITY GROUP [distributed-aoag] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 1);
现在,您可以将主要“始终可用”组的角色从主要组更改为辅助组。
--Run this script into Primary AOAG, this will terminate client applications connected to the primary replica of the primary AOAG USE MASTER; ALTER AVAILABILITY GROUP [distributed-aoag] SET (ROLE = SECONDARY);
-
将辅助 Always On 可用性组的角色从辅助组更改为主组。以下脚本将执行此角色更改,为数据库启用读取或写入操作。此外,分布式可用性组中 Always On 可用性组的角色也将相应更新。
--Run this script into Secondary AOAG, this will terminate client applications connected to the primary replica of the primary AOAG ALTER AVAILABILITY GROUP [distributed-aoag] FORCE_FAILOVER_ALLOW_DATA_LOSS;
运行以下脚本以检查状态。
--check the status on the new primary (formerly standby site) select ag.name, ag.is_distributed, ar.replica_server_name, ar.availability_mode_desc, ars.connected_state_desc, ars.role_desc, ars.operational_state_desc, ars.synchronization_health_desc from sys.availability_groups ag join sys.availability_replicas ar on ag.group_id=ar.group_id left join sys.dm_hadr_availability_replica_states ars on ars.replica_id=ar.replica_id where ag.is_distributed=1 GO
-
现在,在新的主 SQL Server 上,取消设置
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
。--Run this script into Primary AOAG ALTER AVAILABILITY GROUP [distributed-aoag] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 0);
通过在主站点和辅助站点上运行以下脚本,将可用性模式改回标准模式。
--Run this first on the primary replica of the primary AOAG and then again on the secondary AOAG ALTER AVAILABILITY GROUP [distributed-aoag] MODIFY AVAILABILITY GROUP ON 'paris-aoag' WITH ( AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT ), 'marseille-aoag' WITH ( AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT );
任务 3:分布式 Always On 可用性组的故障恢复过程
要将巴黎恢复为主站点,将马赛恢复为辅助站点,只需执行新的切换以逆转同步,如任务 2 中所述。
相关链接
确认
- Authors — Alessandro Volpi(云解决方案专家)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Deploy Microsoft SQL Server Distributed Always On Availability Groups for DR on OCI
G23255-01
December 2024