Amazon RDS for Microsoft SQL Server 多可用区部署 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Amazon RDS for Microsoft SQL Server 多可用区部署

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

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

当您设置 SQL Server 多可用区时,RDS 自动将实例上的所有数据库配置为使用 DBM 或 AG。Amazon RDS 负责处理主要、见证以及辅助数据库实例。因为配置是自动的,所以 RDS 基于您部署的 SQL Server 版本选择 DBM 或 Always On AG。

Amazon RDS 支持在以下 SQL Server 版本中使用带 Always On AG 的多可用区:

  • SQL Server 2019:

    • 标准版 15.00.4073.23 及更高版本

    • 企业版

  • SQL Server 2017:

    • 标准版 14.00.3401.7 及更高版本

    • 企业版 14.00.3049.1 及更高版本

  • SQL Server 2016:企业版 13.00.5216.0 及更高版本

Amazon RDS 支持以下 SQL Server 版本带 DBM 的多可用区,前面提到的版本除外:

  • SQL Server 2019:标准版 15.00.4043.16

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

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

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

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

您可以使用以下 SQL 查询来确定 SQL Server 数据库实例是单可用区、DBM 多可用区还是 Always On AG 多可用区:

SELECT CASE WHEN dm.mirroring_state_desc IS NOT NULL THEN 'Multi-AZ (Mirroring)' WHEN dhdrs.group_database_id IS NOT NULL THEN 'Multi-AZ (AlwaysOn)' ELSE 'Single-AZ' END 'high_availability' FROM sys.databases sd LEFT JOIN sys.database_mirroring dm ON sd.database_id = dm.database_id LEFT JOIN sys.dm_hadr_database_replica_states dhdrs ON sd.database_id = dhdrs.database_id AND dhdrs.is_local = 1 WHERE DB_NAME(sd.database_id) = 'rdsadmin';

输出与以下内容类似:

high_availability Multi-AZ (AlwaysOn)

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

当您使用 Amazon Web Services Management Console创建新的 SQL Server 数据库实例时,您可以添加带数据库镜像 (DBM) 或 Always On AG 的多可用区。您可以通过从多可用区部署中选择 Yes (Mirroring / Always On) (是(镜像/Always On)) 来执行此操作。有关更多信息,请参阅“创建 Amazon RDS 数据库实例”。

当使用 Amazon Web Services Management Console 修改现有 SQL Server 数据库实例时,可以通过从 Modify DB instance(修改数据库实例)页面上的 Multi-AZ deployment(多可用区部署)中选择 Yes (Mirroring / Always On)(是 [镜像/始终使用]),以添加带 DBM 或 AG 的多可用区。有关更多信息,请参阅“修改 Amazon RDS 数据库实例”。

注意

如果您的数据库实例运行的是数据库镜像 (DBM)(并非 Always On 可用性组 (AGG)),则可能需要在添加多可用区之前禁用内存中优化。如果您的数据库实例运行 SQL Server 2014、2016 或 2017 企业版并启用了内存中优化,则在添加多可用区之前通过 DBM 禁用内存中优化。

如果您的数据库实例正在运行 AGG,则不需要此步骤。

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

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

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

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

  • 带 Always On 可用性组 (AG) 的多可用区支持内存中优化。

  • 带 Always On 可用性组 (AG) 的多可用区不支持对可用性组侦听器进行 Kerberos 身份验证。这是因为侦听器没有服务主体名称 (SPN)。

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

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

  • 多可用区部署具有 100 个 SQL 服务器代理作业的限制。

    如果您需要更高的限制,则可联系 Amazon Web Services Support 请求增加限制。打开 Amazon Web Services Support Center (Amazon Web Services Support 中心) 页面,登录(如有必要),然后选择 Create case (创建案例)。选择 Service Limit increase (提高服务限制)。填写并提交表格。

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

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

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

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

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

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

  • 带 DBM 或 AG 的多可用区支持单个备用副本。

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

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

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

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

  • 在 SQL Server 多可用区部署中,通过故障转移重新启动仅重新启动主数据库实例。故障转移后,主数据库实例将成为新的备用数据库实例。多可用区实例的参数可能不更新。对于不进行故障转移的重新启动,主数据库实例和备用数据库实例将重新启动,并在重新启动后更新参数。如果数据库实例没有响应,我们建议重新启动而不进行故障转移。

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

  • 对于生产或预生产中使用的数据库,我们建议使用以下选项:

    • 多可用区部署,可实现高可用性

    • “Provisioned IOPS (预置 IOPS)”,可实现快速一致的性能

    • “内存优化”而非“通用型”

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

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

  • 访问 SQL Server 数据库的应用程序应具有可捕获连接错误的异常处理功能。下面的代码示例显示了一个可捕获通信错误的 try/catch 块。在此示例中,如果连接成功,break 语句会退出 while 循环,但如果引发异常,则最多可重试 10 次。

    int RetryMaxAttempts = 10; int RetryIntervalPeriodInSeconds = 1; int iRetryCount = 0; while (iRetryCount < RetryMaxAttempts) { using (SqlConnection connection = new SqlConnection(DatabaseConnString)) { using (SqlCommand command = connection.CreateCommand()) { command.CommandText = "INSERT INTO SOME_TABLE VALUES ('SomeValue');"; try { connection.Open(); command.ExecuteNonQuery(); break; } catch (Exception ex) { Logger(ex.Message); iRetryCount++; } finally { connection.Close(); } } } 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]

确定辅助副本的位置

您可以使用 Amazon Web Services Management Console确定辅助副本的位置。如果您在 VPC 中设置主数据库实例,则需要了解辅助副本的位置。


				辅助可用区

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

从数据库镜像迁移到 Always On 可用性组

在 Microsoft SQL Server 企业版的版本 14.00.3049.1 中,默认已启用 Always On 可用性组 (AG)。

若要从数据库镜像 (DBM) 迁移到 AG,请先检查您的版本。如果您使用的数据库实例的版本低于企业版 13.00.5216.0,请修改此实例以便将其版本修补到 13.00.5216.0 或更高版本。如果您使用的数据库实例的版本低于企业版 14.00.3049.1,请修改实例以便将其版本修补到 14.00.3049.1 或更高版本。

如果您想要升级镜像的数据库实例以使用 AG,请先运行升级,修改实例以删除多可用区,然后再次修改它以添加多可用区。这会将实例转换为使用 Always On AG。