

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

# Amazon EC2 for SQL Server
<a name="ec2-sql"></a>

Amazon EC2 支持自行管理的 SQL Server 数据库。也就是说，它使您可以完全控制基础结构和数据库环境的设置。在 Amazon EC2 上运行数据库与在您自己的服务器上运行数据库非常相似。您可以完全控制数据库和操作系统级别的访问权限，因此您可以使用自己选择的工具来管理操作系统、数据库软件、补丁、数据复制、备份和恢复。此迁移选项要求您根据 AWS 架构最佳实践设置、配置、管理和调整所有组件，包括 EC2 实例、存储卷、可扩展性、联网和安全性。您负责在相同或不同 AWS 区域的实例之间进行数据复制和恢复。

## 何时选择 Amazon EC2
<a name="ec2-sql-choosing"></a>

在以下情况下，Amazon EC2 是 SQL Server 数据库的良好迁移选项：
+ 您需要完全控制数据库并访问其底层操作系统、数据库安装和配置。
+ 您希望管理数据库，包括备份和恢复、修补操作系统和数据库、调整操作系统和数据库参数、管理安全性以及配置高可用性或复制。
+ 您希望使用 Amazon RDS 当前不支持的功能和选项。有关详细信息，请参阅 [Amazon RDS 文档中的不支持的功能和支持](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.FeatureNonSupport)有限的功能。
+ 您需要 Amazon RDS 不支持的特定 SQL Server 版本。有关支持的版本列表，请参阅 Amazon RDS 文档中的 [Amazon RDS 上的 SQL Server 版本](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.VersionSupport)。
+ 您的数据库大小和性能需求超出了当前的 Amazon RDS for SQL Server 产品。有关详细信息，请参阅 Amazon RDS 文档中的 [Amazon RDS 数据库实例存储](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)。
+ 您希望避免使用可能与您的应用程序不兼容的自动软件补丁。
+ 您希望自带许可证，而不是使用 Amazon RDS for SQL Server 附带许可证的模型。
+ 您希望实现比当前限制更高的 IOPS 和存储容量。有关详细信息，请参阅 Amazon RDS 文档中的 [Amazon RDS 数据库实例存储](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)。

有关 Amazon EC2 上当前支持的 SQL Server 功能和版本的列表，请参阅本指南后面的在 [Amazon EC2 和 Amazon RDS 之间进行选择](comparison.md)。

# 高可用性
<a name="ec2-sql-ha"></a>

您可以将任何 SQL Server 支持的复制技术用于 Amazon EC2 上的 SQL Server 数据库，以实现高可用性、数据保护和灾难恢复。一些常见的解决方案包括日志传送、数据库镜像、Always On 可用性组和 Always On 故障转移群集实例。

