多可用區域資料庫叢集部署 - Amazon Relational Database Service

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

多可用區域資料庫叢集部署

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

您可以遵循將資料匯入至 Amazon RDS MariaDB 或 MySQL 資料庫,並減少停機時間中的指示,將資料從內部部署資料庫匯入至多可用區域資料庫叢集。

您可以為多可用區域資料庫叢集購買預留資料庫執行個體。如需詳細資訊,請參閱 多可用區域資料庫叢集的預留資料庫執行個體

功能可用性和支援會因每個資料庫引擎的特定版本以及 AWS 區域而有所不同。如需 Amazon RDS 搭配多個可用區域資料庫叢集的版本和可用性的詳細資訊,請參閱 Amazon 中異地同步備份資料庫叢集支援的區域和資料庫引擎 RDS

重要

多可用區域資料庫叢集與 Aurora 資料庫叢集不同。如需 Aurora​ 資料庫叢集的詳細資訊,請參閱《Amazon Aurora​ 使用者指南》。

異地同步備份資料庫叢集執行個體類別

下列資料庫執行個體類別支援異地同步備份資料庫叢集部署:db.m5ddb.m6gddb.m6iddb.m6idndb.r5ddb.r6gddb.x2iedndb.r6id、、db.r6idn、和db.c6gd

注意

c6gd 實體類別是唯一支援執行個體大小的實體類別。medium

如需資料庫執行個體類別的詳細資訊,請參閱 數據庫實例類

多可用區域資料庫叢集概觀

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

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

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

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

多可用區域資料庫叢集

與多可用區域資料庫執行個體部署相比,多可用區域資料庫叢集通常具有較低的寫入延遲。此外也允許在讀取器資料庫執行個體上執行唯讀工作負載。RDS 主控台會顯示寫入器資料庫執行個體的可用區域和讀取器資料庫執行個體的可用區域。您也可以使用 describe-db-clustersCLI 命令或 Descri beDBClusters API 作業來尋找此資訊。

重要

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

使用管理異地同步備份資料庫叢集 AWS Management Console

您可以使用主控台來管理多可用區域資料庫叢集。

若要使用主控台管理多可用區域資料庫叢集
  1. 登入 AWS Management Console 並開啟 Amazon RDS 主控台,網址為 https://console.aws.amazon.com/rds/

  2. 在導覽窗格中選擇 Databases (資料庫),然後選擇您要管理的多可用區域資料庫叢集。

下圖顯示主控台中的多可用區域資料庫叢集。

異地同步備份資料庫叢集 AWS Management Console

Actions (動作) (動作) 功能表中可用的動作取決於已選取多可用區域資料庫叢集或已選取叢集中的資料庫執行個體。

選擇多可用區域資料庫叢集以檢視叢集詳細資料,並在叢集層級執行動作。

異地同步備份資料庫叢集動作 AWS Management Console

在多可用區域資料庫叢集中選擇資料庫執行個體,以檢視資料庫執行個體詳細資料並在資料庫執行個體層級執行動作。

異地同步備份資料庫叢集中的資料庫執行個體動作 AWS Management Console

使用多可用區域資料庫叢集的參數群組

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

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

如需參數群組的詳細資訊,請參閱 使用多可用區域資料庫叢集的資料庫叢集參數群組

升級多可用區域資料庫叢集的引擎版本

Amazon RDS 提供每個受支援的資料庫引擎的更新版本,讓您的異地同步備份資料庫叢集保持最新狀態。Amazon RDS 支援新版的資料庫引擎時,您可以選擇如何和何時升級多可用區域資料庫叢集。

您可以執行兩種升級:

主要版本升級

主要引擎版本升級可能會導致與現有應用程式不相容的變更。當您啟動主要版本升級時,Amazon RDS 會同時升級讀取器和寫入器執行個體。因此,在升級完成之前,您的資料庫叢集可能無法使用。

次要版本升級

次要版本升級只包含與現有應用程式回溯相容的變更。當您啟動次要版本升級時,Amazon RDS 會先一次升級一個讀取器資料庫執行個體。然後,其中一個讀取器資料庫執行個體會切換為新的寫入器資料庫執行個體。然後,Amazon RDS 會升級舊的寫入器執行個體 (現在是讀取器執行個體)。

