管理 RDS Custom for SQL Server 的多可用区部署 - Amazon Relational Database Service

管理 RDS Custom for SQL Server 的多可用区部署

在 RDS Custom for SQL Server 的多可用区数据库实例部署中,Amazon RDS 会自动在不同可用区(AZ)中预调配和维护一个同步备用副本。主数据库实例可以跨可用区同步复制到备用副本以提供数据冗余。

重要

RDS Custom for SQL Server 的多可用区部署与 RDS for SQL Server 的多可用区部署不同。与 RDS for SQL Server 的多可用区不同,对于 RDS Custom for SQL Server,在创建多可用区数据库实例之前,您必须设置先决条件,因为 RDS Custom 在您自己的账户内运行,这需要权限。

如果您未完成先决条件,则多可用区数据库实例可能无法运行,或者自动恢复为单可用区数据库实例。有关先决条件的更多信息,请参阅RDS Custom for SQL Server 的多可用区部署的先决条件

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

RDS Custom for SQL Server 支持多可用区。

您可以通过在创建 RDS Custom 数据库实例时指定多可用区,来创建 RDS Custom for SQL Server 多可用区部署。您可以使用控制台,通过修改数据库实例并指定多可用区选项,将现有 RDS Custom for SQL Server 数据库实例转换为多可用区部署。还可以使用 AWS CLI 或 Amazon RDS API 指定多可用区数据库实例部署。

RDS 控制台显示备用副本的可用区(辅助可用区)。还可以使用 describe-db-instances CLI 命令或 DescribeDBInstances API 操作来查找辅助可用区。

与单可用区部署相比,具有多可用区部署的 RDS Custom for SQL Server 数据库实例的写入和提交延迟可能会增加。这种增加可能是由于数据库实例之间的同步数据复制造成的。尽管 AWS 设计用于在可用区之间提供低延迟网络连接,但如果您的部署故障转移到备用副本,延迟可能会发生变化。

注意

对于生产工作负载,我们建议您使用具有预调配 IOPS(每秒输入/输出操作数)的数据库实例类,以获得快速、一致的性能。有关数据库实例类的更多信息,请参阅 Amazon RDS Custom for SQL Server 的要求和限制

区域和版本可用性

以下 SQL Server 版本支持 RDS Custom for SQL Server 的多可用区部署:

  • SQL Server 2022 和 2019:企业版、标准版、Web 版和开发版

注意

SQL Server 2019 CU8(15.00.4073.23)或更低版本不支持 RDS Custom for SQL Server 的多可用区部署。

RDS Custom for SQL Server 的多可用区部署在 RDS Custom for SQL Server 可用的所有区域中均可用。有关 RDS Custom for SQL Server 的多可用区部署的区域可用性的更多信息,请参阅 RDS Custom for SQL Server

RDS Custom for SQL Server 的多可用区部署的限制

RDS Custom for SQL Server 的多可用区部署具有以下限制:

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

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

  • 当您在多可用区部署中使用自定义引擎版本(CEV)时,辅助数据库实例也将使用相同的 CEV。辅助数据库实例无法使用不同的 CEV。

RDS Custom for SQL Server 的多可用区部署的先决条件

如果您具有现有的 RDS Custom for SQL Server 单可用区部署,则在将其修改为多可用区部署之前,需要满足以下附加先决条件。您可以选择手动完成先决条件,也可以选择使用提供的 CloudFormation 模板完成先决条件。最新的 CloudFormation 模板同时包含适用于单可用区部署和多可用区部署的先决条件。

重要

为了简化设置,我们建议您使用网络设置说明中提供的最新 AWS CloudFormation 模板文件来创建先决条件。有关更多信息,请参阅使用 AWS CloudFormation 进行配置

注意

将现有的 RDS Custom for SQL Server 单可用区部署修改为多可用区部署时,必须先完成这些先决条件。如果您未完成先决条件,则多可用区设置将失败。要完成先决条件,请执行将 RDS Custom for SQL Server 的单可用区部署修改为多可用区部署中的步骤。

  • 更新 RDS 安全组入站和出站规则以允许端口 1120。

  • 在您的私有网络访问控制列表(ACL)中添加一条规则,以允许数据库实例 VPC 使用 TCP 端口 0-65535

  • 创建新的 Amazon SQS VPC 端点,以允许 RDS Custom for SQL Server 数据库实例与 SQS 通信。

  • 更新实例配置文件角色中的 SQS 权限。

创建 RDS Custom for SQL Server 多可用区部署

要创建 RDS Custom for SQL Server 多可用区部署,请按照为 Amazon RDS Custom for SQL Server 创建并连接到数据库实例中的步骤操作。

