

# 在 Amazon RDS 中创建蓝绿部署
<a name="blue-green-deployments-creating"></a>

创建蓝绿部署时，您需要指定要在部署中复制的源数据库实例。您选择的数据库实例是生产数据库实例，它将成为蓝色环境中的主数据库实例。此数据库实例复制到绿色环境，RDS 配置从蓝色环境中的数据库实例到绿色环境中的数据库实例的复制。

RDS 将蓝色环境的拓扑和功能复制到暂存区域。如果蓝色数据库实例具有只读副本，它们将被复制为绿色实例的副本。所有绿色副本分配得到的存储与绿色主实例一致，而其他存储参数则继承自蓝色副本。

如果蓝色数据库实例为多可用区数据库实例部署，则绿色数据库实例将创建为多可用区数据库实例部署。

**Topics**
+ [准备进行蓝绿部署](#blue-green-deployments-creating-preparing)
+ [创建蓝绿部署时指定更改](#blue-green-deployments-creating-changes)
+ [蓝绿部署的延迟加载和存储初始化](#blue-green-deployments-creating-lazy-loading)
+ [创建蓝绿部署](#blue-green-deployments-creating-create)
+ [创建蓝绿部署的设置](#create-blue-green-settings)

## 准备进行蓝绿部署
<a name="blue-green-deployments-creating-preparing"></a>

在创建蓝绿部署之前，必须执行某些步骤，具体取决于您的数据库实例运行的引擎。

**Topics**
+ [准备 RDS for MySQL 或 RDS for MariaDB 数据库实例以进行蓝绿部署](#blue-green-deployments-creating-preparing-mysql)
+ [准备 RDS for PostgreSQL 数据库实例以进行采用物理复制的蓝绿部署](#blue-green-deployments-creating-preparing-postgres-physical)
+ [准备 RDS for PostgreSQL 数据库实例以进行采用逻辑复制的蓝绿部署](#blue-green-deployments-creating-preparing-postgres-logical)

### 准备 RDS for MySQL 或 RDS for MariaDB 数据库实例以进行蓝绿部署
<a name="blue-green-deployments-creating-preparing-mysql"></a>

在为 RDS for MySQL 或 RDS for MariaDB 数据库实例创建蓝绿部署之前，必须启用自动备份。有关说明，请参阅[启用自动备份](USER_WorkingWithAutomatedBackups.Enabling.md)。

### 准备 RDS for PostgreSQL 数据库实例以进行采用物理复制的蓝绿部署
<a name="blue-green-deployments-creating-preparing-postgres-physical"></a>

在创建使用物理复制的 RDS for PostgreSQL 蓝绿部署之前，务必执行以下操作：有关使用物理复制或逻辑复制的版本列表，请参阅 [PostgreSQL 蓝绿部署的复制方法](blue-green-deployments-replication-type.md)。
+ 在数据库实例上启用自动备份。有关说明，请参阅[启用自动备份](USER_WorkingWithAutomatedBackups.Enabling.md)。
+ 确认数据库实例不是外部复制的源或目标。有关更多信息，请参阅 [蓝绿部署的一般限制](blue-green-deployments-considerations.md#blue-green-deployments-limitations-general)。

### 准备 RDS for PostgreSQL 数据库实例以进行采用逻辑复制的蓝绿部署
<a name="blue-green-deployments-creating-preparing-postgres-logical"></a>

在创建使用逻辑复制的 RDS for PostgreSQL 蓝绿部署之前，务必执行以下操作：有关使用逻辑复制或物理复制的版本列表，请参阅 [PostgreSQL 蓝绿部署的复制方法](blue-green-deployments-replication-type.md)。
+ 在开启逻辑复制（`rds.logical_replication`）的情况下，将实例与自定义数据库参数组关联。从蓝色环境复制到绿色环境需要逻辑复制。有关说明，请参阅[在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)。

  由于蓝绿部署要求每个数据库至少有一个后台工作线程，因此请务必根据您的工作负载调整以下配置设置：有关调整每个设置的说明，请参阅 PostgreSQL 文档中的 [Configuration Settings](https://www.postgresql.org/docs/current/logical-replication-config.html)。
  + `max_replication_slots`
  + `max_wal_senders`
  + `max_logical_replication_workers`
  + `max_worker_processes`

  启用逻辑复制并设置所有配置选项后，请务必重启数据库实例，以便您的更改生效。蓝绿部署*要求*数据库实例与数据库参数组同步，否则创建将失败。有关更多信息，请参阅 [重启数据库实例](USER_RebootInstance.md)。
+ 确认数据库实例不是外部复制的源或目标。有关更多信息，请参阅 [蓝绿部署的一般限制](blue-green-deployments-considerations.md#blue-green-deployments-limitations-general)。
+ 确保数据库实例中的所有表都有主键。PostgreSQL 逻辑复制不允许对没有主键的表进行 `UPDATE` 或 `DELETE` 操作。
+ RDS for PostgreSQL 使用 PostgreSQL 的本机逻辑复制，将预写日志（WAL）段存储在蓝色实例上，直到这些段在绿色环境中重播。创建蓝绿部署之前，请通过检查以下指标来验证蓝色实例是否具有足够的容量：
  + `FreeStorageSpace`
  + `TransactionLogsGeneration`
  + `TransactionLogsDiskUsage`
  + `OldestReplicationSlotLag`

  要估算蓝色实例所需的额外存储空间，请在工作负载高峰期监控 `TransactionLogsGeneration` CloudWatch 指标。例如，如果您的工作负载在 24 小时内生成 100 GB 的 WAL 数据，请确保至少有 100 GB 的额外存储空间来容纳一天的 WAL 段。有关更多信息，请参阅 [监控 Amazon RDS 实例中的指标](CHAP_Monitoring.md)。

## 创建蓝绿部署时指定更改
<a name="blue-green-deployments-creating-changes"></a>

创建蓝绿部署时，可以在绿色环境中对数据库实例进行以下更改：

部署后，您可以在绿色环境中对数据库实例进行其他修改。例如，您可以指定更高的引擎版本或不同的参数组。

有关修改数据库实例的信息，请参阅[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

**Topics**
+ [指定更高的引擎版本](#blue-green-deployments-engine-version)
+ [指定其它数据库参数组](#blue-green-deployments-parameters)
+ [修改存储和性能设置](#blue-green-deployments-resize)
+ [使用 RDS 优化写入](#blue-green-deployments-db-instance)
+ [升级存储配置](#blue-green-deployments-storage)

### 指定更高的引擎版本
<a name="blue-green-deployments-engine-version"></a>

如果要测试数据库引擎升级，可以指定更高的引擎版本。切换后，数据库将升级到您指定的主要或次要数据库引擎版本。

### 指定其它数据库参数组
<a name="blue-green-deployments-parameters"></a>

您可以测试参数更改如何影响绿色环境中的数据库实例，或者在升级时为新的主要数据库引擎版本指定参数组。

如果您指定不同的数据库参数组，则指定的数据库参数组将与绿色环境中的所有数据库实例相关联。如果您未指定不同的参数组，则绿色环境中的每个数据库实例都与其所对应的蓝色数据库实例的参数组相关联。

### 修改存储和性能设置
<a name="blue-green-deployments-resize"></a>

在绿色环境中调整存储和性能设置以优化资源分配。这些设置包括分配的存储、预调配 IOPS、存储类型和存储吞吐量（对于 gp3 存储）。

您可以将绿色数据库实例的存储类型改为 gp2、gp3、io1 或 io2。对于 gp3 存储，您还可以调整存储吞吐量，以增强高需求工作负载的数据传输性能，或者减少低强度应用程序的成本。有关更多信息，请参阅 [Amazon RDS 数据库实例存储](CHAP_Storage.md)。

您也可以选择增加或减少绿色环境中分配的存储。但是，只有当目标分配存储比当前存储使用量高出至少 20% 时，才应减少存储。如果减少分配的存储，Amazon RDS 会启动存储配置升级。有关更多信息，请参阅 [升级存储配置](#blue-green-deployments-storage)。最小目标存储空间的计算方式为：

```
Minimum Target Storage = Total Allocated Storage × Current Apparent Utilization × 1.2
```

1. 总分配存储空间：为您的数据库实例预调配的存储容量，在 RDS 控制台中可见。

1. 当前表观利用率：正在使用的已分配存储空间的百分比。要估算该值，请使用性能详情（数据库洞察）或增强监控中的 `os.fileSys.usedPercent` 指标。

**注意**  
由于存储利用率会随着时间的推移而发生波动，因此我们建议将目标存储空间设置为略高于计算的最小值，以考虑减少过程中可能出现的增长。

如果蓝色数据库实例使用磁性存储，您必须将绿色数据库实例改为通用或预调配 IOPS 存储类型，这样才能增加或减少分配的存储。

### 使用 RDS 优化写入
<a name="blue-green-deployments-db-instance"></a>

您可以使用蓝绿部署升级到支持 RDS 优化写入的数据库实例类。您只能在使用支持的数据库实例类*创建*的数据库上启用 RDS 优化写入。因此，此选项会创建一个使用支持的数据库实例类的绿色数据库，这使您能够在绿色数据库实例上开启 RDS 优化写入。

如果您要从不支持 RDS 优化写入的数据库实例类升级到支持 RDS 优化写入的数据库实例类，则还必须升级绿色数据库实例的存储配置。有关更多信息，请参阅 [升级存储配置](#blue-green-deployments-storage)。

您只能升级*主要*绿色数据库实例的数据库实例类。默认情况下，绿色环境中的只读副本将继承蓝色环境中的数据库实例设置。绿色环境成功创建后，您必须手动修改绿色环境中只读副本的数据库实例类。

不支持某些实例类升级，具体取决于蓝色数据库实例的引擎版本和实例类。有关数据库实例类的更多信息，请参阅[数据库实例类](Concepts.DBInstanceClass.md)。

### 升级存储配置
<a name="blue-green-deployments-storage"></a>

如果您的蓝色数据库未使用最新的存储配置，RDS 可以将绿色数据库实例从较旧的存储配置（32 位文件系统）迁移到首选配置。您可以使用 RDS 蓝绿部署来克服较旧 32 位文件系统的存储和文件大小的扩展限制。此外，如果指定的数据库实例类支持优化写入，则此设置会更改存储配置，使其与 RDS 优化写入兼容。

**注意**  
升级存储配置是一项 I/O 密集型操作，会导致蓝绿部署的创建时间更长。如果蓝色数据库实例使用预调配 IOPS SSD（io1 或 io2 Block Express）存储，并且您为绿色环境预调配了 4xlarge 或更大的实例，则存储升级过程会更快。涉及通用 SSD（gp2）存储的存储升级可能会耗尽您的 I/O 积分余额，从而导致升级时间更长。有关更多信息，请参阅 [Amazon RDS 数据库实例存储](CHAP_Storage.md)。  
在存储升级期间，绿色数据库实例暂时不可用，而蓝色数据库实例仍可用。在此期间，复制会暂停。监控蓝色实例上的存储，并在存储空间达到 90% 时考虑扩展，因为绿色实例在升级后会自动扩展 10%。

只有当您的蓝色数据库*未*使用最新的存储配置，或者您要在同一请求中更改数据库实例类时，此选项才可用。您只能在最初创建蓝绿部署时升级存储配置。

## 蓝绿部署的延迟加载和存储初始化
<a name="blue-green-deployments-creating-lazy-loading"></a>

当您创建蓝绿部署时，Amazon RDS 通过从数据库快照还原在绿色环境中创建主数据库实例。之后，绿色数据库实例及其只读副本继续在后台加载数据，这一过程称为*延迟加载*。

延迟加载仅在应用程序请求时才加载数据块。如果您尝试访问尚未加载的数据，Amazon EBS 会立即从 Amazon S3 检索它们，而其余数据继续在后台加载。有关更多信息，请参阅 [Amazon EBS 快照](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html)。

为了加速整个卷的性能，Amazon RDS 提供存储初始化功能，以读取绿色环境卷中的所有块。Amazon EBS 主动从 Amazon S3 下载块，从首次使用起即可提供最大的卷性能。存储初始化完全在后台进行，这确保不会影响数据库实例的可用性或正在进行的活动，例如修补或升级。

存储初始化仅适用于蓝绿部署中具有 `gp2`、`gp3`、`io1` 和 `io2` 卷类型的实例。它支持除 t3 和 t4 系列之外的所有实例类。如果您将单可用区部署中的绿色数据库实例修改为多可用区数据库实例部署，则存储初始化将包括多可用区配置中的辅助节点。

在存储初始化期间，实例仍完全可用并能用于数据库操作，但存储可能要等到初始化完成后才能达到全部性能。在存储初始化进行期间，实例的整体状态变为**存储初始化**，而进度指示器反映了数据库实例所有卷的最低初始化水平。

可使用控制台、AWS CLI 或 Amazon RDS API 监控存储初始化。

------
#### [ Console ]

 在 AWS 管理控制台中，您可以查看存储初始化的进度以及数据库实例的状态。

![蓝绿部署的存储初始化进度指示器](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/storage-initialization-bg.png)


------
#### [ AWS CLI ]

通过 AWS CLI，您可以使用 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令监控存储初始化。响应中的 `PercentProgress` 字段显示已从 Amazon S3 检索了多少百分比的数据。

```
aws rds describe-db-instances --db-instance-identifier my-db-instance

{
    "DBInstances": [
        {
            "DBInstanceIdentifier": "my-db-instance",
            "DBInstanceClass": "db.m5.2xlarge",
            "Engine": "postgres",
            "DBInstanceStatus": "storage-initialization",
            ...
            "PercentProgress": "34"
        }
    ]
}
```

------
#### [ Amazon RDS API ]

 利用 Amazon RDS API，您可以通过调用 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) 操作来检索存储初始化的状态。

------

进度指示器会随着后台初始化作业的进展而更新，这样，您就可以跟踪存储就绪情况，直到整个存储初始化完成。当您的绿色数据库实例变为完全可操作时，存储初始化可帮助优化性能。

## 创建蓝绿部署
<a name="blue-green-deployments-creating-create"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 创建蓝绿部署。

### 控制台
<a name="blue-green-deployments-creating-console"></a>

**创建蓝绿部署**

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

1. 在导航窗格中，选择 **Databases**（数据库），然后选择要复制到绿色环境的数据库实例。

1. 依次选择**操作**和**创建蓝绿部署**。

   将出现**创建蓝绿部署**页面。  
![创建蓝绿部署](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/blue-green-deployment-create.png)

1. 查看蓝色数据库标识符。确保它们与您在蓝色环境中预期的数据库实例相匹配。如果不符合预期，请选择 **Cancel**（取消）。

1. 对于**蓝绿部署名称**，输入蓝绿部署的名称。

1. 在剩余部分中，指定绿色环境的设置。有关每项设置的信息，请参阅[创建蓝绿部署的设置](#create-blue-green-settings)。

   部署后，可以在绿色环境中对数据库进行其他修改。

1. 选择**创建**。

### AWS CLI
<a name="blue-green-deployments-creating-cli"></a>

要使用 AWS CLI 创建蓝绿部署，请使用 [create-blue-green-deployment](https://docs.aws.amazon.com/cli/latest/reference/rds/create-blue-green-deployment.html) 命令。有关所有可用选项的信息，请参阅[创建蓝绿部署的设置](#create-blue-green-settings)。

**Example**  
对于 Linux、macOS 或 Unix：  

```
aws rds create-blue-green-deployment \
    --blue-green-deployment-name {{my-blue-green-deployment}} \
    --source arn:aws:rds:{{us-east-2}}:{{123456789012}}:db:{{mydb1}} \
    --target-engine-version {{8.0.31}} \
    --target-db-parameter-group-name {{mydbparametergroup}}
```
对于：Windows  

```
aws rds create-blue-green-deployment ^
    --blue-green-deployment-name {{my-blue-green-deployment}} ^
    --source arn:aws:rds:{{us-east-2}}:{{123456789012}}:db:{{mydb1}} ^
    --target-engine-version {{8.0.31}} ^
    --target-db-parameter-group-name {{mydbparametergroup}}
```

### RDS API
<a name="blue-green-deployments-creating-api"></a>

要使用 Amazon RDS API 创建蓝绿部署，请使用 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateBlueGreenDeployment.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateBlueGreenDeployment.html) 操作。有关各选项的信息，请参阅 [创建蓝绿部署的设置](#create-blue-green-settings)。

## 创建蓝绿部署的设置
<a name="create-blue-green-settings"></a>

下表说明创建蓝绿部署时可供您选择的设置。有关 AWS CLI 选项的更多信息，请参阅 [create-blue-green-deployment](https://docs.aws.amazon.com/cli/latest/reference/rds/create-blue-green-deployment.html)。有关 RDS API 参数的更多信息，请参阅 [CreateBlueGreenDeployment](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateBlueGreenDeployment.html)。


| 控制台设置 | 设置说明 | CLI 选项和 RDS API 参数 | 
| --- | --- | --- | 
|  **分配的存储空间**  |  要为绿色数据库实例分配的存储量（以 GiB 为单位）。您可以选择增加或减少分配的存储。 如果您的蓝色数据库实例使用磁性（`standard`）存储，则您必须将绿色数据库实例改为通用或预调配 IOPS 存储类型，这样才能在绿色环境中修改分配的存储。 有关更多信息，请参阅 [Amazon RDS 数据库实例存储](CHAP_Storage.md)。  |  **CLI 选项：** `--target-allocated-storage` **API 参数：**  `TargetAllocatedStorage`  | 
|  **蓝绿部署标识符**  |  蓝绿部署的名称。  |  **CLI 选项：** `--blue-green-deployment-name` **API 参数：**  `BlueGreenDeploymentName`  | 
| 蓝色数据库标识符 |  要复制到绿色环境的实例的标识符。使用 CLI 或 API 时，请指定实例的 Amazon 资源名称（ARN）。  |  **CLI 选项：** `--source` **API 参数：** `Source`  | 
|  绿色数据库的数据库参数组  | 与绿色环境中的数据库相关联的参数组。 |  **CLI 选项：** `--target-db-parameter-group-name` `--target-db-cluster-parameter-group-name` **API 参数：** `TargetDBParameterGroupName` `TargetDBClusterParameterGroupName`  | 
| 为绿色数据库启用优化写入 |  在绿色主数据库实例上启用 RDS 优化写入。有关更多信息，请参阅 [使用 RDS 优化写入](#blue-green-deployments-db-instance)。 如果您要从不支持优化写入的数据库实例类更改为支持优化写入的数据库实例类，则还必须执行存储配置升级。有关更多信息，请参阅 [升级存储配置](#blue-green-deployments-storage)。  |  对于 CLI 和 API，指定支持 RDS 优化写入的目标数据库实例类时，会自动在绿色主数据库实例上启用优化写入。  | 
|  **绿色数据库的引擎版本**  |  将绿色环境中的数据库升级到指定的数据库引擎版本。 如果未指定，则使用与蓝色环境中相应的数据库实例相同的引擎版本，在绿色环境中创建每个数据库。 如果您选择使用逻辑复制的 RDS for PostgreSQL 数据库实例，请回顾并确认逻辑复制的限制。有关更多信息，请参阅 [蓝绿部署的特定于逻辑复制的限制](blue-green-deployments-considerations.md#blue-green-deployments-limitations-postgres)。  |  **CLI 选项：** `--target-engine-version` **RDS API 参数：** `TargetEngineVersion`  | 
| 绿色数据库实例类 |  绿色环境中各个数据库实例的计算和内存容量，例如 `db.m5d.xlarge`。 只有在为绿色数据库启用 RDS 优化写入时，此选项才可见。  |  **CLI 选项：** `--target-db-instance-class` **RDS API 参数：** `TargetDBInstanceClass`  | 
| 预调配 IOPS |  最初为绿色数据库分配的预调配每秒输入/输出操作次数（IOPS）。 此值仅适用于绿色主数据库实例，不适用于绿色副本。  |  **CLI 选项：** `--target-iops` **RDS API 参数：** `TargetIops`  | 
| 存储配置升级 |  选择是否升级您的存储文件系统配置。如果您启用此设置，RDS 会将绿色数据库从旧存储文件系统迁移到首选配置。 只有当您的蓝色数据库*未*使用最新的存储配置，或者您在同一请求中启用 RDS 优化写入时，此选项才可用。您只能在最初创建蓝绿部署时升级存储配置。 有关更多信息，请参阅 [升级数据库实例的存储文件系统](USER_PIOPS.UpgradeFileSystem.md)。  |  **CLI 选项：** `--upgrade-target-storage-config` **RDS API 参数：** `UpgradeTargetStorageConfig`  | 
| Storage throughput（存储吞吐量 |  绿色数据库的存储吞吐量值。仅在您为存储类型选择通用型 SSD（gp3）时，此设置才可见。 此值仅适用于绿色主数据库实例，不适用于绿色副本。 有关更多信息，请参阅 [gp3 存储（推荐）](CHAP_Storage.md#gp3-storage)。  |  **CLI 选项：** `--target-storage-throughput` **RDS API 参数：** `TargetStorageThroughput`  | 
| 存储类型 |  绿色数据库的存储类型。以下为支持的存储类型： [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/blue-green-deployments-creating.html) 此值仅适用于绿色主数据库实例，不适用于绿色副本。 有关更多信息，请参阅 [Amazon RDS 存储类型](CHAP_Storage.md#Concepts.Storage)。  |  **CLI 选项：** `--target-storage-type` **RDS API 参数：** `TargetStorageType`  | 