在 Aurora PostgreSQL 全域資料庫中使用寫入轉送 - Amazon Aurora

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

在 Aurora PostgreSQL 全域資料庫中使用寫入轉送

Aurora PostgreSQL 中寫入轉送的區域和版本可用性

Aurora PostgreSQL 15.4 版以上的次要版本,以及 14.9 版以上的次要版本支援寫入轉送。寫入轉送在每個提供 Aurora PostgreSQL 全域資料庫的區域均可使用。

如需 Aurora PostgreSQL 全域資料庫版本和區域可用性的詳細資訊,請參閱 使用 Aurora PostgreSQL 的 Aurora 全域資料庫

在 Aurora 中啟用寫入轉送

根據預設,當您將次要叢集新增至 Aurora 全域資料庫時,不會啟用寫入轉送。您可以在建立次要資料庫叢集時或建立後的任何時間啟用寫入轉送功能。如有需要,您可以稍後停用它。啟用或停用寫入轉送不會造成停機或重新開機。

在主控台中,您可以在建立或修改次要資料庫叢集時啟用寫入轉送。

在建立次要資料庫叢集時啟用或停用寫入轉送

當您建立新的次要資料庫叢集時,您可以選取僅供讀取複本寫入轉送下的開啟全域寫入轉送核取方塊來啟用寫入轉送。或者清除核取方塊以停用它。若要建立次要資料庫叢集,請遵循 建立 Amazon Aurora 資料庫叢集 中的資料庫引擎指示。

下列螢幕擷取畫面顯示已選取開啟全域寫入轉送核取方塊的僅供讀取複本寫入轉送區段。

[僅供讀取複本寫入轉送] 區段,顯示已選取 [開啟全域寫入轉送] 核取方塊。

在修改次要資料庫叢集時啟用或停用寫入轉送

在主控台中,您可以修改次要資料庫叢集以啟用或停用寫入轉送。

使用主控台啟用或停用次要資料庫叢集的寫入轉送
  1. 登入 AWS Management Console 並開啟 Amazon RDS 主控台,網址為 https://console.aws.amazon.com/rds/

  2. 選擇 Databases (資料庫)。

  3. 選擇次要資料庫叢集,然後選擇修改

  4. 僅供讀取複本寫入轉送區段中,勾選或清除開啟全域寫入轉送核取方塊。

  5. 選擇繼續

  6. 排程修改中,選擇立即套用。如果您選擇在下一個排定的維護時段套用,Aurora 會忽略此設定,並立即開啟寫入轉送。

  7. 選擇修改叢集

若要使用啟用寫入轉寄功能 AWS CLI,請使用--enable-global-write-forwarding選項。當您使用create-db-cluster指令建立新的次要叢集時,此選項有效。當您使用modify-db-cluster指令修改現有的次要叢集時,它也可以運作。其要求全域資料庫使用支援寫入轉送的 Aurora 版本。您可以使用 --no-enable-global-write-forwarding 選項搭配這些相同的 CLI 命令來停用寫入轉送。

下列程序說明如何使用 AWS CLI來啟用或停用全域叢集中次要資料庫叢集的寫入轉送。

為現有次要資料庫叢集啟用或停用寫入轉送
  • 呼叫命modify-db-cluster AWS CLI 令並提供下列值:

    • --db-cluster-identifier – 資料庫叢集的名稱。

    • --enable-global-write-forwarding 用來開啟,--no-enable-global-write-forwarding 用來關閉。

    下列範例會啟用資料庫叢集 sample-secondary-db-cluster 的寫入轉送。

    對於LinuxmacOS、或Unix:

    aws rds modify-db-cluster \ --db-cluster-identifier sample-secondary-db-cluster \ --enable-global-write-forwarding

    在 Windows 中:

    aws rds modify-db-cluster ^ --db-cluster-identifier sample-secondary-db-cluster ^ --enable-global-write-forwarding

若要使用 Amazon RDS API 啟用寫入轉送,請將 EnableGlobalWriteForwarding 參數設定為 true。當您使用 CreateDBCluster 操作建立新的次要叢集時,此參數會起作用。當您使用 ModifyDBCluster 操作修改現有的次要叢集時,此選項也會起作用。其要求全域資料庫使用支援寫入轉送的 Aurora 版本。您可以將 EnableGlobalWriteForwarding 參數設定為 false 來停用寫入轉送。

檢查 Aurora PostgreSQL 中的次要叢集是否已啟用寫入轉送

若要判斷是否可以從次要叢集使用寫入轉送,您可以檢查叢集是否具有屬性 "GlobalWriteForwardingStatus": "enabled"