升級期間的停機時間僅限於其中一個讀取器資料庫執行個體成為新寫入器資料庫執行個體所需的時間。此停機時間就像是自動容錯移轉。如需詳細資訊,請參閱 多可用區域資料庫叢集的容錯移轉程序。請注意,異地同步備份資料庫叢集的複本延遲可能會影響停機時間。如需詳細資訊,請參閱 複本延遲和多可用區域資料庫叢集

對於 RDS 異地 PostgreSQL 資料庫叢集僅供讀取複本,Amazon RDS 會一次升級一個叢集成員執行個體。在升級期間,讀取器和寫入器叢集角色不會切換。因此,Amazon RDS 升級叢集寫入器執行個體時,資料庫叢集可能會遇到停機時間。

注意

異地同步備份資料庫叢集次要版本升級的停機時間通常為 35 秒。與 RDS Proxy 搭配使用時,您可以進一步將停機時間減少到一秒或更短的時間。如需詳細資訊,請參閱 使用 Amazon RDS 代理 。或者,您可以使用開放原始碼資料庫代理伺服器 (例如 ProxSQL) 或 MySQL 的 AWS JDBC 驅動程式。PgBouncer

目前,Amazon RDS 僅支援 RDS 異地同步備份資料庫叢集的主要版本升級。Amazon RDS 支援所有支援異地同步備份資料庫叢集的資料庫引擎進行次要版本升級。

Amazon RDS 不會自動升級多可用區域資料庫叢集讀取複本。對於次要版本升級,您必須先手動升級所有僅供讀取複本,然後升級叢集。否則,升級會遭到封鎖。當您執行叢集的主要版本升級時,所有讀取複本的複寫狀態都會變更為已終止。升級完成後,您必須刪除並重新建立讀取複本。如需詳細資訊,請參閱 監控僅供讀取複本

多可用區域資料庫叢集的引擎版本升級程序,與資料庫執行個體引擎版本的升級程序相同。如需說明,請參閱升級資料庫執行個體引擎版本。唯一的區別是,使用 AWS Command Line Interface (AWS CLI) 時,您可以使用指modify-db-cluster令並指定--db-cluster-identifier參數 (連同--allow-major-version-upgrade參數)。

如需有關主要和次要版本升級的詳細資訊,請參閱下列資料庫引擎的文件:

使用 RDS Proxy 搭配多可用區資料庫叢集

您可以使用 Amazon RDS 代理為異地同步備份資料庫叢集建立代理。透過使用 RDS Proxy,您的應用程式可以集區和共用資料庫連線,以改善其擴充能力。每個代理執行連接多工處理,也稱為連接重複使用。RDS Proxy 運用「多工」,使用一個基礎資料庫連線執行一筆交易的所有操作。RDS Proxy 也可以將異地同步備份資料庫叢集次要版本升級的停機時間縮短至一秒或更少。如需有關 RDS Proxy 優勢的詳細資訊,請參閱 使用 Amazon RDS 代理

若要為多可用區資料庫叢集設定 Proxy,請在建立叢集時選擇建立 RDS Proxy。如需建立和管理 RDS Proxy 端點的指示,請參閱 使用 Amazon RDS 代理端點

從異地同步備份資料庫叢集設定外部複

您可以在異地同步備份資料庫叢集和 Amazon RDS 外部的資料庫之間設定複寫。請參閱以下各節中的說明,具體取決於您的數據庫引擎。

RDS for MySQL

若要為 RDS for MySQL 異地同步備份資料庫叢集設定外部複寫,您必須在叢集內的資料庫執行個體上保留二進位記錄檔足夠長的時間,以確保在 Amazon RDS 刪除 binlog 檔案之前將變更套用至複本。若要這麼做,請呼叫mysql.rds_set_configuration預存程序並指定binlog retention hours參數來設定二進位記錄保留。如需詳細資訊,請參閱 binlog 保留 (小時)

的預設值binlog retention hoursNULL,這表示不會保留二進位記錄檔 (0 小時)。如果要為異地同步備份資料庫叢集設定外部複寫,則必須將參數設定為以外的值。NULL

您只能從異地同步備份資料庫叢集的寫入器資料庫執行個體設定二進位記錄保留,而且該設定會以非同步方式傳播至所有讀取器資料庫執行個體。

