

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用分布式可用性组将 SQL Server 迁移至 AWS
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups"></a>

*Praveen Marthala，Amazon Web Services*

## Summary
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-summary"></a>

Microsoft SQL Server Always On 可用性组为 SQL Server 提供了高可用性 (HA) 和灾难恢复 (DR) 解决方案。可用性组由一个接受 read/write 流量的主副本和最多八个接受读取流量的辅助副本组成。可用性组是在具有两个或更多节点的 Windows 服务器失效转移群集 (WSFC) 上配置。

Microsoft SQL Server Always On 分布式可用性组提供了一种在两个独立可用性组之间配置两个独立可用性组的解决方案 WFSCs。属于分布式可用性组的可用性组不必位于同一数据中心。一个可用性组可以位于本地，另一个可用性组可以位于另一个域中的亚马逊云服务 (AWS) 云上的亚马逊弹性计算云 (Amazon EC2) 实例上。 

此模式概述了使用分布式可用性组将属于现有可用性组的本地 SQL Server 数据库迁移到在 Amazon 上设置可用组的 SQL Server 的步骤 EC2。通过遵循该模式，您可以将数据库迁移至 Amazon Web Services Cloud 中，同时最大限度地减少割接期间的停机时间。割接后，这些数据库立即在 AWS 上具有高可用性。您还可使用此模式将底层操作系统从本地更改为 AWS，同时保持相同版本的 SQL Server。

## 先决条件和限制
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ AWS Direct Connect 或 AWS Site-to-Site VPN
+ 安装在本地和 AWS 上的两个节点上相同版本 SQL Server 

**产品版本**
+ SQL Server 版本 2016 和更高版本
+ SQL Server 企业版

## 架构
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-architecture"></a>

**源技术堆栈**
+ 本地具有 Always On 可用性组的 Microsoft SQL Server 数据库

**目标技术堆栈**
+ AWS 云端亚马逊 EC2 上带永久开启可用组的微软 SQL Server 数据库

**迁移架构**

![\[在本地和 AWS 上的可用性组中实现同步复制的 SQL Server。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/6e229e30-9b11-4ccb-bccd-cbe6601139c0/images/79ee7911-d68f-4db7-9b94-113dcf09c28b.png)


*术语*
+ WSFC 1 — WSFC 本地
+ WSFC 2 — Amazon Web Services Cloud 上的 WSFC
+ AG 1 — 第一可用性组，位于 WSFC 1 中
+ AG 2 — 第二可用性组，位于 WSFC 2 中
+ SQL Server 主副本 — AG 1 中被视为写入操作的全局主节点
+ SQL Server 转发程序 — AG 2 中从 SQL Server 主副本异步接收数据的节点
+ SQL Server 辅助副本 — AG 1 或 AG 2 中同步接收来自主副本或转发器数据的节点

## 工具
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-tools"></a>
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) – AWS Direct Connect 通过标准的以太网光纤电缆将您的内部网络链接到 AWS Direct Connect 位置。通过此连接，您可以创建直接连接到公有 Amazon Web Services 的*虚拟接口*，从而绕过网络路径中的互联网服务提供商。
+ [亚马逊 EC2](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/concepts.html) — 亚马逊弹性计算云 (Amazon EC2) 在 AWS 云中提供可扩展的计算容量。您可以根据需要使用 Amazon EC2 启动任意数量或数量的虚拟服务器，也可以进行横向扩展或扩展。
+ [AWS Site-to-Site VP](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) Site-to-Site N — AWS VPN 支持创建 site-to-site虚拟专用网络 (VPN)。您可以将 VPN 配置为在 AWS 上启动的实例和您自己的远程网络之间传递流量。
+ [Microsoft SQL Server Management Studio](https://docs.microsoft.com/en-us/sql/ssms/sql-server-management-studio-ssms?view=sql-server-ver15) – Microsoft SQL Server Management Studio (SSMS) 是一个用于管理 SQL Server 基础设施的集成环境。它提供了用户界面和一组工具，其中包含与 SQL Server 交互的丰富脚本编辑器。

## 操作说明
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-epics"></a>

### 在 AWS 上设置第二可用性组
<a name="set-up-a-second-availability-group-on-aws"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 AWS 上创建 WSFC。 | 在带有两个节点的 Amazon EC2 实例上创建 WSFC 2，用于 HA。您将使用此失效转移群集在 AWS 上创建第二可用性组 (AG 2)。 | 系统管理员、 SysOps 管理员 | 
| 在 WSFC 2 上创建第二可用性组。 | 使用 SSMS 在 WSFC 2 中的两个节点创建 AG 2。WSFC 2 中的第一节点将充当转发器。WSFC 2 中的第二节点将作为 AG 2 的辅助副本。在此阶段，AG 2 中没有可用数据库。其为设置分布式可用性组的起点。 | 数据库管理员、开发人员 | 
| 在 AG 2 上创建无恢复选项的数据库。 | 备份本地可用性组 (AG 1) 数据库。 在没有恢复选项的情况下，将数据库还原至 AG 2 的转发器和辅助副本。还原数据库时，请指定足够磁盘空间，以存放数据库数据文件和日志文件。在该阶段，数据库处于还原状态。它们不是 AG 2 或分布式可用性组的一部分，也非同步。 | 数据库管理员、开发人员 | 

### 配置分布式可用性组
<a name="configure-the-distributed-availability-group"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 AG 1 上创建分布式可用性组。 | 要在 AG 1 上创建分布式可用性组，请使用带 `DISTRIBUTED` 选项的 `CREATE AVAILABILITY GROUP`。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-sql-server-to-aws-using-distributed-availability-groups.html) | 数据库管理员、开发人员 | 
| 在 AG 2 上创建分布式可用性组。 | 要在 AG 2 上创建分布式可用性组，请通过 `DISTRIBUTED` 选项使用 `ALTER AVAILABILITY GROUP`。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-sql-server-to-aws-using-distributed-availability-groups.html)分布式可用性组在 AG 1 和 AG 2 间创建。AG 2 中的数据库尚未配置为：参与从 AG 1 到 AG 2 的数据流。 | 数据库管理员、开发人员 | 
| 将数据库添加至 AG 2 上的转发器和辅助副本。 | 在 AG 2 的转发器和辅助副本中使用 `SET HADR` `AVAILABILITY GROUP` 选项的 `ALTER DATABASE` 将数据库添加到分布式可用性组。 这将启动 AG 1 和 AG 2 上的数据库间的异步数据流。 全局主服务器接受写入，将数据同步发送至 AG 1 上的辅助副本，并异步向 AG 2 上的转发器发送数据。AG 2 上的转发器将数据同步发送至 AG 2 上的辅助副本。 | 数据库管理员、开发人员 | 