重要

为了简化设置,我们建议您使用网络设置说明中提供的最新 AWS CloudFormation 模板文件。有关更多信息,请参阅使用 AWS CloudFormation 进行配置

创建多可用区部署需要几分钟才能完成。

将 RDS Custom for SQL Server 的单可用区部署修改为多可用区部署

您可以将现有的 RDS Custom for SQL Server 数据库实例从单可用区部署修改为多可用区部署。修改数据库实例时,Amazon RDS 会执行多项操作:

  • 拍摄主数据库实例的快照。

  • 从快照中为备用副本创建新卷。这些卷在后台初始化,并在数据完全初始化后达到最大卷性能。

  • 开启主数据库实例与辅助数据库实例之间的同步块级复制。

重要

我们建议您避免在高峰活动期在生产数据库实例上将 RDS Custom for SQL Server 数据库实例从单可用区部署修改为多可用区部署。

AWS 使用快照创建备用实例,以避免在从单可用区转换到多可用区时出现停机,但是在转换为多可用区期间和转换后,性能可能会受到影响。对于对写入延迟敏感的工作负载而言,这可能会产生很大的影响。尽管此功能允许快速从快照中还原大型卷,但由于同步复制,该功能可能会导致 I/O 操作的延迟增加。这种延迟可能会影响您的数据库性能。

使用 CloudFormation 配置先决条件,以将单可用区部署修改为多可用区部署

要使用多可用区部署,必须确保应用了满足先决条件的最新 CloudFormation 模板,或者手动配置最新的先决条件。如果您已经应用了最新的 CloudFormation 先决条件模板,则可以跳过这些步骤。

使用 CloudFormation 配置 RDS Custom for SQL Server 多可用区部署先决条件

  1. 通过以下网址打开 CloudFormation 控制台:https://console.aws.amazon.com/cloudformation

  2. 要启动创建堆栈向导,请选择用于创建单可用区部署的现有堆栈,然后选择更新

    此时会显示更新堆栈页面。

  3. 对于先决条件 - 准备模板,请选择替换当前模板

  4. 对于 Select Template(选择模板),执行以下操作:

    1. 下载最新的 AWS CloudFormation 模板文件。打开链接 custom-sqlserver-onboard.zip 的上下文(右键单击)菜单,然后选择 Save Link As(将链接另存为)。

    2. custom-sqlserver-onboard.json 文件保存并提取到您的计算机中。

    3. 对于 Template source(模板来源),选择 Upload a template file(上载模板文件)。

    4. 对于 Choose file(选择文件),请导航到 custom-sqlserver-onboard.json 并选择它。

  5. 选择下一步

    此时将出现 Specify stack details(指定堆栈详细信息)页面。

  6. 要保留原定设置选项,请选择 Next(下一步)。

    将出现高级选项页面。

  7. 要保留原定设置选项,请选择 Next(下一步)。

  8. 要保留原定设置选项,请选择 Next(下一步)。

  9. 检查更改页面上,执行以下操作:

    1. 对于 Capabilities(功能),请选中 I acknowledge that AWS CloudFormation might create IAM resources with custom names(我确认 AWS CloudFormation 可能使用自定义名称创建 IAM 资源)复选框。

    2. 选择提交

  10. 验证更新是否成功。成功操作的状态将显示 UPDATE_COMPLETE

如果更新失败,则将回滚更新过程中指定的任何新配置。现有资源将仍然可用。例如,如果添加编号为 18 和 19 的网络 ACL 规则,但存在编号相同的现有规则,则更新将返回以下错误:Resource handler returned message: "The network acl entry identified by 18 already exists.。在这种情况下,您可以修改现有 ACL 规则以使用小于 18 的编号,然后重试更新。

手动配置先决条件,以将单可用区部署修改为多可用区部署

重要

为了简化设置,我们建议您使用网络设置说明中提供的最新 AWS CloudFormation 模板文件。有关更多信息,请参阅使用 CloudFormation 配置先决条件,以将单可用区部署修改为多可用区部署