此外,我們強烈建議您在外部複本上啟用以 GTID 為基礎的複寫。然後,如果其中一個資料庫執行個體失敗,您可以從叢集內另一個運作良好的資料庫執行個體繼續複寫。如需詳細資訊,請參閱 MySQL 文件中的使用全域交易識別碼複寫

RDS for PostgreSQL

若要為 RDS for PostgreSQL 異地同步備份資料庫叢集設定外部複寫,您必須啟用邏輯複寫。如需說明,請參閱搭配多可用區域資料庫叢集使用 PostgreSQL 邏輯複寫

複本延遲和多可用區域資料庫叢集

複本延遲指的是寫入器資料庫執行個體上的最新交易,與多可用區域資料庫叢集中讀取器資料庫執行個體上最新套用交易之間的時間差異。Amazon 指 CloudWatch 標ReplicaLag代表此時差。如需 CloudWatch 測量結果的詳細資訊,請參閱使用 Amazon 監控 RDS 指標 CloudWatch

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

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

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

如需說明如何在複本延遲超過設定時間量時建立 CloudWatch 警示的教學課程,請參閱教學課程:為多可用區域資料庫叢集複本延遲建立 Amazon CloudWatch 警示

複本延遲的常見原因

通常,如果寫入工作負載過高,讀取器資料庫執行個體就無法有效套用交易,進而發生複本延遲。多種工作負載可能會發生暫時或連續的複本延遲。以下是一些常見原因的例子:

  • 寫入器資料庫執行個體上進行高寫入並行或大批次更新,導致讀取器資料庫執行個體上的套用程序落後。

  • 繁重的讀取工作負載使用一或多個讀取器資料庫執行個體上的資源。執行緩慢或大型查詢可能會影響套用程序,且可能導致複本延遲。

  • 修改大量資料或 DDL 陳述式的交易有時會導致複本延遲暫時增加,因為資料庫必須保留遞交順序。

緩解複本延遲

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

利用流量控制緩解 RDS for MySQL 的複本延遲

當您使用 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 的詳細資訊,請參閱 利用 RDSAmazon上的 Performance Insights 來監控資料庫負載

利用流量控制緩解 RDS for PostgreSQL 的複本延遲

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

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

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

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

多可用區域資料庫叢集的容錯移轉程序

如果您的多可用區域資料庫叢集中的寫入器資料庫執行個體發生計劃內或計劃外中斷,Amazon RDS 會自動容錯移轉到不同可用區域中的讀取器資料庫執行個體。完成容錯移轉所需的時間取決於寫入器資料庫執行個體失效時的資料庫活動和其他條件。容錯移轉時間通常低於 35 秒。當兩個讀取器資料庫執行個體都套用來自失敗寫入器的未完成交易時,容錯移轉就會完成。容錯移轉完成後,RDS 控制台使用者界面可能需要多一點時間來反映新的可用區域。

自動容錯移轉

Amazon RDS 會自動處理容錯移轉,因此您可以盡快恢復資料庫操作,而無須人為介入管理。若要容錯移轉,寫入器資料庫執行個體會自動切換至讀取器資料庫執行個體。

手動容錯移多可用區域資料庫叢集

如果您手動容錯移轉異地同步備份資料庫叢集,RDS 會先終止主要資料庫執行個體。然後,內部監控系統會偵測到主要資料庫執行個體運作狀況不佳,並提升可讀取的複本資料庫執行個體。容錯移轉時間通常低於 35 秒。

您可以使用 AWS Management Console、或 RDS API 手動容錯移轉異地同步備份資料庫叢集。 AWS CLI

若要手動容錯移轉多可用區域資料庫叢集
  1. 登入 AWS Management Console 並開啟 Amazon RDS 主控台,網址為 https://console.aws.amazon.com/rds/

  2. 在導覽窗格中,選擇 Databases (資料庫)。

  3. 選擇您要容錯移轉的多可用區域資料庫叢集。

  4. 針對 Actions (動作),選擇 Failover (容錯移轉)。

    便會顯示容錯移轉資料庫叢集頁面

  5. 選擇 Failover (容錯移轉) 以確認手動容錯移轉。

若要手動容錯移轉異地同步備份資料庫叢集,請使用指 AWS CLI 令failover-db-cluster

