適用於 PostgreSQL 的 Azure 資料庫中的讀取複本 - 彈性伺服器

適用範圍:適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器

讀取複本功能可讓您將數據從 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例複寫到唯讀複本。 復本會使用 PostgreSQL 引擎的原生實體復寫技術,以異步方式更新複本。 使用複寫位置的串流複寫是預設作業模式。 必要時,會使用檔案型記錄傳送來趕上。 您可以從主伺服器復寫到最多五個複本。

復本是您管理的新伺服器,類似於一般 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例。 針對每個讀取複本,系統每月會針對在虛擬核心中所佈建的計算量,以及在儲存體中所佈建的容量 (以 GB 為單位) 向您收費。

了解如何建立及管理複本

何時應該使用讀取複本

讀取複本功能可針對需大量讀取的工作負載,協助改善效能及調整能力。 讀取工作負載可隔離至複本,而寫入工作負載可以導向到主要伺服器。 讀取複本也可以部署在不同的區域中,而且如果需要災害復原,可以升階為讀寫伺服器。

典型的案例是讓 BI 和分析工作負載使用讀取複本做為報表的數據源。

由於複本是唯讀狀態,因此不會直接降低主要伺服器上的寫入容量負擔。

考量

讀取複本主要是針對卸除查詢很有説明的案例所設計,而且可管理稍微延遲的情況。 它們經過優化,可為大部分工作負載提供來自主要工作負載的近乎即時更新,使其成為大量讀取案例的絕佳解決方案。 不過,請務必注意,它們不適用於需要最新數據精確度的同步復寫案例。 雖然複本上的數據最終會與主要複本保持一致,但可能會有延遲,通常範圍從幾秒到數分鐘,而在某些繁重的工作負載或高延遲案例中,此延遲可能會延長到數小時。 一般而言,與主要復本相同的區域中讀取複本的延隔時間比異地復本少,因為後者通常會處理地理距離引發的延遲。 如需有關異地復寫效能影響的詳細資訊,請參閱 異地復 寫一文。 複本上的資料,最終仍會與主要伺服器上的資料保持一致。 請針對可接受此延遲的工作負載使用此功能。

注意

對於大部分的工作負載,讀取複本會從主要伺服器提供近乎即時的更新。 不過,由於持續大量寫入的主要工作負載,複寫延遲可能會繼續成長,而且可能只能趕上主要工作負載。 這也可能會在主要復本上增加記憶體使用量,因為 WAL 檔案只會在複本收到一次刪除。 如果這種情況持續發生,在寫入密集型工作負載完成後刪除和重新建立讀取複本,您可以將複本恢復為延隔時間的良好狀態。 非同步讀取複本不適合這類大量寫入工作負載。 評估應用程式的讀取複本時,請透過其尖峰和非尖峰時間監視複本上複本的延遲,以評估工作負載週期的各個時間點的可能延遲和預期的 RTO/RPO。

建立複本

適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的主伺服器可以部署在任何支援服務的區域中。 您可以在相同區域內建立主伺服器複本,或跨可使用 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的不同全域 Azure 區域建立複本。 建立複本的功能現在會延伸到一些特殊的 Azure 區域。 如需可建立複本的特殊區域清單,請參閱異地復寫一文。

當您啟動建立複本工作流程時,會建立空白 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例。 新伺服器會填入主伺服器上的數據。 針對在相同區域中建立複本,會使用快照集方法。 因此,建立時間與數據的大小無關。 異地復本是使用主要實例的基底備份所建立,然後透過網路傳輸;因此,根據主要大小,建立時間可能會從分鐘到數小時不等。

只有在符合兩個條件時,才會將複本視為成功建立:必須將主要實例的整個備份複製到複本,而且事務歷史記錄必須同步處理,且不超過 1 GB 的延隔時間。

若要成功建立作業,請避免在高交易式負載期間建立複本。 例如,您應該避免從其他來源移轉至 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器或在大量載入作業期間建立複本。 如果您要移轉數據或載入大量數據,最好先完成這項工作。 完成之後,您就可以開始設定複本。 移轉或大量載入作業完成後,請檢查事務歷史記錄大小是否已回到其正常大小。 一般而言,事務歷史記錄大小應該接近實例max_wal_size伺服器參數中定義的值。 您可以使用事務歷史記錄 儲存體 Used 計量來追蹤事務歷史記錄記憶體使用量,以深入瞭解事務歷史記錄所使用的記憶體數量。 藉由監視此計量,您可以確定事務歷史記錄大小在預期的範圍內,而且可能會啟動複本建立程式。

重要

一般用途和記憶體優化伺服器計算層目前支援讀取複本。 不支援高載伺服器計算層。

重要

