邏輯複寫 - AWS 方案指引

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

邏輯複寫

邏輯複寫是一種方法,可根據物件的複寫身分及其變更來複寫資料物件及其變更。邏輯複寫使用發佈訂閱模型,其中一或多個訂閱者訂閱發佈者節點上的一或多個發佈。訂閱者會從訂閱的出版物中提取資料。

邏輯複寫可讓您精細控制資料複寫和安全性。您可以在下列使用案例中使用邏輯複寫:

  • 在 PostgreSQL 的不同主要版本之間複寫

  • 在不同平台上的 PostgreSQL 執行個體之間複寫 (例如 Linux 到 Windows)

架構

下列工作流程步驟顯示邏輯複寫架構的運作方式:

  1. 您拍攝發佈者資料庫上的資料的快照,並將該資料複製到訂閱者資料庫。

  2. 發佈者資料庫中的變更會即時傳送給訂閱者。

  3. 訂閱者會以與發佈者相同的順序套用資料,以確保單一訂閱內出版物的交易一致性。

可以在主要執行個體 (發佈者) 上定義發佈。發佈是從資料表或一組資料表產生的一組變更。您可以從 INSERT、UPDATE、DELETE 和 TRUNCATE 操作的組合中選擇變更。根據預設,所有這些變更都會複寫到訂閱者資料庫。這與實體複寫相反,其中確切的區塊地址用於byte-by-byte複寫。

發佈的資料表必須設定 aREPLICA IDENTITY 以複寫 UPDATE 和 DELETE 操作,以便在訂閱者端識別要更新或刪除的適當資料列。在大多數情況下,複本身分是由主索引鍵或唯一索引鍵決定。如果主索引鍵不存在且您無法建立,則您可以將複本身分設定為 full。這表示整列都會成為金鑰。我們建議您將複本身分設定為full最後一個補充,因為此設定效率不佳。

Asubscription 是邏輯複寫的下游端。定義訂閱的節點稱為訂閱者。訂閱會定義與另一個資料庫的連線,以及想要訂閱的一組出版物 (一或多個)。

組態設定

發佈者設定需要下列組態:

  • wal_level 設定為 logical

  • max_replication_slots 設定為至少容納預期連接的訂閱數量,以及一些預留位置以進行資料表同步。

  • max_wal_senders 設定為 以容納max_replication_slots您的實體複本數目。

訂閱者設定需要下列組態:

  • 設定 max_replication_slots 以容納您計劃新增至訂閱用戶的最少訂閱數量,以及一些預留訂閱以進行資料表同步。

  • 設定 max_logical_replication_workers 以容納至少訂閱數量和一些預留工作者進行資料表同步。

  • max_worker_processes 將至少 設定為 (max_logical_replication_workers +1)。

每個訂閱會透過一個複寫槽接收變更。

下列步驟說明如何執行邏輯複寫:

  1. 針對來源資料庫中的一組資料表 (將是複寫的一部分),使用 CREATE PUBLICATION 命令來建立發佈者。

  2. 使用 CREATE SUBSCRIPTION 命令建立訂閱者,然後在建立訂閱者時提供發佈詳細資訊。

  3. 初始資料載入會自動從來源資料庫開始到目標資料庫。

  4. 複寫槽擷取的變更資料會複寫至目標資料庫。

  5. 使用 pg_stat_replication (目錄資料表) 檢查複寫的狀態。使用 pg_stat_replication_slots 檢查複寫槽。

如需詳細資訊,請參閱 AWS 資料庫部落格中的使用邏輯複寫將受管 Amazon RDS for PostgreSQL 和 Amazon Aurora 複寫至自我管理 PostgreSQL 文章。

限制

建議您在開始遷移之前,考慮邏輯複寫方法的下列限制:

  • 邏輯複寫目前具有最多的限制和功能差距。

  • 邏輯複寫無法複寫資料定義語言 (DDL)、序列和大型物件操作。截斷動作 (適用於具有外部索引鍵的資料表) 必須在相同的訂閱中包含相關資料表。

如需邏輯複寫限制的詳細資訊,請參閱 31.6。PostgreSQL 文件中的限制