如何在CentOS 8中配置PostgreSQL 12流複製?


介紹

PostgreSQL是最流行的開源關係資料庫管理系統(RDBMS)之一。它提供了廣泛的功能,例如資料完整性、容錯性和可擴充套件性。PostgreSQL的一個重要功能是流複製。

它允許您透過持續地將更改從主節點流式傳輸到備用節點來建立PostgreSQL資料庫叢集的多個副本,幾乎即時完成。流複製透過透過網路連線將主節點生成的預寫日誌(WAL)資料流式傳輸到一個或多個備用節點來工作。

配置用於流複製的主節點

在主節點上啟用WAL歸檔

WAL(預寫日誌)是PostgreSQL中的一個關鍵元件,它允許崩潰恢復和時間點恢復。為了設定流複製,我們需要在主節點上啟用WAL歸檔。這將確保所有在主節點上提交的事務除了寫入WAL檔案外,還會寫入指定的歸檔位置。

要啟用WAL歸檔,您需要使用以下引數更新`postgresql.conf`檔案:

# Enable Archiving 
archive_mode = on archive_command = 'cp %p /var/lib/pgsql/12/archive/%f'  

在這個例子中,我們啟用了歸檔,並指定了一個歸檔命令,該命令將WAL段從其預設目錄(`pg_xlog`)複製到`/var/lib/pgsql/12/archive`。您可以根據需要調整此路徑。

配置pg_hba.conf檔案以允許來自從節點的複製連線

為了讓從節點連線並從主節點複製資料,我們需要相應地配置`pg_hba.conf`檔案。您需要在此檔案中新增一個條目,指定允許來自特定IP地址或子網的複製連線:

# TYPE DATABASE USER ADDRESS METHOD host replication repluser slave_ip/32 md5    

在這個例子中,我們添加了一個條目,使用`md5`身份驗證方法允許來自特定IP地址(`slave_ip`)的連線。此外,我們建立了一個名為`replication`的新資料庫,我們的複製使用者將可以訪問該資料庫。

在主節點上建立具有適當許可權的複製使用者

現在我們的主伺服器已配置為流複製,並且我們的從伺服器已授權連線,我們需要在主伺服器上建立一個具有適當許可權的新使用者。此使用者將負責對將複製到從伺服器的主資料庫進行必要的更改。要建立此使用者,您可以使用以下SQL命令作為PostgreSQL超級使用者:

CREATE ROLE repluser WITH REPLICATION LOGIN PASSWORD 'password';      

在這個例子中,我們建立了一個名為`repluser`的新角色,並賦予其複製許可權。

我們還指定了登入功能併為其分配了密碼。現在我們的主節點已正確配置用於流複製,我們可以繼續配置我們的從節點。

配置用於流複製的從節點

在從節點上設定recovery.conf檔案以連線到主節點

配置好用於流複製的主節點後,是時候設定您的從節點了。設定從節點的第一步是建立一個名為recovery.conf的配置檔案。

此檔案包含與主節點建立連線並啟動流複製所需的資訊。要建立此配置檔案,您首先需要確定需要設定哪些值。

一般來說,有三個必需的值:standby_mode、primary_conninfo和restore_command。Standby_mode告訴PostgreSQL此伺服器將作為備用伺服器執行,並且應始終保持在複製模式。

Primary_conninfo提供有關如何連線到主節點的資訊。Restore_command告訴PostgreSQL如何從已歸檔的WAL檔案中檢索任何丟失的資料。

確定這些值後,在PostgreSQL資料目錄(通常為/var/lib/pgsql/12/data/)中開啟一個名為“recovery.conf”的新檔案。以以下格式新增這些值作為鍵值對:

standby_mode = 'on' primary_conninfo = 'host= port=5432 user= password=' 
restore_command = 'cp /path/to/archive/%f "%p"' 

請注意,%f和%p是表示每個已歸檔WAL段的名稱和目標路徑的特殊字元。

啟動從節點上的PostgreSQL服務以啟動複製過程

一旦您建立了包含正確填寫必要引數的recovery.conf檔案,就可以啟動從節點上的Postgres服務了。

sudo systemctl start postgresql-12.service 
sudo systemctl enable postgresql-12 

此時,您的從伺服器應成功與主伺服器建立連線並開始複製預寫日誌資料。

預設情況下,Postgres將從伺服器執行在一個連續迴圈中,檢查新的WAL檔案並在主伺服器上可用時應用它們。您可以透過在從節點上執行以下查詢來檢查複製是否正常工作:

SELECT * FROM pg_stat_replication;  

這應該為您提供確認,表明複製正在上線並按預期工作。

測試和驗證流複製設定

在配置用於流複製的主節點和從節點之後,務必測試和驗證複製是否已正確設定。為此,我們將使用一個名為pg_stat_replication的工具,該工具顯示有關流複製狀態的資訊。

首先,讓我們使用psql連線到主節點:

bash 
$ sudo -i -u postgres psql 

現在執行以下命令以顯示有關流複製的資訊:

sql postgres=# SELECT client_addr, state, sync_state FROM pg_stat_replication;  

上面的查詢返回有關每個已連線的流複製客戶端例項的資訊。“client_addr”列顯示連線到主節點的每個從節點的IP地址;“state”顯示當前是否正在使用連線進行流複製;“sync_state”顯示資料當前是否正在從主節點流式傳輸到從節點。

使用pg_stat_replication檢視檢查複製狀態

pg_stat_replication檢視提供了寶貴的見解,可以監控PostgreSQL 12中的副本。在監控PostgreSQL 12流複製時,它是最重要的系統檢視之一。

讓我們瞭解如何利用pg_stat_replication檢視檢查我們的副本(從屬)伺服器是否與我們的主(主)伺服器同步。要檢查所有副本是否與主伺服器同步,請執行:

sql SELECT client_addr AS slave_ip_address, 
state AS connection_state, sync_state AS synchronization_status 
FROM pg_stat_replication; 

此查詢將顯示每個副本的IP地址及其對應的連線狀態和同步狀態。

透過將從節點提升為新的主節點來測試故障轉移

故障轉移過程允許在當前主節點出現問題時切換。在PostgreSQL 12流複製中,故障轉移過程必須手動完成。這意味著管理員需要干預並將其中一個從節點提升為新的主節點。

要執行故障轉移,您需要執行以下步驟:

  • 斷開當前主節點的所有複製連線。

  • 透過將recovery.conf中的“recovery_target_timeline”設定為“latest”來提升其中一個從節點。

  • 啟動此提升的從節點上的PostgreSQL服務。

將從節點提升為新的主節點後,務必檢查所有其他從節點是否連線到此新的主節點並正確接收資料。您可以再次使用pg_stat_replication檢視來檢查每個從節點是否成功連線:

sql SELECT client_addr AS slave_ip_address, 
state AS connection_state, sync_state AS synchronization_status 
FROM pg_stat_replication

一旦您確定一切正常工作,就可以將應用程式的連線設定從舊的(失敗的)主伺服器切換到新的主伺服器(提升的從伺服器)。

結論

在本文中,我們討論瞭如何在CentOS 8中配置PostgreSQL 12流複製,並提供了有關設定主節點和從節點的詳細說明。我們還學習瞭如何測試複製設定並使用pg_stat_replication檢視監控副本伺服器。我們還介紹瞭如何透過手動將其中一個從節點提升為新的主節點來執行故障轉移。

更新於:2023年7月11日

995 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.