執行複本建立、刪除和升級作業時,主伺服器會進入 更新狀態。 在此期間,伺服器管理作業,例如修改伺服器參數、變更高可用性選項,或新增或移除防火牆將無法使用。 請務必注意,更新狀態只會影響伺服器管理作業,而且不會影響 數據平面 作業。 這表示您的資料庫伺服器會保持完整運作並能夠接受連線,以及提供讀取和寫入流量。

了解如何在 Azure 入口網站中建立讀取複本

設定管理

為 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器設定讀取複本時,請務必瞭解可調整的伺服器組態、繼承自主要伺服器以及任何相關限制。

繼承的組態

建立讀取複本時,它會從主伺服器繼承特定的伺服器組態。 這些設定可以在複本建立期間或設定之後變更。 不過,特定設定,例如異地備份,不會復寫到讀取複本。

復本建立期間的組態

  • 階層、記憶體大小:針對「升階為主伺服器」作業,它必須與主要伺服器相同。 針對「升級至獨立伺服器並從複寫中移除」作業,它可以是相同或高於主要伺服器。
  • 效能層級 (IOPS):可調整。
  • 數據加密:可調整,包括從服務管理的金鑰移至客戶管理的密鑰。

建立後設定

  • 防火牆規則:可以新增、刪除或修改。
  • 階層、記憶體大小:針對「升階為主伺服器」作業,它必須與主要伺服器相同。 針對「升級至獨立伺服器並從複寫中移除」作業,它可以是相同或高於主要伺服器。
  • 效能層級 (IOPS):可調整。
  • 驗證方法:可調整的選項包括從 PostgreSQL 驗證切換至 Microsoft Entra。
  • 伺服器參數:大部分都是可調整的。 不過,影響共用記憶體大小的人應該與主要伺服器一致,特別是針對潛在的「升階至主伺服器」案例。 針對「升階至獨立伺服器並從複寫中移除」作業,這些參數應該相同或超過主要伺服器上的參數。
  • 維護排程:可調整。

讀取複本上不支援的功能

某些功能僅限於主伺服器,且無法在讀取複本上設定。 包括:

  • 備份,包括異地備份。
  • 高可用性 (HA)

如果您的來源 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例使用客戶管理的金鑰加密,請參閱以取得其他考慮。

連線到複本

當您建立複本時,它會繼承主伺服器的防火牆規則或虛擬網路服務端點。 這些規則可能會在復本建立期間以及稍後的任何時間點變更。

複本會從主伺服器繼承系統管理員帳戶。 主伺服器上的所有用戶帳戶都會復寫到讀取複本。 您只能使用主伺服器上可用的使用者帳戶來連線到讀取複本。

有兩種方法可以連線到複本:

  • 直接連線到複本實例:您可以使用複本的主機名和有效的使用者帳戶來連線到複本,就像您在一般 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例一樣。 針對名為 myreplica 且具有系統管理員用戶名稱 myadmin 的伺服器,您可以使用 聯機到複 psql本:
psql -h myreplica.postgres.database.azure.com -U myadmin postgres

在出現提示時,請輸入使用者帳戶的密碼。

此外,為了簡化連線程式,Azure 入口網站 提供現成可用的 連接字串。 您可以在 [連線] 頁面中找到這些專案。 它們同時libpq包含針對bash控制台量身打造的變數和 連接字串。

  • 透過虛擬端點:使用虛擬端點有替代的連線方法,如虛擬端點一文所述。 藉由使用虛擬端點,您可以將只讀端點設定為一致地指向複本,而不論哪個伺服器目前保留複本角色。

監視複寫

適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的讀取複本功能依賴複寫位置機制。 復寫位置的主要優點是,它們會自動調整所有複本伺服器所需的事務歷史記錄 (WAL 區段) 數目。 這有助於防止複本不同步,因為它避免在主要複本傳送至複本之前刪除主要複本上的WAL 區段。 方法的缺點是,如果復寫位置長時間維持非使用中狀態,則主要複本空間不足的風險。 在這種情況下,主要會累積 WAL 檔案,導致記憶體使用量的累加成長。 當記憶體使用量達到 95% 或可用容量小於 5 GiB 時,伺服器會自動切換到唯讀模式,以避免與磁碟完整情況相關聯的錯誤。
因此,監視復寫延遲和複寫位置狀態對於讀取複本至關重要。

建議您設定記憶體使用或記憶體百分比的警示規則,以及在復寫延遲超過特定閾值時,讓您可以主動採取行動、增加記憶體大小,以及刪除延遲讀取複本。 例如,如果記憶體百分比超過 80% 使用量,而且復本延遲高於 5 分鐘,您可以設定警示。 事務歷史記錄 儲存體 [已使用] 計量會顯示WAL 檔案累積是否為過度儲存使用量的主要原因。