如果您选择手动配置先决条件,请执行以下任务。

  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 选择端点创建终端节点页面显示。

  3. 对于服务类别,选择 AWS 服务

  4. 服务中,搜索 SQS

  5. VPC 中,选择在其中部署 RDS Custom for SQL Server 数据库实例的 VPC。

  6. 子网中,选择在其中部署 RDS Custom for SQL Server 数据库实例的子网。

  7. 安全组中,选择 -vpc-endpoint-sg 组。

  8. 对于策略,选择自定义

  9. 在自定义策略中,将 AWS partitionRegionaccountIdIAM-Instance-role 替换为您自己的值。

    { "Version": "2012-10-17", "Statement": [ { "Condition": { "StringLike": { "aws:ResourceTag/AWSRDSCustom": "custom-sqlserver" } }, "Action": [ "SQS:SendMessage", "SQS:ReceiveMessage", "SQS:DeleteMessage", "SQS:GetQueueUrl" ], "Resource": "arn:${AWS::Partition}:sqs:${AWS::Region}:${AWS::AccountId}:do-not-delete-rds-custom-*", "Effect": "Allow", "Principal": { "AWS": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/{IAM-Instance-role}" } } ] }
  10. 使用访问 Amazon SQS 的权限更新实例配置文件。将 AWS partitionRegionaccountId 替换为您自己的值。

    { "Sid": "SendMessageToSQSQueue", "Effect": "Allow", "Action": [ "SQS:SendMessage", "SQS:ReceiveMessage", "SQS:DeleteMessage", "SQS:GetQueueUrl" ], "Resource": [ { "Fn::Sub": "arn:${AWS::Partition}:sqs:${AWS::Region}:${AWS::AccountId}:do-not-delete-rds-custom-*" } ], "Condition": { "StringLike": { "aws:ResourceTag/AWSRDSCustom": "custom-sqlserver" } } } >
  11. 更新 Amazon RDS 安全组的入站和出站规则以允许端口 1120。

    1. 安全组中,选择 -rds-custom-instance-sg 组。

    2. 对于入站规则,创建自定义 TCP 规则,以允许源 -rds-custom-instance-sg 组使用端口 1120

    3. 对于出站规则,创建自定义 TCP 规则,以允许端口 1120 连接到目标 -rds-custom-instance-sg 组。

  12. 在您的私有网络访问控制列表(ACL)中添加一条规则,以允许数据库实例的源子网使用 TCP 端口 0-65535

    注意

    创建入站规则出站规则时,请记下现有的最大规则编号。您创建的新规则的规则编号必须小于 100,且与任何现有规则编号均不匹配。

    1. 网络 ACL 中,选择 -private-network-acl 组。

    2. 对于入站规则,创建全部 TCP 规则,以允许将 TCP 端口 0-65535 用于来自 privatesubnet1privatesubnet2 的源。

    3. 对于出站规则,创建全部 TCP 规则,以允许 TCP 端口 0-65535 连接到目标 privatesubnet1privatesubnet2

使用 RDS 控制台、AWS CLI 或 RDS API 进行修改。

完成先决条件后,您可以使用 RDS 控制台、AWS CLI 或 RDS API,将 RDS Custom for SQL Server 数据库实例从单可用区部署修改为多可用区部署。

将现有 RDS Custom for SQL Server 单可用区部署修改为多可用区部署
  1. 登录 AWS Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在 Amazon RDS 控制台中,选择数据库

    随后会显示数据库窗格。

  3. 选择要修改的 RDS Custom for SQL Server 数据库实例。

  4. 对于操作中,选择转换为多可用区部署

  5. 确认页面上,选择立即应用以立即应用更改。选择此选项不会导致停机,但可能会对性能产生影响。或者,您可以选择在下一个维护时段内应用更新。有关更多信息,请参阅计划修改设置

  6. 确认页面上,选择转换为多可用区

要使用 AWS CLI 转换为多可用区数据库实例部署,请调用 modify-db-instance 命令并设置 --multi-az 选项。指定数据库实例标识符以及要修改的其他选项的值。有关各选项的信息,请参阅 数据库实例的设置

以下代码通过包含 --multi-az 选项来修改 mycustomdbinstance。将在下一维护时段使用 --no-apply-immediately 应用这些更改。使用 --apply-immediately 可立即应用更改。有关更多信息,请参阅计划修改设置

对于 Linux、macOS 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier mycustomdbinstance \ --multi-az \ --no-apply-immediately

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier mycustomdbinstance ^ --multi-az \ ^ --no-apply-immediately

要使用 RDS API 转换为多可用区数据库实例部署,请调用 ModifyDBInstance 操作并将 MultiAZ 参数设置为 true。

将 RDS Custom for SQL Server 多可用区部署修改为单可用区部署

您可以将现有的 RDS Custom for SQL Server 数据库实例从多可用区部署修改为单可用区部署。

将 RDS Custom for SQL Server 数据库实例从多可用区部署修改为单可用区部署。
  1. 登录 AWS Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在 Amazon RDS 控制台中,选择数据库

    随后会显示数据库窗格。

  3. 选择要修改的 RDS Custom for SQL Server 数据库实例。

  4. 对于多可用区部署,请选择

  5. 确认页面上,选择立即应用以立即应用更改。选择此选项不会导致停机,但可能会对性能产生影响。或者,您可以选择在下一个维护时段内应用更新。有关更多信息,请参阅计划修改设置

  6. 确认页面上,选择修改数据库实例

要使用 AWS CLI 将多可用区部署修改为单可用区部署,请调用 modify-db-instance 命令并包含 --no-multi-az 选项。指定数据库实例标识符以及要修改的其他选项的值。有关各选项的信息,请参阅 数据库实例的设置

以下代码通过包含 --no-multi-az 选项来修改 mycustomdbinstance。将在下一维护时段使用 --no-apply-immediately 应用这些更改。使用 --apply-immediately 可立即应用更改。有关更多信息,请参阅计划修改设置

对于 Linux、macOS 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier mycustomdbinstance \ --no-multi-az \ --no-apply-immediately

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier mycustomdbinstance ^ --no-multi-az \ ^ --no-apply-immediately

要使用 RDS API 将多可用区部署修改为单可用区部署,请调用 ModifyDBInstance 操作并将参数 MultiAZ 设置为 false

RDS Custom for SQL Server 多可用区部署的失效转移过程

如果由于基础设施缺陷而导致数据库实例发生计划内或计划外的中断时,此时如果您已启用多可用区,则 Amazon RDS 会自动切换到另一个可用区中的备用副本。完成失效转移所用的时间取决于在主数据库实例变为不可用时的数据库活动和其他条件。失效转移时间通常为 60 – 120 秒。不过,事务较多或时间较长的恢复过程可能延长故障转移时间。完成失效转移后,RDS 控制台还需要一段时间才能显示新的可用区。

注意

在通过失效转移重启数据库实例时,可以手动强制执行失效转移。有关重启数据库实例的更多信息,请参阅重启中的数据库实例

Amazon RDS 会自动处理故障转移,因此,您可以尽快恢复数据库操作而无需管理干预。如果出现下表中描述的任一情况,主数据库实例会自动切换到备用副本:您可以在 RDS 事件日志中查看这些失效转移原因。

故障转移原因 描述

The operating system for the RDS Custom for SQL Server Multi-AZ DB instance is being patched in an offline operation

在操作系统补丁或安全更新的维护时段内触发了故障切换。有关更多信息,请参阅维护数据库实例

The primary host of the RDS Custom for SQL Server Multi-AZ DB instance is unhealthy.

多可用区数据库实例部署检测到受损的主数据库实例并进行故障转移。

The primary host of the RDS Custom for SQL Server Multi-AZ DB instance is unreachable due to loss of network connectivity.

RDS 监控检测到主数据库实例的网络可达性故障并触发了故障转移。

The RDS Custom for SQL Server Multi-AZ DB instance was modified by the customer.

数据库实例修改触发了失效转移。有关更多信息,请参阅修改 RDS Custom for SQL Server 数据库实例

The storage volume of the primary host of the RDS Custom for SQL Server Multi-AZ DB instance experienced a failure.

多可用区数据库实例部署在主数据库实例上检测到存储问题并进行故障转移。

The user requested a failover of the RDS Custom for SQL Server Multi-AZ DB instance.

RDS Custom for SQL Server 多可用区数据库实例已通过失效转移重启。有关更多信息,请参阅重启中的数据库实例

The RDS Custom for SQL Server Multi-AZ primary DB instance is busy or unresponsive.

主数据库实例没有响应。我们建议您尝试以下步骤:

要确定多可用区数据库实例是否发生故障转移,您可以执行以下操作:

  • 将数据库事件订阅设置为在故障转移启动时向您发送电子邮件或 SMS 通知。有关事件的更多信息,请参阅 使用 Amazon RDS 事件通知

  • 使用 RDS 控制台或 API 操作查看数据库事件。

  • 使用 RDS 控制台、CLI 或 API 操作查看 RDS Custom for SQL Server 多可用区数据库实例部署的当前状态。

使用 RDS Custom for SQL Server 多可用区部署的应用程序的存活时间(TTL)设置

故障转移机制自动更改数据库实例的域名系统 (DNS) 记录,使其指向备用数据库实例。因此,您需要重新建立与数据库实例之间的所有现有连接。确保任何 DNS 缓存存活时间(TTL)配置值都较低,并验证您的应用程序不会长时间缓存 DNS。TTL 值较高可能会阻止应用程序在失效转移后快速重新连接到数据库实例。