在中 AWS Management Console,您可以在叢集詳細資料頁面的 [組態] 索引標籤Read replica write forwarding上看到。若要查看所有叢集的全域寫入轉送設定狀態,請執行下列 AWS CLI 命令。

次要叢集會顯示值 "enabled""disabled",指出寫入轉送是開啟或關閉。null 值表示該叢集無法使用寫入轉送。此叢集不屬於全域資料庫,或是主要叢集,而是次要叢集。如果寫入轉送處於開啟或關閉的程序中,此值也可以 "enabling""disabling"

範例
aws rds describe-db-clusters --query '*[].{DBClusterIdentifier:DBClusterIdentifier,GlobalWriteForwardingStatus:GlobalWriteForwardingStatus}' [ { "GlobalWriteForwardingStatus": "enabled", "DBClusterIdentifier": "aurora-write-forwarding-test-replica-1" }, { "GlobalWriteForwardingStatus": "disabled", "DBClusterIdentifier": "aurora-write-forwarding-test-replica-2" }, { "GlobalWriteForwardingStatus": null, "DBClusterIdentifier": "non-global-cluster" } ]

若要尋找已啟用全域寫入轉送的次要叢集,請執行下列命令。此命令也會傳回叢集的讀取者端點。當您使用寫入轉送從 Aurora 全域資料庫的次要叢集到主要叢集時,您可以使用次要叢集的讀取者端點。

範例
aws rds describe-db-clusters --query 'DBClusters[].{DBClusterIdentifier:DBClusterIdentifier,GlobalWriteForwardingStatus:GlobalWriteForwardingStatus,ReaderEndpoint:ReaderEndpoint} | [?GlobalWriteForwardingStatus == `enabled`]' [ { "GlobalWriteForwardingStatus": "enabled", "ReaderEndpoint": "aurora-write-forwarding-test-replica-1.cluster-ro-cnpexample.us-west-2.rds.amazonaws.com", "DBClusterIdentifier": "aurora-write-forwarding-test-replica-1" } ]

Aurora PostgreSQL 中的應用程式和 SQL 與寫入轉送的相容性

當您在具有寫入轉送的全域資料庫中使用某些陳述式時,系統不允許使用這些陳述式或這些陳述式可能會產生過時的結果。此外,不支援使用者定義的函數和使用者定義的程序。因此,次要叢集的 EnableGlobalWriteForwarding 設定預設為關閉。在開啟此功能之前,請檢查以確定您的應用程式程式碼不受上述任何限制的影響。

您可以使用以下類型的 SQL 陳述式搭配寫入轉送:

  • 資料操作語言 (DML) 陳述式,例如 INSERTDELETEUPDATE

  • SELECT FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } 陳述式

  • PREPAREEXECUTE 陳述式

  • 包含此清單中陳述式的 EXPLAIN 陳述式

寫入轉送不支援下列 SQL 陳述式類型:

  • 資料定義語言 (DDL) 陳述式

  • ANALYZE

  • CLUSTER

  • COPY

  • 游標 – 不支援游標,因此請務必在使用寫入轉送之前將其關閉。

  • GRANT|REVOKE|REASSIGN OWNED|SECURITY LABEL

  • LOCK

  • SAVEPOINT 陳述式

  • SELECT INTO

  • SET CONSTRAINTS

  • TRUNCATE

  • VACUUM

Aurora PostgreSQL 中寫入轉送的隔離與一致性

在使用寫入轉送的工作階段中,您可以使用 REPEATABLE READREAD COMMITTED 隔離層級。不過,不支援 SERIALIZABLE 隔離層級。

您可以控制次要叢集上的讀取一致性程度。讀取一致性層級會決定次要叢集在每次讀取操作之前的等待時間,以確保從主要叢集複寫部分或全部變更。您可以調整讀取一致性層級,以確保在任何後續查詢之前,您都可以在次要叢集中看見工作階段中的所有轉送寫入操作。您也可以使用此設定,確保次要叢集上的查詢永遠會看到主要叢集的最新更新。即使是由其他工作階段或其他叢集所提交的更新。若要為應用程式指定這種行為類型,請為工作階段層級參數 apg_write_forward.consistency_mode 選擇適當的值。該 apg_write_forward.consistency_mode 參數只會對啟用寫入轉送的次要叢集產生影響。

注意

對於 apg_write_forward.consistency_mode 參數,您可以指定值 SESSIONEVENTUALGLOBALOFF。根據預設,系統會將此值設為 SESSION。將值設定為 OFF 會停用工作階段中的寫入轉送。