aws rds failover-db-cluster --db-cluster-identifier mymultiazdbcluster

若要手動容錯移轉多可用區域資料庫叢集,請呼叫 Amazon RDS API FailoverDBCluster 並指定 DBClusterIdentifier

判斷多可用區域資料庫叢集是否已容錯移轉

若要判斷您的多可用區域資料庫叢集是否已容錯移轉,您可以執行下列動作:

  • 設定資料庫事件訂閱,透過電子郵件或 SMS 通知您已啟動容錯移轉。如需事件的詳細資訊,請參閱使用 Amazon RDS 事件通知

  • 使用 Amazon RDS 主控台或 API 操作來檢視資料庫事件。

  • 使用 Amazon RDS 主控台和 RDS API 檢視異地同步備份資料庫叢集的目前狀態。 AWS CLI

有關如何回應容錯移轉、減少恢復時間以及其他 Amazon RDS 最佳實務,詳細資訊請參閱 Amazon 的最佳實踐 RDS

設定 DNS 名稱查詢的 JVM TTL

容錯移轉機制會自動將資料庫執行個體的網域名稱系統 (DNS) 記錄變更為指向讀取器資料庫執行個體。因此,您必須重新建立資料庫執行個體任何現有的連線。在 Java 虛擬機器 (JVM) 環境中,基於 Java DNS 快取機制的運作方式,您可能需要重新配置 JVM 設定。

JVM 會快取 DNS 名稱查詢。當 JVM 將主機名稱解析為 IP 位址時,會將 IP 位址快取一段指定的時間段,稱為 time-to-live(TTL)。

由於 AWS 資源使用偶爾會變更的 DNS 名稱項目,因此建議您將 JVM 設定為不超過 60 秒的 TTL 值。如此可確保當資源的 IP 位址變更時,您的應用程式可以透過重新查詢 DNS 來接收並使用資源的新 IP 位址。

在一些 Java 組態上,則會設定 JVM 預設 TTL,以便其在重新啟動 JVM 之前絕對不會重新整理 DNS 項目。因此,如果 AWS 資源的 IP 位址在應用程式仍在執行時發生變更,則在您手動重新啟動 JVM 並重新整理快取 IP 資訊之前,該資源無法使用該資源。在此情況下,設定 JVM 的 TTL 至為關鍵,以便其定期重新整理其快取的 IP 資訊。

注意

預設 TTL 可能會視 JVM 的版本以及是否已安裝安全管理員而異。許多 JVM 提供的預設 TTL 少於 60 秒。如果您使用此類 JVM (而非安全管理員),則可忽略本主題的其餘內容。如需 Oracle 中安全管理員的詳細資訊,請參閱 Oracle 文件中的安全管理員

若要修改 JVM 的 TTL,請設定 networkaddress.cache.ttl 屬性值。根據您的需求,使用下列其中一種方法:

  • 若要為使用 JVM 的所有應用程式全域設定屬性值,請在 networkaddress.cache.ttl 檔案中設定 $JAVA_HOME/jre/lib/security/java.security

    networkaddress.cache.ttl=60
  • 若要僅針對您的應用程式進行適當的本機設定,請在建立任何網路連線之前,在您應用程式的初始化程式碼中設定 networkaddress.cache.ttl

    java.security.Security.setProperty("networkaddress.cache.ttl" , "60");

異地備份資料庫叢集快照

Amazon RDS 會在設定的備份時段期間建立並儲存異地同步備份資料庫叢集的自動備份。RDS 會建立資料庫叢集的儲存磁碟區快照,備份整個叢集,而不僅備份個別執行個體。

您也可以手動備份異地同步備份資料庫叢集。對於非常長期的備份,請考慮將快照資料匯出到 Amazon S3。如需詳細資訊,請參閱 建立多可用區域資料庫叢集快照

您可將多可用區域資料庫叢集還原到特定的時間點,從而建立新的多可用區域資料庫叢集。如需說明,請參閱將多可用區域資料庫叢集還原至指定時間

或者,您可以將異地同步備份資料庫叢集快照還原到單一可用區部署或異地同步備份資料庫執行個體部署。如需說明,請參閱 從多可用區域資料庫叢集快照還原至資料庫執行個體