Amazon Relational Database Service
用户指南 (API 版本 2014-10-31)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Microsoft SQL Server 的多可用区部署

多可用区部署为数据库实例提供了更高的可用性、数据持久性和容错能力。在进行计划的数据维护或发生未计划的服务中断时,Amazon RDS 会自动故障转移到最新的辅助数据库实例。此功能让数据库操作快速恢复,而不需要手动干预。主实例和备用实例使用相同的终端节点,其物理网络地址作为故障转移过程的一部分转换到辅助副本。在故障转移时,您不必重新配置应用程序。

Amazon RDS 通过使用 SQL Server 数据库镜像或 Always On 可用性组支持 Microsoft SQL Server 的多可用区部署。Amazon RDS 监控和维护多可用区部署的运行状况。如果出现问题,RDS 会自动修复运行状况不佳的数据库实例,重新建立同步,并发起故障转移。仅当备用实例和主要实例完全同步时,才会发生故障转移。您不必管理任何内容。

当您设置 SQL Server 多可用区时,RDS 自动将实例上的所有数据库配置为使用镜像或 Always On。Amazon RDS 负责处理主要、见证以及辅助数据库实例。

因为配置是自动的,所以 RDS 根据您部署的 SQL Server 版本选择镜像或 Always On。Amazon RDS 对于以下 SQL Server 版本支持带镜像或 Always On 的多可用区,但请注意例外情况:

  • SQL Server 2017:标准版和企业版(不支持 Always On)

  • SQL Server 2016:标准版和企业版(仅在 13.00.5216.0 或更高版本中支持 Always On)

  • SQL Server 2014:标准版和企业版

  • SQL Server 2012:标准版和企业版

  • SQL Server 2008 R2:标准版和企业版

除以下例外情况之外,Amazon RDS 在所有 AWS 区域中支持 SQL Server 的多可用区:

  • 中国:在中国不支持 Always On

  • 美国西部(加利福尼亚北部):此区域既不支持镜像,也不支持 Always On

  • 亚太区域(悉尼):仅对于 VPC 中的数据库实例支持

  • 亚太区域(东京):仅对于 VPC 中的数据库实例支持

  • 南美洲(圣保罗):除 m1 和 m2 之外,在所有其他数据库实例类上支持

向 Microsoft SQL Server 数据库实例添加多可用区

当您使用 AWS 管理控制台创建新的 SQL Server 数据库实例时,您可以添加带镜像或 Always On 的多可用区。为此,您可以从指定数据库详细信息页面上的多可用区部署列表中选择 Yes (Mirroring / Always On) (是(镜像/Always On))。有关更多信息,请参阅 创建运行 Microsoft SQL Server 数据库引擎的数据库实例

当使用 AWS 管理控制台修改现有 SQL Server 数据库实例时,可以通过从修改数据库实例页面上的多可用区部署列表中选择 Yes (Mirroring / Always On) (是(镜像/Always On)),以添加带镜像或 Always On 的多可用区。有关更多信息,请参阅 修改运行 Microsoft SQL Server 数据库引擎的数据库实例

Microsoft SQL Server 多可用区部署说明和建议

以下是使用针对 Microsoft SQL Server 数据库实例的多可用区部署时的一些限制:

  • 当前不支持跨区域多可用区。

  • 您不能将辅助实例配置为接受数据库读取活动。

  • 带 Always On 的可用区支持内存中优化。

  • 您不能重命名位于 SQL Server 多可用区部署中的 SQL Server 数据库实例上的数据库。如果您需要在此类实例上重命名一个数据库,请先为数据库实例禁用多可用区,然后重命名数据库。最后,为数据库实例重新启用多可用区。

  • 您只能还原使用完全恢复模式备份的多可用区数据库实例。

