

# Amazon RDS Custom 架构
<a name="custom-concept"></a>

Amazon RDS Custom 架构基于 Amazon RDS，且具有重要的区别。下图显示 RDS Custom 架构的主要组件。

![\[RDS Custom 架构组件\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/RDS_Custom_gen_architecture.png)


**Topics**
+ [VPC](#custom-concept.components.VPC)
+ [RDS Custom 自动化和监控](#custom-concept.workflow.automation)
+ [Amazon S3](#custom-concept.components.S3)
+ [AWS CloudTrail](#custom-concept.components.CloudTrail)

## VPC
<a name="custom-concept.components.VPC"></a>

与在 Amazon RDS 中一样，RDS Custom 数据库实例驻留在 Virtual Private Cloud（VPC）中。

![\[RDS Custom 数据库实例组件\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/RDS_Custom_instance.png)


RDS Custom 数据库实例包含以下主要组件：
+ Amazon EC2 实例
+ 实例端点
+ Amazon EC2 实例上安装的操作系统
+ Amazon EBS 存储，其中包含任何其他文件系统

## RDS Custom 自动化和监控
<a name="custom-concept.workflow.automation"></a>

RDS Custom 具有在数据库实例之外运行的自动化软件。该软件与数据库实例上的代理以及整个 RDS Custom 环境中的其他组件通信。

RDS Custom 监控和恢复特征提供与 Amazon RDS 类似的功能。预设情况下，RDS Custom 处于完全自动化模式。自动化软件负有以下主要责任：
+ 收集指标并发送通知
+ 执行自动实例恢复

RDS Custom 自动化的一项重要责任是响应 Amazon EC2 实例的问题。由于各种原因，主机可能会受损或无法访问。RDS Custom 可以通过重新启动或替换 Amazon EC2 实例来解决这些问题。

**Topics**
+ [Amazon RDS Custom 主机替换](#custom-troubleshooting.host-problems)
+ [RDS Custom 支持外围](#custom-troubleshooting.support-perimeter)

### Amazon RDS Custom 主机替换
<a name="custom-troubleshooting.host-problems"></a>

如果 Amazon EC2 主机受损，RDS Custom 会尝试重新启动它。如果重新启动失败，RDS Custom 将使用 Amazon EC2 中包含的相同停止和开启特征。更换主机时，客户唯一可见的更改是新的公有 IP 地址。

**Topics**
+ [停止并启动主机。](#custom-troubleshooting.host-problems.replacement.stop-start)
+ [主机更换的影响](#custom-troubleshooting.host-problems.replacement.host-state)
+ [Amazon EC2 主机的最佳实践](#custom-troubleshooting.host-problems.best-practices)

#### 停止并启动主机。
<a name="custom-troubleshooting.host-problems.replacement.stop-start"></a>

RDS Custom 会自动执行以下步骤，无需用户干预：

1. 停止 Amazon EC2 主机。

   EC2 实例将正常关闭并停止运行。所有 Amazon EBS 卷保持连接至实例，而且其数据将保留下来。存储在实例存储卷（RDS Custom 上不支持）或主机 RAM 中的所有数据都将不复存在。

   有关更多信息，请参阅 *Amazon EC2 用户指南*中的[停止和启动您的实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html)。

1. 启动 Amazon EC2 主机。

   EC2 实例将迁移到新的底层主机硬件。在某些情况下，RDS Custom 数据库实例将仍保留在原始主机上。

#### 主机更换的影响
<a name="custom-troubleshooting.host-problems.replacement.host-state"></a>

在 RDS Custom 中，您可以完全控制根设备卷和 Amazon EBS 存储卷。根卷可能包含您不想丢失的重要数据和配置。

RDS Custom for Oracle 会在操作后保留所有数据库和客户数据，包括根卷数据。无需用户干预。在 RDS Custom for SQL Server 上，数据库数据将会保留，但 `C:` 盘上的所有数据（包括操作系统和客户数据）都将丢失。

在完成主机替换过程之后，Amazon EC2 主机将拥有一个新的公有 IP 地址。新主机将保留下表中所示的数据和元数据。


| 元数据或数据 | RDS Custom for Oracle 保留 | RDS Custom for SQL Server 保留 | 
| --- | --- | --- | 
| EC2 实例 ID | 是 | 否 | 
| EC2 实例元数据 | 支持 | 是 | 
| 数据存储卷数据 | 支持 | 是 | 
| 根卷数据 | 是 | 否 | 
| 私有 IP 地址 | 支持 | 是 | 
| 弹性 IP 地址 | 支持 | 是 | 

#### Amazon EC2 主机的最佳实践
<a name="custom-troubleshooting.host-problems.best-practices"></a>

Amazon EC2 主机更换特征涵盖了大多数 Amazon EC2 受损情况。我们建议您遵循以下最佳实践：
+ 在更改配置或操作系统之前，请备份数据。如果根卷或操作系统受到损坏，那么主机更换将无法修复这一问题。您唯一的选择是从数据库快照还原或采用时间点恢复。
+ 不要手动停止或终止物理 Amazon EC2 主机。这两种操作都会导致实例被置于 RDS Custom 支持外围之外。
+ (RDS Custom for SQL Server) 如果您将其他卷附加到 Amazon EC2 主机，请将其配置为在重新启动时重新装载。如果主机受损，RDS Custom 可能会自动停止和开启主机。

### RDS Custom 支持外围
<a name="custom-troubleshooting.support-perimeter"></a>

RDS Custom 提供了名为*支持外围*的额外监控功能。这项额外的监控功能可确保您的 RDS Custom 数据库实例使用受支持的 AWS 基础设施、操作系统和数据库。

支持外围检查您的数据库实例是否符合[修复 RDS Custom for Oracle 中不支持的配置](custom-troubleshooting.md#custom-troubleshooting.fix-unsupported)和[修复 RDS Custom for SQL Server 中不支持的配置](custom-troubleshooting-sqlserver.md#custom-troubleshooting-sqlserver.fix-unsupported)中列出的要求。如果其中的任何要求未得到满足，则 RDS Custom 会认为数据库实例位于支持外围之外。

**Topics**
+ [RDS Custom 不支持的配置](#custom-concept.support-perimeter.unsupported-config)
+ [对不支持的配置进行故障排除](#custom-concept.support-perimeter.fix-unsupported-config)

#### RDS Custom 不支持的配置
<a name="custom-concept.support-perimeter.unsupported-config"></a>

当您的数据库实例在支持外围之外时，RDS Custom 会将数据库实例状态更改为 `unsupported-configuration` 并发送事件通知。修复配置问题后，RDS Custom 会将数据库实例状态更改回 `available`。

当数据库实例处于 `unsupported-configuration` 状态时，会出现如下情况：
+ 您的数据库可供访问。一种例外情况是当数据库实例处于 `unsupported-configuration` 时，因为数据库正在意外关闭。
+ 您无法修改数据库实例。
+ 您将无法生成数据库快照。
+ 不会创建自动备份。
+ 仅限 RDS Custom for SQL Server 数据库实例，如果底层 Amazon EC2 实例受损，RDS Custom 不会替换该实例。有关主机替换的更多信息，请参阅[Amazon RDS Custom 主机替换](#custom-troubleshooting.host-problems)。
+ 您可以删除数据库实例，但大多数其他 RDS Custom API 操作都不可用。
+ 通过归档重做日志文件并将其上传到 Amazon S3，RDS Custom 可继续支持时间点故障恢复（PITR）。`unsupported-configuration` 状态下的 PITR 在以下方面有所不同：
  + PITR 可能需要花费较长时间，才能完全还原为新的 RDS Custom 数据库实例。发生这种情况，是因为当实例处于 `unsupported-configuration` 状态时，您不能自动或手动生成快照。
  + 在实例进入 `unsupported-configuration` 状态前，PITR 必须从最近生成的快照开始重播更多重做日志。
  + 在某些情况下，数据库实例处于 `unsupported-configuration` 状态，因为您所做的更改阻止了上传归档的重做日志文件。示例包括停止 EC2 实例、停止 RDS Custom 代理和分离 EBS 卷。在此类情况下，PITR 无法将数据库实例恢复到最近的可还原时间点。

#### 对不支持的配置进行故障排除
<a name="custom-concept.support-perimeter.fix-unsupported-config"></a>

RDS Custom 为 `unsupported-configuration` 状态提供故障排除指南。虽然有些指南同时适用于 RDS Custom for Oracle 和 RDS Custom for SQL Server，但其他指南取决于您的数据库引擎。有关特定于引擎的故障排除信息，请参阅以下主题：
+ [修复 RDS Custom for Oracle 中不支持的配置](custom-troubleshooting.md#custom-troubleshooting.fix-unsupported)
+ [修复 RDS Custom for SQL Server 中不支持的配置](custom-troubleshooting-sqlserver.md#custom-troubleshooting-sqlserver.fix-unsupported)

## Amazon S3
<a name="custom-concept.components.S3"></a>

如果您使用 RDS Custom for Oracle，可以将安装媒体上传到用户创建的 Amazon S3 存储桶。RDS Custom for Oracle 使用此存储桶中的媒体创建自定义引擎版本 (CEV)。*CEV* 是数据库版本和 Amazon Machine Image (AMI) 的二进制卷快照。您可以从 CEV 中创建 RDS Custom 数据库实例。有关更多信息，请参阅 [使用 Amazon RDS Custom for Oracle 的自定义引擎版本](custom-cev.md)。

RDS Custom for Oracle 和 RDS Custom for SQL Server 都会自动创建一个带有字符串 `do-not-delete-rds-custom-` 作为前缀的 Amazon S3 存储桶。RDS Custom 使用 `do-not-delete-rds-custom-` S3 存储桶存储以下类型的文件：
+ AWS CloudTrailRDS Custom 创建的跟踪记录的 日志
+ 支持外围构件（请参阅[RDS Custom 支持外围](#custom-troubleshooting.support-perimeter)）
+ 数据库恢复日志文件（仅 RDS Custom for Oracle）
+ 事务日志（仅 RDS Custom for SQL Server）
+ Custom 引擎版本构件（仅 RDS Custom for Oracle）

当您创建以下任一资源时，RDS Custom 会创建 `do-not-delete-rds-custom-` S3 存储桶：
+ 您的第一个适用于 RDS Custom for Oracle 的 CEV
+ 您的第一个适用于 RDS Custom for SQL Server 的数据库实例

RDS Custom 可为以下各项的每个组合创建一个存储桶：
+ AWS 账户 ID
+ 引擎类型（RDS Custom for Oracle 或 RDS Custom for SQL Server）
+ AWS 区域

例如，如果您在单个 AWS 区域中创建 RDS Custom for Oracle CEV，需要存在一个 `do-not-delete-rds-custom-` 存储桶。如果您创建多个 DS Custom for SQL Server 实例，并且它们驻留在不同的 AWS 区域中，需要每个 AWS 区域存在一个 `do-not-delete-rds-custom-` 存储桶。如果您在一个 AWS 区域中创建一个 RDS Custom for Oracle 实例和两个 RDS Custom for SQL Server 实例，需要存在两个 `do-not-delete-rds-custom-` 存储桶。

## AWS CloudTrail
<a name="custom-concept.components.CloudTrail"></a>

RDS Custom 会自动创建名称以 `do-not-delete-rds-custom-` 开头的 AWS CloudTrail 跟踪记录。RDS Custom 支持外围依赖于来自 CloudTrail 的事件来确定您的操作是否影响 RDS Custom 自动化。有关更多信息，请参阅 [对不支持的配置进行故障排除](#custom-concept.support-perimeter.fix-unsupported-config)。

RDS Custom 会在您创建第一个数据库实例时创建跟踪记录。RDS Custom 会为以下各项的每个组合创建一条跟踪记录：
+ AWS 账户 ID
+ 引擎类型（RDS Custom for Oracle 或 RDS Custom for SQL Server）
+ AWS 区域

当您删除 RDS Custom 数据库实例时，不会自动删除此实例的 CloudTrail。在这种情况下，您的 AWS 账户继续为未删除的 CloudTrail 计费。RDS Custom 不负责删除此资源。要了解如何手动删除 CloudTrail，请参阅《AWS CloudTrail 用户指南》**中的[删除跟踪](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-delete-trails-console.html)。