下图显示了如何在单个 AWS 区域内的多个可用区中使用 Amazon EC2 上的 SQL Server。主数据库是读写数据库，辅助数据库配置了日志传送、数据库镜像或 Always On 可用性组以实现高可用性。主数据库中的所有事务数据都将传输，并且可以异步应用于辅助数据库以进行日志传送，并异步应用于 Always On 可用性组和镜像。

 ![\[SQL Server on Amazon EC2 in a Multi-AZ configuration in one AWS Region\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/migration-sql-server/images/sql-migration-ec2.png) 

# 日志传送
<a name="ec2-log-shipping"></a>

通过日志传送，您可以自动将事务日志备份从主数据库实例发送到不同数据库实例上的一个或多个辅助数据库（也称为*温备用*数据库）。日志传送使用 SQL Server 代理作业自动执行备份、复制和应用事务日志备份的过程。尽管日志传送通常被视为灾难恢复功能，但它也可以通过允许在主数据库实例发生故障时提升辅助数据库实例来提供高可用性。如果 RTO 和 RPO 很灵活，或者数据库不被视为高度关键任务，请考虑使用日志传送为 SQL Server 数据库提供更好的可用性。

日志传送通过提供对辅助数据库的访问，在需要时用作主数据库的只读副本，从而提高了数据库的可用性。您可以配置滞后延迟（较长的延迟时间），在此期间，可以在将这些更改传送到辅助数据库之前恢复主数据库上意外更改的数据。

我们建议在单独的可用区中运行主数据库实例和辅助数据库实例，并部署监控实例以跟踪日志传送的所有详细信息。日志传送组的备份、复制、还原和失败事件可从监控实例获得。日志传送配置不会自动从主服务器故障转移到辅助服务器。但是，如果主数据库不可用，则可以手动使任何辅助数据库联机。

日志传送通常用作灾难恢复解决方案，但也可以用作高可用性解决方案，具体取决于您的应用程序要求。在以下情况下使用日志传送：
+ 您有灵活的 RTO 和 RPO 要求。日志传送提供几分钟的 RPO 和几分钟到几小时的 RTO。
+ 您不需要自动失效转移到辅助数据库。
+ 您希望从辅助数据库读取数据，但在还原操作期间不需要可读性。

有关日志传送的更多信息，请参阅 [Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/database-engine/log-shipping/about-log-shipping-sql-server) 文档。

# 数据库镜像
<a name="ec2-db-mirroring"></a>

数据库镜像采用 EC2 实例上的数据库，并在单独的数据库实例上提供该数据库的完整或几乎完整的只读副本（镜像）。Amazon RDS 使用数据库镜像为 Amazon RDS for SQL Server 提供多可用区支持。此功能提高了数据库的可用性和保护，并提供了一种在升级过程中保持数据库可用的机制。

**注意**  
根据 [Microsoft 文档](https://docs.microsoft.com/en-us/sql/database-engine/database-mirroring/database-mirroring-sql-server)，数据库镜像将在 SQL Server 的未来版本中删除。应计划改用 Always On 可用性组。

在数据库镜像中，SQL Server 可以担任以下三个角色之一：
+ 主体服务器，它承载数据库的主 read/write 版本。
+ 镜像服务器，用于承载主体数据库的副本。
+ 可选的见证服务器。此服务器仅在高安全性模式下可用。它监视数据库镜像的状态，并自动执行从主数据库到镜像数据库的故障转移。

在主体服务器和镜像服务器之间建立镜像会话。在镜像期间，在主体数据库中执行的所有数据库更改也会在镜像数据库上执行。数据库镜像可以是同步操作，也可以是异步操作。这是由两种镜像操作模式决定的：高安全模式和高性能模式。
+ **高安全模式：**此模式使用同步操作。在此模式下，数据库镜像会话会尽快将插入、更新和删除操作从主体数据库同步到镜像数据库。一旦数据库同步，事务就会在主体数据库和镜像数据库中提交。当镜像数据库位于相同或不同的可用区中，但托管在同一 AWS 区域中时，我们建议您使用此操作模式。
+ **高性能模式：**此模式使用异步操作。在此模式下，数据库镜像会话将插入、更新和删除操作从主体数据库同步到镜像数据库，但主体数据库提交事务的时间与镜像数据库提交事务的时间之间可能存在滞后。当镜像数据库位于不同的 AWS 区域时，我们建议您使用此模式。

在以下情况下使用数据库镜像：
+ 您有严格的 RTO 和 RPO 要求，并且主数据库和辅助数据库之间不能有延迟。数据库镜像提供 0 秒的 RPO（使用同步提交）和几秒到几分钟的 RTO。
+ 您不需要从辅助数据库读取数据。
+ 您希望在同步模式下配置见证服务器时执行自动故障转移。
+ 您无法使用首选选项 Always On 可用性组。

限制：
+ 仅支持 one-to-one故障转移。您不能让多个数据库目标与主数据库同步。

有关镜像的更多信息，请参阅 [Microsoft SQL Server 文档](https://docs.microsoft.com/en-us/sql/database-engine/database-mirroring/database-mirroring-sql-server)。

# Always On 可用性组
<a name="ec2-always-on"></a>

SQL Server Always On 可用性组为 SQL Server 数据库提供高可用性和灾难恢复解决方案。可用性组由一组一起故障转移的用户数据库组成。它包括一组主 read/write 数据库和多组（一到八个）相关的辅助数据库。可以将辅助数据库作为主数据库的只读副本（仅限 SQL Server 企业版）提供给应用层，以便为读取工作负荷提供横向扩展体系结构。您还可以使用辅助数据库进行备份操作。

SQL Server Always On 可用性组支持同步和异步提交模式。在同步模式下，主副本在提交更改或写入辅助副本的日志后提交数据库事务。使用此模式，如果副本同步，您可以执行计划的手动故障转移和自动故障转移。您可以在同一环境中的 SQL Server 实例之间使用同步提交模式（例如，如果所有实例都在本地或所有实例都在本地环境中 AWS）。

在异步提交模式下，主副本提交数据库事务，而无需等待辅助副本。您可以在不同环境中的 SQL Server 实例之间使用异步提交模式（例如，如果您在本地和内部都有实例 AWS）。

您可以使用 Always On 可用性组来实现高可用性或灾难恢复。在以下情况下使用此方法：
+ 您有严格的 RTO 和 RPO 要求。Always On 可用性组提供秒的 RPO 和秒到分钟的 RTO。
+ 您想要管理和故障转移一组数据库。对于 SQL Server 2019，Always On 可用性组在同步提交模式下支持 0-4 个辅助副本。
+ 您希望在同步提交模式下使用自动故障转移，并且不需要见证服务器。
+ 您想要从辅助数据库中读取数据。
+ 您希望将多个数据库目标与主数据库同步。

从 SQL Server 2016 开始 SP1，SQL Server 标准版为每个可用性组的单个不可读的辅助数据库和侦听器提供基本的高可用性。它还支持每个可用性组最多两个节点。

# Always On 失效转移群集实例
<a name="ec2-fci"></a>

SQL Server Always On 故障转移群集实例 (FCIs) 使用 Windows 服务器故障转移群集 (WSFC) 在服务器实例级别提供高可用性。FCI 是跨 WSFC 节点安装的 SQL Server 的单个实例，用于为 SQL Server 的整个安装提供高可用性。如果底层节点遇到硬件、操作系统、应用程序或服务故障，SQL Server 实例内的所有内容都会移动到另一个 WSFC 节点。这包括系统数据库、SQL Server 登录名、SQL Server 代理作业和证书。

在以下情况下，FCI 通常比 Always On 可用性组更可取：
+ 您使用的是 SQL Server 标准版，而不是企业版。
+ 每个实例都有大量小型数据库。
+ 您不断修改实例级对象，例如 SQL Server 代理作业、登录名等。

有四种部署 FCIs 方式可供选择 AWS：
+ 带永久预留的 Amazon EBS 多重挂载
+  FSx 适用于 Windows 文件服务器的亚马逊
+  FSx 适用于 NetApp ONTAP 的亚马逊
+  AWS 合作伙伴提供的解决方案

## 使用带永久预留的 Amazon EBS 多重挂载
<a name="fci-multi-attach"></a>

[带 NVMe 预留功能的 Amazon EBS Multi-Attac](https://docs.aws.amazon.com/ebs/latest/userguide/nvme-reservations.html) h 支持创建 SQL Server，将 FCIs 亚马逊 EBS `io2` 卷作为 Windows 服务器故障转移群集上的共享存储。借助此功能，您可以使用 Amazon EBS `io2` 卷构建失效转移集群，从而简化了失效转移集群的设置流程。这些卷只能挂载到位于相同可用区中的实例。要使用 Amazon EBS `io2` 卷部署 Windows 服务器故障转移群集，必须使用最新的 AWS NVMe 驱动程序。

Amazon EBS 卷和实例存储卷作为 NVMe 块设备暴露在[基于 Nitro的实例](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html#ec2-nitro-instances)上。使用 Amazon EBS `io2` 卷构成 W [SFC 和 SQL Server 时，必须安装[AWS NVMe 驱动程序](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/aws-nvme-drivers.html)，并配置 SCSI 永久保留功能](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/aws-nvme-drivers.html#configure-scsi-persistent-reservations)。 FCIs

有关此功能的更多信息，请参阅 AWS 博客文章[如何在 Windows 服务器上使用 Amazon EBS Multi-Attach 部署 SQL Server 故障转移群集](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-deploy-a-sql-server-failover-cluster-with-amazon-ebs-multi-attach-on-windows-server/)。

## 使用 FSx 适用于 Windows 文件服务器的亚马逊
<a name="fci-fsx-windows"></a>

[亚马逊 Window FSx s 文件服务器](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/what-is.html)提供完全托管的共享文件存储。它会自动在两个可用区之间同步复制存储，以提供高可用性。使用适用于 Windows File Server 的 FSx 进行文件存储有助于简化和优化 Amazon EC2 上的 SQL Server 高可用性部署。

对于 Microsoft SQL Server，高可用性通常部署在 WSFC 中的多个数据库节点上，每个节点都可以访问共享文件存储。您可以通过两种方式将 Windows 文件服务器 FSx 用作 SQL Server 高可用性部署的共享存储：用作活动数据文件的存储和作为 SMB 文件共享见证。

有关如何使用适用于 Windows 文件服务器来降低运行 SQL Server FCI 部署的复杂性和成本的信息，请参阅博客文章[使用 FSx 亚马逊 FSx Windows 文件服务器简化微软 SQL Server 高可用性部署](https://aws.amazon.com/blogs/storage/simplify-your-microsoft-sql-server-high-availability-deployments-using-amazon-fsx-for-windows-file-server/)。博客文章还提供了使用亚马逊 FSx 多可用区文件系统作为共享存储解决方案部署 SQL Server FCIs 的 step-by-step说明。有关更多信息，请参阅 [Amazon f FSx or Windows 文件服务器](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/what-is.html)文档。

## 使用 Amazon f NetApp o FSx r ONTAP
<a name="fci-fsx-ontap"></a>

Amazon FSx for NetApp ONTAP 是一项完全托管的服务，可提供基于 ONTAP 文件系统的高度可靠、可扩展、高性能和功能丰富的文件存储。 NetApp FSx for ONTAP 将 NetApp 文件系统熟悉的特性、性能、功能和 API 操作与完全托管 AWS 服务的敏捷性、可扩展性和简单性相结合。

FSx 适用于 ONTAP 的 Windows 和 Linux 系统通过 NFS、SMB 和 iSCSI 协议提供对数据的多协议访问。您可以构建高度可用的 SQL Server Always On FCI 架构，如博客文章《[使用 Amazon FSx for NetApp ONTAP 进行 SQL Server 高可用性部署](https://aws.amazon.com/blogs/modernizing-with-aws/sql-server-high-availability-amazon-fsx-for-netapp-ontap/)》中详细介绍的那样。 FSx for ONTAP 还可以提供一种将您的 SQL Server 环境故障转移到其他 AWS 区域 环境的快速方法，以满足恢复时间目标 (RTO) 和恢复点目标 (RPO) 要求。有关更多信息，请参阅博客文章[使用 FSx 适用于 ONTAP 的 SQL Server 永远在线故障转移集群实例实现高可用性和灾难](https://aws.amazon.com/blogs/storage/implementing-ha-and-dr-for-sql-server-always-on-failover-cluster-instance-using-amazon-fsx-for-netapp-ontap/)恢复。

您还可以使用 AWS Launch Wizard 在上部署 SQL Server 解决方案 AWS，支持始终开启可用性组和单节点部署。Launch Wizard 支持在 Amazon EC2 上部署 SQL Server Always on FCI，将 ONTAP 作为共享存储。 FSx 此服务采用基于控制台的引导式向导，取代复杂的手动部署流程，从而节省您的时间和精力，加速迁移依赖共享存储的本地 SQL Server 工作负载。有关 Launch Wizard 如何帮助你 FCIs 在数小时内配置和配置 SQL Server 的更多信息，请参阅博客文章[使用 AWS Launch Wizard 和 Amazon 简化 SQL Server Always On 部署 FSx](https://aws.amazon.com/blogs/storage/simplify-sql-server-always-on-deployments-with-the-aws-launch-wizard-and-amazon-fsx/)。Launch Wizard 还支持使用适用于 [Windows 的亚马逊 FSx 文件服务器](https://aws.amazon.com/fsx/windows/)作为共享存储解决方案，部署 SQL Server Always On。 FCIs 

## 使用 AWS 合作伙伴提供的解决方案
<a name="fci-partners"></a>
+ [SIOS DataKeeper](https://us.sios.com/) 提供跨 AWS 区域 可用区域的高可用性集群故障转移支持。SIOS DataKeeper 已在中提供。[AWS Marketplace](https://aws.amazon.com/marketplace/seller-profile?id=3c91e2f7-fc8d-4cce-a8aa-1e37abcb4408)
+ [DxEnterprise](https://dh2i.com/dxenterprise-high-availability/)从 DH2i 启用 Kubernetes 中的 SQL Server 可用性组的全自动故障转移以及适用于 Windows 和 Linux 的统一实例故障转移。D2HI 在 [AWS Marketplace](https://aws.amazon.com/marketplace/seller-profile?id=4e97d4b7-3366-42fd-8be8-732d38c9e24b) 中可用。

# FSx 适用于 Windows 文件服务器
<a name="ec2-fsx"></a>

FSx 适用于 Windows File Server 提供完全托管、高度可靠且可扩展的文件存储，可使用服务器消息块 (SMB) 协议进行访问。它基于 Windows Server 构建，并提供广泛的管理功能，例如用户配额、最终用户文件还原和 Microsoft Active Directory (AD) 集成。它提供单可用区和多可用区部署选项、完全托管的备份以及静态和传输中的数据加密。您可以使用固态硬盘 (SSD) 和硬盘驱动器 (HDD) 存储选项优化工作负载的成本和性能，并且可以随时扩展存储并更改文件系统的吞吐量性能。可以从 Windows、在本地和本地运行的 Linux 计算实例访问亚马逊 FSx 文件存储。 AWS

Amazon 支持持续可用 (CA) 文件共享和较小的文件系统， FSx 因此可以更轻松地为高可用性 SQL Server 部署部署共享 Windows 存储。此选项适用于以下用例：
+ 作为 WSFC 实例中 SQL Server 节点使用的共享存储。
+ 作为 SMB 文件共享见证，可与任何具有 WSFC 的 SQL Server 群集一起使用。

Amazon FSx 提供了快速的性能， GB/second 每个文件系统的基准吞吐量高达 2，IOPS 高达数十万，延迟始终如一，亚毫秒级。

要为 SQL 实例提供适当的性能，您可以选择与文件系统大小无关的吞吐量级别。更高级别的吞吐容量还附带更高级别的 IOPS，文件服务器可以为访问它的 SQL Server 实例提供服务。

存储容量不仅决定了您可以存储的数据量，还决定了您可以在存储上执行多少 IOPS。每 GB 存储提供 3 IOPS。您可以将每个文件系统预置为最大 64 TB 的大小。

有关配置和使用亚马逊 FSx 来降低 SQL Server 高可用性部署的复杂性和成本的信息，请参阅 AWS 存储博客上的 “[使用 FSx 适用于 Windows 文件服务器的 Microsoft SQL Server 高可用性部署](https://aws.amazon.com/blogs/storage/simplify-your-microsoft-sql-server-high-availability-deployments-using-amazon-fsx-for-windows-file-server/)”。要了解有关创建新 CA 共享的更多信息，请参阅[FSx 适用于 Windows 文件服务器的文档](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/managing-file-shares.html#create-ca-share)。

# 灾难恢复
<a name="ec2-sql-dr"></a>

许多组织为其 SQL Server 数据库实现了高可用性，但这对于需要真正 IT 弹性的组织来说还不够。我们建议您实施灾难恢复解决方案，以避免任务关键型数据库的数据丢失和停机。对 SQL Server 部署采用多区域灾难恢复体系结构有助于：
+ 实现业务连续性
+ 改善地理位置分散的客户群的延迟 
+ 满足您的审计和监管要求

灾难恢复选项包括[日志传送](ec2-log-shipping.md)、Alw [ays On 可用性组、存储在](ec2-always-on.md) [Amazon S3 中并跨 AWS 区域复制的 Amazon EBS 快照](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-copy-snapshot.html)、Alw [ays On Failover 集群实例 (FCIs)](ec2-fci.md) 和 Always On 可用性组以及分布式可用组。

## 分布式可用性组
<a name="ec2-distributed-groups"></a>

具有分布式可用性组的体系结构是多区域 SQL Server 部署的最佳方法。分布式可用性组是一种特殊类型的可用性组，它跨越两个单独的可用性组。您可以将其视为可用性组的可用性组。底层可用性组是在两个不同的 WSFC 集群上配置的。

分布式可用性组是松散耦合的，这意味着它们不需要单个 WSFC 群集，并且由 SQL Server 维护。由于 WSFC 群集是单独维护的，并且传输主要是两个可用性组之间的异步传输，因此在另一个站点配置灾难恢复会更容易。每个可用性组中的主要副本同步其自己的次要副本。

分布式可用性组目前仅支持手动故障转移。若要确保不会丢失任何数据，请停止全局主数据库（即主可用性组的数据库）上的所有事务。然后，将分布式可用性组设置为同步提交。