描述複寫和邏輯解碼
wal_level 參數可讓您定義要寫入記錄的資訊數量。 您有兩個選項:LOGICAL 或 REPLICA。 REPLICA 是預設值。 當伺服器啟動時,會設定此參數。
高可用性
高可用性是一項適用於 PostgreSQL 的 Azure 資料庫服務,可在即時伺服器發生失敗時,提供準備接管的待命伺服器。 適用於 PostgreSQL 之 Azure 資料庫彈性伺服器的高可用性,使用複寫來自動更新待命伺服器並變更資料。
當您為適用於 PostgreSQL 之 Azure 資料庫彈性伺服器設定高可用性時,會將主要伺服器放在一個可用性區域中,並在另一個可用性區域中建立待命伺服器。 資料會使用 PostgreSQL 串流複寫,以同步模式從主要伺服器複寫到待命伺服器。
每個可用性區域都包含一或多個資料中心。 可用性區域有自己的電源供應器、冷卻系統、網路基礎結構等,因此可彼此獨立。 資料檔案和預寫記錄 (WAL) 檔案的三個複本會儲存在每個可用性區域內的本地備援儲存體上,以提供主要伺服器與待命伺服器之間的實體隔離。 如果其中一個可用性區域失敗,其他兩個可能會持續運作。 區域 (Region) 內的可用性區域 (Zone) 是透過快速光纖網路連線,來回行程延遲不到 2 毫秒。
注意
並非所有區域 (Region) 都有可用性區域 (Zone)。
透過高可用性,資料會在資料庫使用期間持續複製,以提供原始檔案的最新複本。 如果當機,則可以使用複本來取代原始檔案。 複寫涉及主要伺服器和待命伺服器。 主要伺服器會將 WAL 記錄檔傳送至待命伺服器,以接收 WAL 記錄檔。
待命伺服器會回報資訊給主要伺服器,包含其寫入的最後一個預寫記錄檔,以及排清至磁碟的最後一個位置等。若要定義 WAL 接收者傳回報告的最小頻率,請設定 wal_receiver_status_interval 參數。 max_replication_slots 參數定義伺服器可支援的複寫位置數目上限。 當 wal_level 設定為 REPLICA 時,max_replication_slots 必須至少為一,但允許的值範圍介於 0 到 262,143 之間。
max_wal_senders 參數會設定 WAL 傳送者處理序數目上限。
您可以監視主要伺服器和待命伺服器,並採取適當的動作來補救問題,包括觸發容錯移轉至待命伺服器。 以下列出區域備援高可用性狀態:
- 正在初始化 - 正在建立新的待命伺服器。
- 正在複寫 - 資料複寫處於穩定狀態且狀況良好。
- 良好 - 主要正在更新待命。
- 正在容錯移轉 - 主要資料庫伺服器正在容錯移轉至待命。
- 正在移除待命 - 正在刪除待命伺服器。
- 未啟用 - 區域備援高可用性未啟用。
您可以為現有的資料庫伺服器增加高可用性。 如果您要在即時伺服器上啟用或停用高可用性,請在活動很少時執行作業。
從 Azure 入口網站:
- 瀏覽至適用於 PostgreSQL 的 Azure 資料庫伺服器。
- 從 [概觀] 區段,選取您目前的 [設定]。 [計算 + 儲存體] 區段隨即顯示。
- 在 [高可用性] 下,選取 [高可用性 (區域備援)] 核取方塊以啟用高可用性。 可高載層不支援高可用性。
請務必注意,高可用性是災害復原選項。 您無法將待命伺服器用於任何其他用途,例如允許存取唯讀資料庫。 不過,您可以使用發行者和訂閱者模型,設定兩部適用於 PostgreSQL 的 Azure 資料庫伺服器之間的複寫。 此組態會維護兩部伺服器,其中資料會在兩部伺服器之間複寫。 然後,您可以完整存取訂閱者伺服器,並將資料庫用於任何用途。 您可以在本課程模組結尾的練習中練習此設定。
邏輯解碼
邏輯解碼也會使用傳送至預寫記錄檔的資料。 如其名所指,它會解碼預寫記錄檔中的項目,使其容易理解。 所有 INSERT、UPDATE 和 DELETE 變更都可進行邏輯解碼。
邏輯解碼可用於稽核、分析或任何其他您可能感興趣的原因,以了解變更了哪些內容,以及變更時間。
邏輯解碼會從資料庫中的所有資料表擷取變更。 其不同於複寫,因為無法將這些變更傳送至另一個 PostgreSQL 執行個體。 相反地,PostgreSQL 延伸模組會提供輸出外掛程式來串流變更。
邏輯解碼可將預寫記錄檔的內容解碼成容易理解的格式,不需要具備資料庫結構知識就能解讀。 適用於 PostgreSQL 的 Azure 資料庫支援使用適用於 Postgres 的 Azure 資料庫伺服器上安裝的 wal2json 延伸模組進行邏輯解碼。
您可以使用其他延伸模組,例如允許邏輯串流複寫的 pglogical 延伸模組。
若要使用邏輯解碼,請在 [伺服器參數] 中,進行以下設定:
- 將 wal_level 設定為 LOGICAL
- max_replication_slots = 10
- max_wal_senders = 10
在進行這些變更之後,必須重新啟動伺服器。
若要從 Azure 入口網站使用 pglogical 延伸模組:
- 瀏覽至適用於 PostgreSQL 的 Azure 資料庫伺服器。
- 選取 [伺服器參數],然後搜尋 shared_preload_libraries。 從下拉式清單方塊,選取 [pglogical]。
- 搜尋 azure.extensions。 從下拉式清單方塊,選取 [pglogical]。
- 若要套用變更,請重新啟動伺服器。
您也必須授與系統管理員使用者權限,才能進行複寫:
ALTER ROLE <adminname> WITH REPLICATION;
如需詳細資訊,請參閱 pglogical 延伸模組線上文件。
邏輯解碼會將資料變更輸出為資料流,稱為邏輯複寫位置。
- 每個位置都有一個輸出外掛程式,可加以定義。
- 每個位置只提供一個資料庫的變更,但資料庫可以有多個位置。
- 每個資料變更通常會從每個位置發出一次。
- 如果 PostgreSQL 重新啟動,位置可能會重新發出變更,而需要用戶端進行處理。
- 必須監視位置。 未使用的位置會保留所有內含這些未使用變更的 WAL 檔案。 這種情況可能會導致儲存體已滿或交易識別碼換行。