適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器提供兩個監視複寫計量。 這兩個計量是「最大實體複寫延遲」和「讀取複本延隔時間」。 若要瞭解如何檢視這些計量,請參閱閱讀複本操作說明文章監視複本一節。

[ 最大實體復寫延遲 ] 計量會顯示主要複本與最落後複本之間的位元元組延遲。 此計量僅適用於主伺服器上,而且只有在至少有一個讀取複本聯機到主要複本時才能使用。 當復本正在趕上主要複本、建立複本期間或復寫變成非使用中時,也會顯示延遲資訊。

讀取 複本延隔 計量會顯示上次重新執行交易之後的時間。 例如,如果您的主伺服器上沒有發生任何交易,且上次交易是在5秒前重新執行,則讀取複本延隔時間會顯示5秒的延遲。 此計量僅適用於複本,且僅適用於複本。

設定警示,以在複本延隔時間達到工作負載無法接受的值時通知您。

如需詳細資訊,請直接查詢主伺服器,以取得所有複本的復寫延遲。

注意

如果主伺服器或讀取複本重新啟動,重新啟動和趕上所需的時間會反映在複本延隔計量中。

複寫狀態

若要監視複寫和升級作業的進度和狀態,請參閱 Azure 入口網站 中的 [複寫狀態] 數據行。 此數據行位於復寫頁面中,並顯示各種狀態,以深入了解讀取複本的目前狀況及其主要複本的連結。 對於依賴 Azure Resource Manager API 的使用者,叫用 API 時 GetReplica ,狀態會顯示為屬性包中的 replica ReplicationState。

下列為可能的值:

複寫狀態 說明 升階順序 讀取複本建立順序
重新設定 等候複本主要連結的開頭。 例如,如果復本或其區域因災害而無法使用,它可能會維持較長的時間。 1 N/A
供應 正在布建讀取複本,且兩部伺服器之間的複寫尚未啟動。 在布建完成之前,您無法連線到讀取複本。 N/A 1
更新 在升級或讀取複本建立等觸發動作之後,正在準備伺服器設定。 2 2
Catchup 正在復本上套用WAL 檔案。 升級期間此階段的持續時間取決於選擇的數據同步選項 - 已規劃或強制。 3 3
積極 狀況良好,表示讀取複本已成功連線到主要複本。 如果伺服器已停止,但先前已成功連線,狀態會維持為作用中狀態。 4 4
破碎 狀況不良狀態,表示升級作業可能失敗,或複本因某些原因而無法連線到主要複本。 N/A N/A

瞭解如何 監視複寫

考量

本節將摘要說明有關讀取複本功能的考量。 適用下列考慮。

  • 電源作業:電源作業,包括啟動和停止動作,可以同時套用至主要和複本伺服器。 不過,若要保留系統完整性,應該遵循特定的順序。 停止讀取複本之前,請先確定主伺服器已停止。 開始作業時,請先在複本伺服器上起始啟動動作,再啟動主伺服器。
  • 如果伺服器有讀取複本,則必須先刪除讀取複本,再刪除主伺服器。
  • 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中的就地主要版本升級需要移除伺服器上目前啟用的任何讀取複本。 一旦刪除復本,主伺服器就可以升級為所需的主要版本。 升級完成後,您可以重新建立複本以繼續複寫程式。
  • 進階版 SSD v2:自目前版本起,如果主伺服器使用 進階版 SSD v2 進行記憶體,則不支援建立讀取複本。
  • 重設系統管理員密碼:目前不支援重設複本伺服器上的系統管理員密碼。 此外,也不支援在相同的要求中更新系統管理員密碼以及 升級 複本作業。 如果您想要這樣做,您必須先升級複本伺服器,然後分別更新新升級伺服器上的密碼。

新複本

讀取複本會建立為新的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例。 現有伺服器無法設定為複本。 您無法建立另一個讀取複本的複本,也就是不支援串聯式複寫。

資源移動

用戶可以在與主要資源群組不同的資源群組中建立讀取複本。 不過,不支援在建立讀取複本之後,將讀取複本移至另一個資源群組。 此外,將復本移至不同的訂用帳戶,並將具有讀取複本的主要複本移至另一個資源群組或訂用帳戶,則不支援。

儲存體 自動成長

為 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例設定讀取複本時,請務必確保複本上的記憶體自動成長設定符合主伺服器的設定。 記憶體自動成長功能可讓資料庫記憶體自動增加,以避免空間不足,這可能會導致資料庫中斷。 以下說明如何有效地管理記憶體自動成長設定:

  • 不論主伺服器的設定為何,您都可以在任何復本上啟用記憶體自動成長。
  • 如果在主伺服器上啟用記憶體自動成長,也必須在複本上啟用它,以確保記憶體調整行為的一致性。
  • 若要在主要複本上啟用記憶體自動成長,您必須先在複本上啟用它。 這項作業順序對於維護複寫完整性至關重要。
  • 相反地,如果您想要停用記憶體自動成長,請先在主伺服器上停用它,以避免復寫複雜。

