Amazon Relational Database Service
用户指南 (API Version 2014-10-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

带数据库镜像的 Microsoft SQL Server 的多可用区部署

Amazon RDS 通过使用 SQL Server 数据库镜像支持针对运行 Microsoft SQL Server 的数据库实例的多可用区部署。多可用区部署为数据库实例提供了更高的可用性、数据持久性和容错能力。在进行计划的数据维护或发生未计划的服务中断时,Amazon RDS 将自动故障转移到最新备用资源,以便数据库操作能够在不进行手动干预的情况下快速恢复。主实例和备用实例使用相同的终端节点,作为故障转移过程的一部分,其物理网络地址在故障转移过程中转换到镜像。在故障转移时,您不必重新配置应用程序。

Amazon RDS 管理故障转移的方式是:主动监控多可用区部署并在主实例发生问题时主动启动故障转移。除非备用实例和主实例完全同步,否则不会发生故障转移。通过自动修复运行状况不佳的数据库实例并重新建立同步复制,Amazon RDS 主动维护您的多可用区部署。您不需要管理任何内容;Amazon RDS 负责处理主实例、镜像见证以及备用实例。当您设置 SQL Server 多可用区时,将自动对实例上的所有数据库进行镜像。

Amazon RDS 支持以下 SQL Server 版本的带镜像的多可用区:

  • SQL Server 2016:Standard Edition 和 Enterprise Edition

  • SQL Server 2014:Standard Edition 和 Enterprise Edition

  • SQL Server 2012:Standard Edition 和 Enterprise Edition

  • SQL Server 2008 R2:Standard Edition 和 Enterprise Edition

Amazon RDS 支持 除以下区域之外所有 AWS 区域中针对 SQL Server 的带镜像的多可用区:

  • 不支持

    • 美国西部(加利福尼亚北部)

    • 亚太区域(新加坡)

    • AWS GovCloud (US)

 

向 Microsoft SQL Server 数据库实例添加带镜像的多可用区

在使用 AWS 管理控制台创建新的 SQL Server 数据库实例时,您可以从 Specify DB Details 页面上的 Multi-AZ Deployment 列表中选择 Yes (Mirroring) 来添加带镜像的多可用区。有关更多信息,请参阅 创建运行 Microsoft SQL Server 数据库引擎的数据库实例

在使用 AWS 管理控制台修改现有 SQL Server 数据库实例时,可以从 Modify DB Instance 页面上的 Multi-AZ Deployment 列表中选择 Yes (Mirroring) 来添加带镜像的多可用区。有关更多信息,请参阅 修改运行 Microsoft SQL Server 数据库引擎的数据库实例

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

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

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

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

  • 具有专用租赁的数据库实例不支持的带镜像的多可用区。

  • 启用内存优化的数据库实例不支持带镜像的多可用区。有关更多信息,请参阅 Microsoft 文档中的内存中 OLTP 不支持的 SQL Server 功能

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

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

  • 要对 VPC 中的 SQL Server 数据库实例使用带镜像的 SQL Server 多可用区,您需要先创建一个包含至少两个不同可用区中的子网的数据库子网组。然后将该数据库子网组分配给所镜像的 SQL Server 数据库实例。

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

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

  • 带镜像的多可用区支持一个备用镜像。

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

  • 如果您拥有 SQL Server Agent 任务,则需要在二级重新创建这些任务,因为这些任务存储在 msdb 数据库中,而此数据库不能通过镜像来复制。先在原始主实例中创建任务,然后进行故障转移并在新的主实例中创建相同任务。

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

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

  • 在将备份文件还原至多可用区数据库实例时,将终止镜像,并在之后重新建立。将对数据库实例上的所有数据库终止并重新建立镜像,不仅限于您还原的数据库。RDS 重新建立镜像时,数据库实例无法执行故障转移。重新建立镜像可能需要 30 分钟或更长时间,具体取决于所还原数据库的大小。有关更多信息,请参阅 导入和导出 SQL Server 数据库

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

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

  • 您无法为备用实例选择可用区 (AZ),因此,在部署应用程序主机时请注意这一点。您的数据库可能故障转移到其他可用区,并且应用程序主机与数据库可能不在同一可用区中。因此,最佳实践是在区域中的所有可用区间平衡应用程序主机。

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

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

    Copy
    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 命令。例如,不要 使用以下命令:

    Copy
    ALTER DATABASE db1 SET PARTNER off
  • 不应将恢复模式设置为 simple。例如,不要 使用以下命令:

    Copy
    ALTER DATABASE db1 SET RECOVERY simple
  • 在多可用区数据库实例上创建新登录名时,不应使用DEFAULT_DATABASE 参数,因为这些设置不能应用于备用镜像。例如,不要 使用以下命令:

    Copy
    CREATE LOGIN [test_dba] WITH PASSWORD=foo, DEFAULT_DATABASE=[db2]

    并且不要 使用以下命令:

    Copy
    ALTER LOGIN [test_dba] SET DEFAULT_DATABASE=[db3]

确定备用镜像的位置

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

 单可用区情况

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

相关主题