當您提高一致性層級時,應用程式會花費更多時間等待變更在區域之間 AWS 傳播。您可以選擇在快速回應時間之間的平衡,並確保在查詢執行之前,在其他位置所做的變更完全可用。

對於每個可用的一致性模式設定,效果如下:

  • SESSION— 次要 AWS 區域中使用寫入轉送的所有查詢都會查看在該工作階段中所做的所有變更的結果。無論交易是否已遞交,這些變更都是可見的。如有必要,查詢會等待轉送寫入操作的結果複寫到目前的區域。其不會等待來自寫入操作的更新結果,這些寫入操作的執行位置位於其他區域或目前區域內其他工作階段。

  • EVENTUAL— 使用寫入轉送的次要 AWS 區域中的查詢可能會看到由於複寫延遲而稍微過時的資料。在主要區域上執行寫入操作並複寫到目前的區域之前,不會顯示相同工作階段中寫入操作的結果。查詢不會等待更新的結果變成可用。因此,它可能會擷取較舊的資料或更新的資料,視陳述式的時間和複寫延遲量而定。

  • GLOBAL— 次要 AWS 區域中的工作階段會看到該工作階段所做的變更。它還可以看到來自主要區域和其他次要 AWS 區 AWS 域的所有已提交的更改。每個查詢可能會等待一段時間,長短取決於工作階段的延遲量。當次要叢集與來自主要叢集的所 up-to-date 有已認可資料 (截至查詢開始的時間為止),查詢會繼續進行。

  • OFF – 已停用工作階段中的寫入轉送。

如需寫入轉送中所含所有參數的詳細資訊,請參閱 Aurora PostgreSQL 中寫入轉送的組態參數

在 Aurora PostgreSQL 中使用寫入轉送執行多部分陳述式

DML 陳述式可能包含多個部分,例如 INSERT ... SELECT 陳述式或 DELETE ... WHERE 陳述式。在這種情況下,系統會將整個陳述式轉送到主要叢集並在該處執行陳述式。

Aurora PostgreSQL 中寫入轉送的組態參數

Aurora 叢集參數群組包含寫入轉送功能的設定。因為這些是叢集參數,所以每個叢集中的所有資料庫執行個體都有這些變數的相同值。下表列出了有關這些參數的詳細資訊,並在表格後面附有使用注意事項。

名稱 範圍 類型 預設值 有效值
apg_write_forward.connect_timeout Session (工作階段) 30 0–2147483647
apg_write_forward.consistency_mode 工作階段 (Session) enum Session (工作階段) SESSION, EVENTUAL, GLOBAL, OFF
apg_write_forward.idle_in_transaction_session_timeout Session (工作階段) 毫秒 86400000 0–2147483647
apg_write_forward.idle_session_timeout Session (工作階段) 毫秒 300000 0–2147483647
apg_write_forward.max_forwarding_connections_percent 全球服務 int 25 1–100

apg_write_forward.max_forwarding_connections_percent 參數是可用於處理從讀取器轉送之查詢的資料庫連線上限。此上限的表示方式是主要叢集中寫入器資料庫執行個體的 max_connections 設定百分比。例如,如果 max_connections800,且 apg_write_forward.max_forwarding_connections_percent10,則寫入器允許最多 80 個同時轉送的工作階段。這些連線來自 max_connections 設定所管理的相同連線集區。當至少一個次要叢集已啟用寫入轉送時,此設定僅適用於主要叢集。

在次要叢集上使用下列設定:

  • apg_write_forward.consistency_mode – 工作階段層級參數,用於控制次要叢集的讀取一致性程度。有效值為 SESSIONEVENTUALGLOBALOFF。根據預設,系統會將此值設為 SESSION。將值設定為 OFF 會停用工作階段中的寫入轉送。若要進一步了解一致性層級,請參閱Aurora PostgreSQL 中寫入轉送的隔離與一致性。此參數僅在啟用寫入轉送之次要叢集的讀取器執行個體中,且該次要叢集位於 Aurora 全域資料庫中才有意義。

  • apg_write_forward.connect_timeout – 次要叢集在放棄與主要叢集建立連線之前等待的秒數上限。值 0 表示無限期等待。

  • apg_write_forward.idle_in_transaction_session_timeout – 主要叢集在關閉連線之前,等待從具有開啟交易之次要叢集轉送的連線上活動的毫秒數。如果在此期間之後工作階段在交易中仍處於閒置狀態,則 Aurora 會終止工作階段。值為 0 會停用逾時。

  • apg_write_forward.idle_session_timeout – 主要叢集在關閉從次要叢集轉送的連線前等待活動的毫秒數。如果工作階段在此期間之後仍處於閒置狀態,則 Aurora 會終止工作階段。值為 0 會停用逾時。