以下是有关使用针对 Microsoft SQL Server 数据库实例的多可用区部署的一些说明:

  • Amazon RDS 公开 Always On 可用性组侦听器终端节点。此终端节点显示在控制台中,由 DescribeDBInstances API 作为终端节点字段中的条目返回。

  • Amazon RDS 支持可用性组多子网故障转移

  • 要对 VPC 中的 SQL Server 数据库实例使用 SQL Server 多可用区,您需要先创建一个数据库子网组,此数据库子网组在至少两个不同可用区中具有子网。然后,将该数据库子网组分配给 SQL Server 数据库实例的主副本。

  • 在将数据库实例修改为多可用区部署的过程中,数据库实例的状态为 modifying (正在修改)。Amazon RDS 创建备用镜像,并创建主数据库实例的备份。这个过程完成后,主数据库实例的状态变为 available (可用)

  • 多可用区部署在同一节点上维护所有数据库。如果主要主机上的某个数据库发生故障转移,所有 SQL Server 数据库都将作为一个原子单元故障转移到备用主机。Amazon RDS 预置正常运行的新主机并替换运行状况不佳的主机。

  • 带镜像或 Always On 的多可用区支持单个备用副本。

  • 在辅助镜像上,将会自动复制用户、登录名和权限。无需重新创建它们。在 Always On 实例的多可用区实例中,仅复制用户定义的服务器角色(一项 SQL Server 2012 功能)。

  • 如果您具有 SQL Server 代理任务,请在辅助实例上重新创建它们。之所以这样做,是因为这些任务存储在 msdb 数据库中,而您无法使用镜像或 Always On 复制此数据库。先在原始主实例中创建任务,然后进行故障转移并在新的主实例中创建相同任务。

  • 您可以看到,由于执行同步数据复制,因此相对于标准数据库实例部署(在单一可用区中),延迟有所提升。

  • 故障转移时间受完成恢复过程所用的时间的影响。大型事务会增加故障转移时间。

以下是有关使用针对 Microsoft SQL Server 数据库实例的多可用区部署的一些建议:

  • 对于在生产中或生产前使用的数据库,建议使用多可用区部署以获得高可用性,使用配置的 IOPS 以获得一致的高速性能,并使用针对配置的 IOPS 而进行优化的实例类 (m3.large 及更大,m4.large 及更大)。

  • 您无法为辅助实例选择可用区 (AZ),因此,在部署应用程序主机时请注意这一点。您的数据库可能故障转移到其他可用区,并且应用程序主机与数据库可能不在同一可用区中。因此,我们建议您在给定 AWS 区域中的所有可用区之间平衡应用程序主机。

  • 为了获得最佳性能,请勿在大型数据加载操作期间启用镜像或 Always On。如果您希望尽可能快地完成数据加载,请先完成数据加载,然后再将数据库实例转换到多可用区部署。

  • 访问 SQL Server 数据库的应用程序应具有可捕获连接错误的异常处理功能。下面的代码示例显示了一个可捕获通信错误的 try/catch 块。

    for (int iRetryCount = 0; (iRetryCount < RetryMaxAttempts && keepInserting); iRetryCount++) { using (SqlConnection connection = new SqlConnection(DatabaseConnString)) { using (SqlCommand command = connection.CreateCommand()) { command.CommandText = "INSERT INTO SOME_TABLE VALUES ('SomeValue');"; try { connection.Open(); while (keepInserting) { command.ExecuteNonQuery(); intervalCount++; } connection.Close(); } catch (Exception ex) { Logger(ex.Message); } } } if (iRetryCount < RetryMaxAttempts && keepInserting) { Thread.Sleep(RetryIntervalPeriodInSeconds * 1000); } }
  • 在使用多可用区实例时,请勿使用 Set Partner Off 命令。例如,请勿执行以下操作。

    --Don't do this ALTER DATABASE db1 SET PARTNER off
  • 请勿将恢复模式设置为 simple。例如,请勿执行以下操作。

    --Don't do this ALTER DATABASE db1 SET RECOVERY simple
  • 在多可用区数据库实例上创建新登录名时,请勿使用 DEFAULT_DATABASE 参数,因为这些设置不能应用于备用镜像。例如,请勿执行以下操作。

    --Don't do this CREATE LOGIN [test_dba] WITH PASSWORD=foo, DEFAULT_DATABASE=[db2]

    此外,请勿执行以下操作。

    --Don't do this ALTER LOGIN [test_dba] SET DEFAULT_DATABASE=[db3]

确定辅助副本的位置

您可以使用 AWS 管理控制台确定辅助副本的位置。如果您在 VPC 中设置主数据库实例,则需要了解辅助副本的位置。


				单可用区情况

您还可以使用 AWS CLI 命令 describe-db-instances 或 RDS API 操作 DescribeDBInstances 查看辅助副本的可用区。输出会显示备用镜像所处的辅助可用区。

从镜像迁移到 Always On

要从镜像迁移到 Always On,首先检查版本。如果您使用的数据库实例的版本低于 13.00.5216.0,请修改此实例以便将其版本修补到 13.00.5216.0。

要升级到 Always On,修改此实例以删除多可用区,然后再次修改它以添加多可用区。这会将实例转换为使用 AlwaysOn。