### 监控 AG 1 和 AG 2 间的异步数据流
<a name="monitor-asynchronous-data-flow-between-ag-1-and-ag-2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 DMVs 和 SQL Server 日志。 | 使用动态管理视图 (DMVs) 和 SQL Server 日志，监控两个可用性组之间数据流的状态。 DMVs 值得监视的内容包括`sys.dm_hadr_availability_replica_states`和`sys.dm_hadr_automatic_seeding`。要了解转发器同步的状态，在转发器上的 SQL Server 日志中监控*同步状态*。 | 数据库管理员、开发人员 | 

### 为最终迁移执行割接活动
<a name="perform-cutover-activities-for-final-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 停止所有流向主副本流量。 | 在 AG 1 中阻止主副本传入流量，这样数据库上就不会发生写入活动，数据库就可以迁移了。 | 应用程序所有者、开发人员 | 
| 更改 AG 1 上的分布式可用性组的可用性模式。 | 在主副本上，将分布式可用性组可用性模式设置为同步。 将可用性模式更改为同步模式后，数据将从 AG 1 主副本同步发送至 AG 2 中的转发器。 | 数据库管理员、开发人员 | 
|  LSNs 在两个可用性组中选中。 | 检查 AG 1 和 AG 2 中的最后一个日志序列号 (LSNs)。由于 AG 1 的主副本中没有发生写入操作，因此数据已同步，两个可用性组的最后一次 LSNs 数据应匹配。 | 数据库管理员、开发人员 | 
| 将 AG 1 更新至辅助角色。 | 当您将 AG 1 更新至辅助角色时，AG 1 将失去主副本角色并且不接受写入，两个可用性组之间的数据流将停止。 | 数据库管理员、开发人员 | 

### 故障转移至第二个可用性组
<a name="fail-over-to-the-second-availability-group"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 手动故障转移至 AG 2。 | 在 AG 2 的转发器，更改分布式可用性组以允许数据丢失。由于您已经检查并确认 AG 1 和 AG 2 LSNs 上的最后一个匹配，因此数据丢失不是问题。当您允许 AG 2 中转发器的数据丢失时，AG 1 和 AG 2 的角色会发生变化：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-sql-server-to-aws-using-distributed-availability-groups.html) | 数据库管理员、开发人员 | 
| 更改 AG 2 上的分布式可用性组的可用性模式。 | 在 AG 2 主副本上，将可用性模式更改为异步。这会将数据从 AG 2 移动至 AG 1、从同步移动更改为异步移动。此步骤是为了避免 AG 2 和 AG 1 间的网络延迟（如有），并且不会影响数据库的性能。 | 数据库管理员、开发人员 | 
| 开始向新主副本发送流量。 | 更新连接字符串，以使用 AG 2 上的侦听器 URL 端点向数据库发送流量。AG 2 现在接受写入并向 AG 1 中转发器发送数据，同时在 AG 2 中将数据发送到自己的辅助副本。数据从 AG 2 异步移动至 AG 1。 | 应用程序所有者、开发人员 | 

### 执行割接后的活动
<a name="perform-post-cutover-activities"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 AG 2 上删除分布式可用性组。 | 在计划时间内监控迁移情况。在 AG 2 上删除分布式可用性组，以删除 AG 2 和 AG 1 之间的分布式可用性组设置。这将删除分布式可用性组配置，从 AG 2 至 AG 1 的数据流将停止。 目前，AG 2 在 AWS 上具有高可用性，主副本需写入，辅助副本位于同一个可用性组中。 | 数据库管理员、开发人员 | 
| 停用本地服务器。 | 停用属于 AG 1 的 WSFC 1 中的本地服务器。 | 系统管理员、 SysOps 管理员 | 

## 相关资源
<a name="migrate-sql-server-to-aws-using-distributed-availability-groups-resources"></a>
+ [分布式可用性组](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/distributed-groups.html)
+ [SQL 文档： 分布式可用性组](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/distributed-availability-groups?view=sql-server-ver15)
+ [SQL 文档：Always On 可用性组：高可用性和灾难恢复解决方案](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/always-on-availability-groups-sql-server?view=sql-server-ver15)