用於寫轉發的 Amazon CloudWatch 指標

當您在一或多個次要叢集上使用寫入轉送時,下列 Amazon CloudWatch 指標適用於主要叢集。這些指標都是在主要叢集中寫入器資料庫執行個體上測量的。

CloudWatch 公制

單位和描述

AuroraForwardingWriterDMLThroughput

計數 (每秒) 此寫入器資料庫執行個體每秒處理的轉送 DML 陳述式數目。

AuroraForwardingWriterOpenSessions

計數。此寫入器資料庫執行個體處理轉送查詢的開啟工作階段數目。

AuroraForwardingWriterTotalSessions

計數。此寫入器資料庫執行個體上轉送的工作階段總數。

下列 CloudWatch 度量適用於每個次要叢集。這些指標的測量是在啟用寫入轉送的次要叢集中,每個讀取器資料庫執行個體上進行。

CloudWatch 公制

單位和描述

AuroraForwardingReplicaCommitThroughput

計數 (每秒) 此複本每秒轉送之工作階段中的遞交數目。

AuroraForwardingReplicaDMLLatency

毫秒。複本上轉送 DML 的平均回應時間 (以毫秒為單位)。

AuroraForwardingReplicaDMLThroughput

計數 (每秒) 每秒在此複本上處理的轉送 DML 陳述式數目。

AuroraForwardingReplicaErrorSessionsLimit

計數。由於達到連線數上限或寫入轉送連線數上限而被主要叢集拒絕的工作階段數目。

AuroraForwardingReplicaOpenSessions

計數。在複本執行個體上使用寫入轉送的工作階段數目。

AuroraForwardingReplicaReadWaitLatency

毫秒。複本等待與主要叢集的 LSN 保持一致的平均等待時間 (毫秒)。讀取器資料庫執行個體等待的程度取決於 apg_write_forward.consistency_mode 設定。如需有關此設定的詳細資訊,請參閱 Aurora PostgreSQL 中寫入轉送的組態參數

Aurora PostgreSQL 中寫入轉送的等待事件

當您搭配 Aurora PostgreSQL 使用寫入轉送時,Amazon Aurora 會產生下列等待事件。

工業電腦:AuroraWriteForwardConnect

次要資料庫叢集上的後端程序正在等待開啟與主要資料庫叢集之寫入器節點的連線時,就會發生 IPC:AuroraWriteForwardConnect 事件。

等待時間增加的可能原因

隨著從次要區域的讀取器節點到主要資料庫叢集之寫入器節點的連線嘗試次數增加,此事件也會增加。

動作

減少從次要節點到主要區域的寫入器節點的同時連線數目。

工業電腦:AuroraWriteForwardConsistencyPoint

IPC:AuroraWriteForwardConsistencyPoint 事件描述來自次要資料庫叢集上節點的查詢將等待轉送的寫入操作的結果複寫到目前區域的時間。只有在工作階段層級參數 apg_write_forward.consistency_mode 設定為下列其中一項時,才會產生此事件:

  • SESSION – 次要節點上的查詢會等待該工作階段中所做之所有變更的結果。

  • GLOBAL – 次要節點上的查詢會等待該工作階段所做的變更結果,以及來自全域叢集中主要區域和其他次要區域的所有已遞交變更。

如需有關 apg_write_forward.consistency_mode 參數設定的資訊,請參閱 Aurora PostgreSQL 中寫入轉送的組態參數

等待時間增加的可能原因

等待時間較長的常見原因如下:

  • 根據 Amazon CloudWatch ReplicaLag 指標衡量的複本延遲增加。如需此指標的詳細資訊,請參閱 監控 Aurora PostgreSQL 複寫

  • 主要區域寫入器節點或次要節點上的負載增加。

動作

請根據應用程式的需求變更一致性模式。

工業電腦:AuroraWriteForwardExecute

當次要資料庫叢集上的後端程序正在等待轉送的查詢完成,並從主要資料庫叢集的寫入器節點取得結果時,就會發生 IPC:AuroraWriteForwardExecute 事件。

等待時間增加的可能原因

等待時間增加的常見原因包括:

  • 從主要區域的寫入器節點擷取大量的行。

  • 次要節點與主要區域寫入器節點之間的網路延遲增加,會增加次要節點從寫入器節點接收資料所花費的時間。

  • 次要節點上的負載增加,可能會延遲從次要節點到主要區域寫入器節點之查詢要求的傳輸。

  • 主要區域寫入器節點的負載增加,可能會延遲將資料從寫入器節點傳輸至次要節點。