備份及還原

管理 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例的備份和還原時,請務必記住伺服器在不同升級案例中的目前和先前角色。 以下是要記住的重點:

升階至主伺服器

  1. 不會從讀取複本取得任何備份:不論其過去的角色為何,都不會從讀取複本伺服器取得備份。

  2. 保留過去的備份:如果伺服器曾經是主要伺服器,並在該期間進行備份,則會保留這些備份。 他們最多會保留到用戶定義的保留期間。

  3. 還原作業限制:即使已轉換至讀取複本的伺服器有過去的備份,還原作業也會受到限制。 您只能在伺服器升級回主要角色時起始還原作業。

為了清楚起見,以下是說明這些點的數據表:

伺服器角色 已建立備份 允許還原
主要 Yes Yes
讀取複本 No No
將復本升階為主要複本 Yes Yes

升級至獨立伺服器並從複寫中移除

雖然伺服器是讀取複本,但不會進行備份。 不過,一旦升級為獨立伺服器,升級的伺服器和主伺服器都有備份,而且兩者都允許還原。

網路

讀取複本支援 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器支援的所有網路選項。

重要

主伺服器與讀取複本之間的雙向通訊對於 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器設定而言非常重要。 必須布建在 Azure 虛擬網路子網內的目的地埠 5432 上傳送和接收流量。

上述需求不僅有助於同步處理程式,還能確保升級機制正常運作,其中複本可能需要以反向順序進行通訊,從複本到主要複本,特別是在升級至主要作業期間。 此外,必須允許連線至儲存「預先寫入記錄」封存的 Azure 儲存器帳戶,才能維護數據持久性,並啟用有效率的復原程式。

如需如何為讀取複本設定私人存取(虛擬網路整合)的詳細資訊,並瞭解在專用網內容中跨 Azure 區域和虛擬網路進行復寫的影響,請參閱 使用專用網 跨 Azure 區域和虛擬網路進行複寫頁面。

復寫位置問題風險降低

在罕見的情況下,復寫位置所造成的高延遲可能會導致主伺服器上的記憶體使用量因為累積的 WAL 檔案而增加。 如果記憶體使用量達到 95%,或可用的容量低於 5 GiB,伺服器會自動切換為唯讀模式,以防止磁碟滿錯誤。

由於維護主伺服器的健康情況和功能是優先順序,因此在這類邊緣情況下,可能會卸除複寫位置,以確保主伺服器仍可運作讀取和寫入流量。 因此,復寫會切換至檔案型記錄傳送模式,這可能會導致較高的復寫延遲。

請務必密切監視記憶體使用量和復寫延隔時間,並採取必要動作來降低潛在問題,再呈報。

伺服器參數

建立讀取複本時,它會從主伺服器繼承伺服器參數。 這是為了確保一致且可靠的起點。 不過,在建立讀取複本之後對主伺服器上的伺服器參數所做的任何變更都不會自動複寫。 此行為提供個別微調讀取複本的優點,例如,在不修改主伺服器參數的情況下,增強讀取密集型作業的效能。 雖然這提供彈性和自定義選項,但是當需要伺服器參數的統一性時,也需要謹慎和手動管理,以維持主要和複本之間的一致性。

管理員 istrators 可以變更讀取複本伺服器上的伺服器參數,並設定與主伺服器上不同的值。 唯一的例外狀況是可能會影響複本復原的參數,如下列一節所述:max_connections、、max_prepared_transactionsmax_locks_per_transactionmax_wal_sendersmax_worker_processes。 為了確保讀取複本的復原順暢且不會遇到共用記憶體限制,這些特定參數應該一律設定為相當於或 大於在主伺服器上設定的值。

調整

您可以隨意相應增加和減少計算(虛擬核心),將服務層級從一般用途變更為記憶體優化(反之亦然),並相應增加記憶體,但適用下列注意事項。

針對計算調整:

  • 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器需要複本上的數個參數大於或等於主要複本上的設定,以確保複本在復原期間不會用盡共用記憶體。 受影響的參數包括:max_connections、、、max_prepared_transactionsmax_locks_per_transactionmax_wal_sendersmax_worker_processes

  • 相應增加:請先相應增加複本的計算,然後相應增加主要複本。

  • 相應減少:先相應減少主要計算機的計算,然後相應減少複本。

  • 主要復本上的計算必須一律等於或小於最小復本上的計算。

針對記憶體調整:

  • 相應增加:請先相應增加複本的記憶體,然後相應增加主要複本。

  • 主要復本上的 儲存體 大小必須一律等於或小於最小復本上的記憶體大小。