

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon RDS 的多可用區域資料庫叢集部署
<a name="multi-az-db-clusters-concepts"></a>

*多可用區域資料庫叢集部署*是 Amazon RDS 的半同步、高可用性部署模式，具有兩個可讀取複本資料庫執行個體。多可用區域資料庫叢集具有寫入器資料庫執行個體和兩個讀取器資料庫執行個體，位於相同 AWS 區域中的三個個別可用區域中。多可用區域資料庫叢集相較於多可用區域資料庫執行個體部署，可提供高可用性、增加讀取工作負載的容量，以及降低寫入延遲。

您可以遵循[以較短的停機時間將資料匯入至 Amazon RDS for MySQL 資料庫](mysql-importing-data-reduced-downtime.md)中的指示，將資料從內部部署資料庫匯入至多可用區域資料庫叢集。

您可以為多可用區域資料庫叢集購買預留資料庫執行個體。如需詳細資訊，請參閱[多可用區域資料庫叢集的預留資料庫執行個體](USER_WorkingWithReservedDBInstances.md#USER_WorkingWithReservedDBInstances.MultiAZDBClusters)。

功能可用性和支援會因每個資料庫引擎的特定版本以及 AWS 區域而有所不同。如需 Amazon RDS 搭配多個可用區域資料庫叢集的版本和可用性的詳細資訊，請參閱 [Amazon RDS 中的多可用區域資料庫叢集的支援區域和資料庫引擎。](Concepts.RDS_Fea_Regions_DB-eng.Feature.MultiAZDBClusters.md)。

**Topics**
+ [多可用區域資料庫叢集的執行個體類別可用性](#multi-az-db-clusters-concepts.InstanceAvailability)
+ [多可用區域資料庫叢集架構](#multi-az-db-clusters-concepts-overview)
+ [多可用區域資料庫叢集的參數群組](#multi-az-db-clusters-concepts-parameter-groups)
+ [RDS Proxy 搭配多可用區資料庫叢集](#multi-az-db-clusters-proxy)
+ [複本延遲和多可用區域資料庫叢集](#multi-az-db-clusters-concepts-replica-lag)
+ [多可用區域資料庫叢集快照](#multi-az-db-clusters-concepts-snapshot)
+ [為 Amazon RDS 建立多可用區域資料庫叢集](create-multi-az-db-cluster.md)
+ [連線至 Amazon RDS 的多可用區域資料庫叢集](multi-az-db-clusters-concepts-connection-management.md)
+ [自動連接 Amazon RDS 的 AWS 運算資源和多可用區域資料庫叢集](multi-az-compute-rds-connect.md)
+ [使用 Amazon RDS 修改多可用區域資料庫叢集](modify-multi-az-db-cluster.md)
+ [升級 Amazon RDS 多可用區域資料庫叢集的引擎版本](multi-az-db-clusters-upgrading.md)
+ [為 Amazon RDS 重新命名多可用區域資料庫叢集](multi-az-db-cluster-rename.md)
+ [重新啟動 Amazon RDS 的多可用區域資料庫叢集和讀取器資料庫執行個體](multi-az-db-clusters-concepts-rebooting.md)
+ [容錯移轉 Amazon RDS 的多可用區域資料庫叢集](multi-az-db-clusters-concepts-failover.md)
+ [為 Amazon RDS 的多可用區域資料庫叢集設定 PostgreSQL 邏輯複寫](USER_MultiAZDBCluster_LogicalRepl.md)
+ [對 Amazon RDS 使用多可用區域資料庫叢集僅供讀取複本](USER_MultiAZDBCluster_ReadRepl.md)
+ [從 Amazon RDS 的多可用區域資料庫叢集設定外部複寫](multi-az-db-clusters-external-replication.md)
+ [刪除 Amazon RDS 的多可用區域資料庫叢集](USER_DeleteMultiAZDBCluster.Deleting.md)
+ [Amazon RDS 的多可用區域資料庫叢集的限制](multi-az-db-clusters-concepts.Limitations.md)

**重要**  
多可用區域資料庫叢集與 Aurora 資料庫叢集不同。如需 Aurora​ 資料庫叢集的詳細資訊，請參閱《[Amazon Aurora​ 使用者指南](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)》。

## 多可用區域資料庫叢集的執行個體類別可用性
<a name="multi-az-db-clusters-concepts.InstanceAvailability"></a>

下列資料庫執行個體類別支援多可用區資料庫叢集部署：`db.m5d`、`db.m6gd`、`db.m6id`、`db.m6idn`、`db.r5d`、`db.r6gd`、`db.x2iedn`、`db.r6id` 和 `db.r6idn`，以及 `db.c6gd`。

**注意**  
c6gd 執行個體類別是唯一支援 `medium` 執行個體大小的類別。

如需資料庫執行個體類別的詳細資訊，請參閱 [ 資料庫執行個體類別](Concepts.DBInstanceClass.md)。

## 多可用區域資料庫叢集架構
<a name="multi-az-db-clusters-concepts-overview"></a>

有了多可用區域資料庫叢集，Amazon RDS 會使用資料庫引擎的原生複寫功能，將寫入器資料庫執行個體的資料複寫到兩個讀取器資料庫執行個體。對寫入器資料庫執行個體進行變更時，會將它傳送至每個讀取器資料庫執行個體。

多可用區域資料庫叢集部署使用半同步複寫，需要至少一個讀取器資料庫執行個體的確認才能遞交變更。它不需要確認事件已在*所有*複本上完全執行並遞交。

讀取器資料庫執行個體做為自動容錯移轉目標，並提供讀取流量，以增加應用程式讀取輸送量。如果您的寫入器資料庫執行個體發生服務中斷，RDS 會管理容錯移轉到其中一個讀取器資料庫執行個體。RDS 會根據哪個讀取器資料庫執行個體有最近的變更記錄來執行此作業。

下圖顯示多可用區域資料庫叢集。

![\[多可用區域資料庫叢集\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/multi-az-db-cluster.png)


與多可用區域資料庫執行個體部署相比，多可用區域資料庫叢集通常具有較低的寫入延遲。此外也允許在讀取器資料庫執行個體上執行唯讀工作負載。RDS 主控台會顯示寫入器資料庫執行個體的可用區域和讀取器資料庫執行個體的可用區域。您也可以使用 [describe-db-clusters](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html) CLI 命令或 [DescribeDBClusters](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBClusters.html) API 操作來尋找此資訊。

**重要**  
為了防止 RDS for MySQL 多可用區域資料庫叢集發生複寫錯誤，強烈建議所有資料表都具有主索引鍵。

## 多可用區域資料庫叢集的參數群組
<a name="multi-az-db-clusters-concepts-parameter-groups"></a>

在多可用區域資料庫叢集中，*資料庫叢集參數群組*做為引擎組態值的容器，這些值會套用到多可用區域資料庫叢集的每個資料庫執行個體。

在多可用區域資料庫叢集中，*DB parameter group (資料庫參數群組)* 會設定為資料庫引擎和資料庫引擎版本的預設資料庫參數群組。資料庫叢集參數群組中的設定用於叢集中的所有資料庫執行個體。

如需參數群組的詳細資訊，請參閱 [使用多可用區域資料庫叢集的資料庫叢集參數群組](USER_WorkingWithDBClusterParamGroups.md)。

## RDS Proxy 搭配多可用區資料庫叢集
<a name="multi-az-db-clusters-proxy"></a>

您可以使用 Amazon RDS Proxy 為多可用區域資料庫叢集建立 Proxy。透過使用 RDS Proxy，您的應用程式可以集中及共用資料庫連線，以改善其擴展能力。每個 Proxy 會執行連線*多工*，又稱為連線重用。RDS Proxy 運用「多工」，使用一個基礎資料庫連線執行一筆交易的所有操作。RDS Proxy 也可以將多可用區域資料庫叢集次要版本升級的停機時間縮短至一秒或更短。如需有關 RDS Proxy 優勢的詳細資訊，請參閱 [Amazon RDS Proxy ](rds-proxy.md)。

若要為多可用區資料庫叢集設定 Proxy，請在建立叢集時選擇**建立 RDS Proxy**。如需建立和管理 RDS Proxy 端點的指示，請參閱 [使用 Amazon RDS Proxy 端點](rds-proxy-endpoints.md)。

## 複本延遲和多可用區域資料庫叢集
<a name="multi-az-db-clusters-concepts-replica-lag"></a>

*複本延遲*指的是寫入器資料庫執行個體上的最新交易，與多可用區域資料庫叢集中讀取器資料庫執行個體上最新套用交易之間的時間差異。Amazon CloudWatch 的指標 `ReplicaLag` 表示這個時間差異。如需 CloudWatch 指標的詳細資訊，請參閱[使用 Amazon CloudWatch 監控 Amazon RDS 指標](monitoring-cloudwatch.md)。

雖然多可用區域資料庫叢集可達到高寫入效能，但由於以引擎為基礎的的複寫性質，複本延遲仍可能出現。任何容錯移轉都必須先解決複本延遲情況，然後才能提升新的寫入器資料庫執行個體，因此監控和管理複本延遲是需考慮的因素。

對於 RDS for MySQL 多可用區域資料庫叢集，容錯移轉時間取決於其餘兩個讀取器資料庫執行個體的複本延遲。兩個讀取器資料庫執行個體必須套用未套用的交易，然後才能將其中一個提升到新的寫入器資料庫執行個體。

對於 RDS for PostgreSQL 多可用區域資料庫叢集，容錯移轉時間取決於其餘兩個讀取器資料庫執行個體的最低複本延遲。具有最低複本延遲的讀取器資料庫執行個體必須套用未套用的交易，然後才能將其提升到新的寫入器資料庫執行個體。

如需介紹如何在複本延遲超過設定時間量時建立 CloudWatch 警示的教學課程，請參閱 [教學課程：為 Amazon RDS 多可用區域資料庫叢集複本延遲建立 Amazon CloudWatch 警示](multi-az-db-cluster-cloudwatch-alarm.md)。

### 複本延遲的常見原因
<a name="multi-az-db-clusters-concepts-replica-lag-causes"></a>

通常，如果寫入工作負載過高，讀取器資料庫執行個體就無法有效套用交易，進而發生複本延遲。多種工作負載可能會發生暫時或連續的複本延遲。以下是一些常見原因的例子：
+ 寫入器資料庫執行個體上進行高寫入並行或大批次更新，導致讀取器資料庫執行個體上的套用程序落後。
+ 繁重的讀取工作負載使用一或多個讀取器資料庫執行個體上的資源。執行緩慢或大型查詢可能會影響套用程序，且可能導致複本延遲。
+ 修改大量資料或 DDL 陳述式的交易有時會導致複本延遲暫時增加，因為資料庫必須保留遞交順序。

### 緩解複本延遲
<a name="multi-az-db-clusters-concepts-replica-lag-mitigating"></a>

針對 RDS for MySQL 和 RDS for PostgreSQL 的多可用區域資料庫叢集，可以藉由減少寫入器資料庫執行個體上的負載來緩解複本延遲情況。您還可以使用流量控制來減少複本延遲。*流量控制*的運作機制是調節寫入器資料庫執行個體上的寫入作業，確保複本延遲不會繼續無限制增長。寫入調節的運作機制是在交易結尾新增延遲，藉此降低寫入器資料庫執行個體的寫入輸送量。雖然流量控制不能保證消除延遲，但可以幫助減少許多工作負載的整體延遲。下列各節提供了有關將流量控制與 RDS for MySQL 和 RDS for PostgreSQL 搭配使用的資訊。

#### 利用流量控制緩解 RDS for MySQL 的複本延遲
<a name="multi-az-db-clusters-concepts-replica-lag-mitigating.mysql"></a>

當您使用 RDS for MySQL 多可用區域資料庫叢集時，預設會使用動態參數 `rpl_semi_sync_master_target_apply_lag` 開啟流量控制。此參數指定您要用於複本延遲的上限。當複本延遲接近此設定限制時，流量控制會調節寫入器資料庫執行個體上的寫入交易，以嘗試將複本延遲控制在指定值以下。在某些情況下，複本延遲可能會超過指定限制。根據預設，此參數設定為 120 秒。若要關閉流量控制，請將此參數設定為其最大值 86,400 秒 (一天)。

若要查看流量控制注入的目前延遲，請執行下列查詢以顯示參數 `Rpl_semi_sync_master_flow_control_current_delay`。

```
SHOW GLOBAL STATUS like '%flow_control%';
```

您的輸出應該類似以下內容：

```
+-------------------------------------------------+-------+
| Variable_name                                   | Value |
+-------------------------------------------------+-------+
| Rpl_semi_sync_master_flow_control_current_delay | 2010  |
+-------------------------------------------------+-------+
1 row in set (0.00 sec)
```

**注意**  
延遲以微秒為單位顯示。

為 RDS for MySQL 多可用區域資料庫叢集開啟 Performance Insights 後，您可以監控與指示查詢由流量控制延遲的 SQL 陳述式對應的等待事件。流量控制引入延遲時，您可以查看與 Performance Insights 儀表板上的 SQL 陳述式對應的等待事件 `/wait/synch/cond/semisync/semi_sync_flow_control_delay_cond`。若要查看這些指標，請確認已開啟 Performance Schema。如需 Performance Insights 的詳細資訊，請參閱 [在 Amazon RDS 上使用績效詳情監控資料庫負載](USER_PerfInsights.md)。

#### 利用流量控制緩解 RDS for PostgreSQL 的複本延遲
<a name="multi-az-db-clusters-concepts-replica-lag-mitigating.postgresql"></a>

在使用 RDS for PostgreSQL 多可用區域資料庫叢集時，流量控制功能會部署為擴充功能。它會為資料庫叢集中的所有資料庫執行個體啟動背景工作者。預設情況下，讀取器資料庫執行個體上的背景工作者，會向寫入器資料庫執行個體上的背景工作者傳達目前的複本延遲情況。如果任何讀取器資料庫執行個體上的延遲超過兩分鐘，寫入器資料庫執行個體上的背景工作者就會在交易結尾新增延遲。若要控制延遲閾值，請使用參數 `flow_control.target_standby_apply_lag`。

流量控制調節 PostgreSQL 程序時，`Extension` 會等待 `pg_stat_activity` 中的事件，而績效詳情會指出此情況。函數 `get_flow_control_stats` 顯示有關目前正在新增多少延遲的詳細資訊。

流量控制有助於大多數線上交易處理 (OLTP) 工作負載，這些工作負載具有短暫但高度並行的交易。如果延遲是由長時間執行的交易 (如批次操作) 引起的，流量控制提供的效益就沒有這麼大。

若要關閉流量控制功能，請從 `shared_preload_libraries` 移除擴充功能並重新啟動資料庫執行個體。

## 多可用區域資料庫叢集快照
<a name="multi-az-db-clusters-concepts-snapshot"></a>

Amazon RDS 會在設定的備份時段建立並儲存多可用區域資料庫叢集的自動備份。RDS 會建立資料庫叢集的儲存體磁碟區快照，因此會備份整個叢集，而不只是個別的執行個體。

您也可以手動備份多可用區域資料庫叢集。針對非常長期的備份，請考慮將快照資料匯出至 Amazon S3。如需詳細資訊，請參閱[為 Amazon RDS 建立多可用區域資料庫叢集快照](USER_CreateMultiAZDBClusterSnapshot.md)。

您可將多可用區域資料庫叢集還原到特定的時間點，從而建立新的多可用區域資料庫叢集。如需說明，請參閱[將多可用區域資料庫叢集還原至指定時間](USER_PIT.MultiAZDBCluster.md)。

或者，您可以將多可用區域資料庫叢集快照還原至單一可用區域部署或多可用區資料庫執行個體部署。如需說明，請參閱[從多可用區域資料庫叢集快照還原至資料庫執行個體](USER_RestoreFromMultiAZDBClusterSnapshot.md)。