動作

根據等待事件的原因,我們會建議不同的動作。

  • 最佳化查詢以僅擷取必要的資料。

  • 將資料處理語言 (DML) 操作最佳化,以僅修改必要的資料。

  • 如果次要節點或主要區域的寫入器節點受到 CPU 或網路頻寬的限制,請考慮將其變更為具有更多 CPU 容量或更多網路頻寬的執行個體類型。

工業電腦:AuroraWriteForwardGetGlobalConsistencyPoint

當次要資料庫叢集上使用全域一致性模式的後端程序在執行查詢之前等待從寫入器節點取得全域一致性點時,就會發生 IPC:AuroraWriteForwardGetGlobalConsistencyPoint 事件。

等待時間增加的可能原因

等待時間增加的常見原因包括:

  • 次要節點與主要區域寫入器節點之間的網路延遲增加,會增加次要節點從寫入器節點接收資料所花費的時間。

  • 次要節點上的負載增加,可能會延遲從次要節點到主要區域寫入器節點之查詢要求的傳輸。

  • 主要區域寫入器節點的負載增加,可能會延遲將資料從寫入器節點傳輸至次要節點。

動作

根據等待事件的原因,我們會建議不同的動作。

  • 請根據應用程式的需求變更一致性模式。

  • 如果次要節點或主要區域的寫入器節點受到 CPU 或網路頻寬的限制,請考慮將其變更為具有更多 CPU 容量或更多網路頻寬的執行個體類型。

工業電腦:AuroraWriteForwardXactAbort

次要資料庫叢集上的後端程序正在等待遠端清除查詢的結果時,就會發生 IPC:AuroraWriteForwardXactAbort 事件。在中止寫入轉送的交易之後,會發出清除查詢以將程序返回到適當的狀態。Amazon Aurora 執行這些操作可能是因為發現錯誤,也可能是因為使用者發出了明確的 ABORT 命令或取消了正在執行的查詢。

等待時間增加的可能原因

等待時間增加的常見原因包括:

  • 次要節點與主要區域寫入器節點之間的網路延遲增加,會增加次要節點從寫入器節點接收資料所花費的時間。

  • 次要節點上的負載增加,可能會延遲從次要節點到主要區域寫入器節點之清除查詢要求的傳輸。

  • 主要區域寫入器節點的負載增加,可能會延遲將資料從寫入器節點傳輸至次要節點。

動作

根據等待事件的原因,我們會建議不同的動作。

  • 調查中止交易的原因。

  • 如果次要節點或主要區域的寫入器節點受到 CPU 或網路頻寬的限制,請考慮將其變更為具有更多 CPU 容量或更多網路頻寬的執行個體類型。

工業電腦:AuroraWriteForwardXactCommit

當次要資料庫叢集上的後端程序正在等待轉送的 commit 交易命令的結果時,就會發生 IPC:AuroraWriteForwardXactCommit 事件。

等待時間增加的可能原因

等待時間增加的常見原因包括:

  • 次要節點與主要區域寫入器節點之間的網路延遲增加,會增加次要節點從寫入器節點接收資料所花費的時間。

  • 次要節點上的負載增加,可能會延遲從次要節點到主要區域寫入器節點之查詢要求的傳輸。

  • 主要區域寫入器節點的負載增加,可能會延遲將資料從寫入器節點傳輸至次要節點。

動作

如果次要節點或主要區域的寫入器節點受到 CPU 或網路頻寬的限制,請考慮將其變更為具有更多 CPU 容量或更多網路頻寬的執行個體類型。

工業電腦:AuroraWriteForwardXactStart

當次要資料庫叢集上的後端程序正在等待轉送的 start 交易命令的結果時,就會發生 IPC:AuroraWriteForwardXactStart 事件。

等待時間增加的可能原因

等待時間增加的常見原因包括:

  • 次要節點與主要區域寫入器節點之間的網路延遲增加,會增加次要節點從寫入器節點接收資料所花費的時間。

  • 次要節點上的負載增加,可能會延遲從次要節點到主要區域寫入器節點之查詢要求的傳輸。

  • 主要區域寫入器節點的負載增加,可能會延遲將資料從寫入器節點傳輸至次要節點。

動作

如果次要節點或主要區域的寫入器節點受到 CPU 或網路頻寬的限制,請考慮將其變更為具有更多 CPU 容量或更多網路頻寬的執行個體類型。