

# 将 RDS Custom for SQL Server 的单可用区部署修改为多可用区部署
<a name="custom-sqlserver-multiaz.modify-saztomaz"></a>

您可以将现有的 RDS Custom for SQL Server 数据库实例从单可用区部署修改为多可用区部署。修改数据库实例时，Amazon RDS 会执行多项操作：
+ 拍摄主数据库实例的快照。
+ 从快照中为备用副本创建新卷。这些卷在后台初始化，并在数据完全初始化后达到最大卷性能。
+ 开启主数据库实例与辅助数据库实例之间的同步块级复制。

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

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

**注意**  
如果您在 2024 年 8 月 29 日之前创建了 RDS Custom for SQL Server 数据库实例，请在修改之前修补到最新的次要版本。  
对于 SQL Server 2019 实例，请将数据库引擎版本升级到 `15.00.4410.1.v1` 或更高版本。
对于 SQL Server 2022 实例，请将数据库引擎版本升级到 `16.00.4150.1.v1` 或更高版本。

**Topics**
+ [使用 CloudFormation 配置先决条件，以将单可用区部署修改为多可用区部署](#custom-sqlserver-multiaz.modify-saztomaz-prereqs.cf)
+ [手动配置先决条件，以将单可用区部署修改为多可用区部署](#custom-sqlserver-multiaz.modify-saztomaz-prereqs.manual)
+ [使用 RDS 控制台、AWS CLI 或 RDS API 进行修改。](#custom-sqlserver-multiaz.modify-saztomaz-afterprereqs)

## 使用 CloudFormation 配置先决条件，以将单可用区部署修改为多可用区部署
<a name="custom-sqlserver-multiaz.modify-saztomaz-prereqs.cf"></a>

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

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

1. 通过以下网址打开 CloudFormation 控制台：[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

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

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

1. 对于**先决条件 - 准备模板**，请选择**替换当前模板**。

1. 对于 **Select Template**（选择模板），执行以下操作：

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

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

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

   1. 对于 **Choose file**（选择文件），请导航到 `custom-sqlserver-onboard.json` 并选择它。

1. 选择**下一步**。

   此时将出现 **Specify stack details**（指定堆栈详细信息）页面。

1. 要保留原定设置选项，请选择 **Next**（下一步)。

   将出现**高级选项**页面。

1. 要保留原定设置选项，请选择 **Next**（下一步)。

1. 要保留原定设置选项，请选择 **Next**（下一步)。

1. 在**检查更改**页面上，执行以下操作：

   1. 对于**功能**，请选中****我确认 CloudFormation 可能使用自定义名称创建 IAM 资源****复选框。

   1. 选择**提交**。

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

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

## 手动配置先决条件，以将单可用区部署修改为多可用区部署
<a name="custom-sqlserver-multiaz.modify-saztomaz-prereqs.manual"></a>

**重要**  
为了简化设置，我们建议您使用网络设置说明中提供的最新 CloudFormation 模板文件。有关更多信息，请参阅 [使用 CloudFormation 配置先决条件，以将单可用区部署修改为多可用区部署](#custom-sqlserver-multiaz.modify-saztomaz-prereqs.cf)。

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

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 选择**端点**。**创建端点**页面显示。

1. 对于**服务类别**，选择 **AWS 服务**。

1. 在**服务**中，搜索 *SQS*。

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

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

1. 在**安全组**中，选择 *-vpc-endpoint-sg* 组。

1. 对于**策略**，选择**自定义**。

1. 在自定义策略中，将 *AWS partition*、*Region*、*accountId* 和 *IAM-Instance-role* 替换为您自己的值。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Condition": {
                   "StringLike": {
                       "aws:ResourceTag/AWSRDSCustom": "custom-sqlserver"
                   }
               },
               "Action": [
                   "SQS:SendMessage",
                   "SQS:ReceiveMessage",
                   "SQS:DeleteMessage",
                   "SQS:GetQueueUrl"
               ],
               "Resource": "arn:aws:sqs:us-east-1:111122223333:do-not-delete-rds-custom-*",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:role/{IAM-Instance-role}"
               }
           }
       ]
   }
   ```

------

1.  使用访问 Amazon SQS 的权限更新**实例配置文件**。将 *AWS partition*、*Region* 和 *accountId* 替换为您自己的值。

   ```
                           {
       "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"
         }
       }
     } 
                           >
   ```

1. 更新 Amazon RDS 安全组的入站和出站规则以允许端口 1120。

   1. 在**安全组**中，选择 *-rds-custom-instance-sg* 组。

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

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

1. 在您的私有网络访问控制列表（ACL）中添加一条规则，以允许数据库实例的源子网使用 TCP 端口 `0-65535`。
**注意**  
创建**入站规则**和**出站规则**时，请记下现有的最大**规则编号**。您创建的新规则的**规则编号**必须小于 100，且与任何现有**规则编号**均不匹配。

   1. 在**网络 ACL** 中，选择 *-private-network-acl* 组。

   1. 对于**入站规则**，创建**全部 TCP** 规则，以允许将 TCP 端口 `0-65535` 用于来自 *privatesubnet1* 和 *privatesubnet2* 的源。

   1. 对于**出站规则**，创建**全部 TCP** 规则，以允许 TCP 端口 `0-65535` 连接到目标 *privatesubnet1* 和 *privatesubnet2*。

## 使用 RDS 控制台、AWS CLI 或 RDS API 进行修改。
<a name="custom-sqlserver-multiaz.modify-saztomaz-afterprereqs"></a>

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

### 控制台
<a name="custom-sqlserver-multiaz.modify-saztomaz.Console"></a>

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

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在 Amazon RDS 控制台中，选择**数据库**。

   随后会显示**数据库**窗格。

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

1. 对于**操作**中，选择**转换为多可用区部署**。

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

1. 在**确认**页面上，选择**转换为多可用区**。

### AWS CLI
<a name="custom-sqlserver-multiaz.modify-saztomaz.CLI"></a>

要使用 AWS CLI 转换为多可用区数据库实例部署，请调用 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令并设置 `--multi-az` 选项。指定数据库实例标识符以及要修改的其他选项的值。有关各选项的信息，请参阅 [数据库实例的设置](USER_ModifyInstance.Settings.md)。

**Example**  
以下代码通过包含 `--multi-az` 选项来修改 `mycustomdbinstance`。将在下一维护时段使用 `--no-apply-immediately` 应用这些更改。使用 `--apply-immediately` 可立即应用更改。有关更多信息，请参阅 [使用计划修改设置](USER_ModifyInstance.ApplyImmediately.md)。  
对于 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
<a name="custom-sqlserver-multiaz.modify-saztomaz.API"></a>

要使用 RDS API 转换为多可用区数据库实例部署，请调用 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作并将 `MultiAZ` 参数设置为 true。