本文主要介紹 Windows 環境下搭建 PostgreSQL 的主從邏輯復制,關于 PostgreSQl 的相關運維文章,網路上大多都是 Linux 環境下的操作,鮮有在 Windows 環境下配置的教程,所以本文采用 Windows 環境作為演示系統來進行 PostgreSQL 高可用資料庫服務的搭建,
關于 Windows 系統 PostgreSQL 的安裝方法可以直接看之前的博客 https://www.cnblogs.com/berkerdong/p/16645493.html
在Windows 環境運行 PostgreSQL 在連接數的配置需要注意以下這個知識點:
由于PostgreSQL所依賴的一些庫依賴于user32.dll,后者從記憶體中一塊稱為桌面堆(Desktop Heap)的區域中分配記憶體,桌面堆被分配給了每一個登錄的會話,在 Windows 10 以上的作業系統通常一個非互動的會話將會分配給768KB,每個互動登錄會話將會分配給20MB的桌面堆,每個postgres行程典型的桌面堆消耗是3.2KB,
- 當作為Windows服務運行時,因為每個非互動會話將會分配768KBMB的桌面堆,所以大約可以支撐 200-220個連接,
- 當在命令列方式運行時,因為每個互動登錄會話將會分配20MB的桌面堆,所以大約可以支撐 5000-6000個連接,
以上說的值是作業系統默認的值,這個堆分配大小可以通過調整注冊表來進行修改,但是此操作需要非常小心,一旦指定的值過大,系統將無法啟動,所以不推薦去手動修改這個值,如果想要了解更多這個知識點可以看 微軟官方的這個說明:
https://learn.microsoft.com/zh-CN/troubleshoot/windows/win32/user32-kernel32-not-initialize
結合上面的知識點,所以我們在Windows環境下配置 PostgreSQL 的最大連接數時,如果采用 Windows 服務模式運行則配置最大連接數為200比較好,如果需要200個以上的并發連接,則最好采用控制臺形式啟動運行PostgreSQL,同時結合計算機的可以記憶體去綜合考慮一般100個連接數會消耗 1G記憶體,所以假設我們電腦記憶體為8G,考慮到系統本身運行需要2G記憶體,所以這是 PostgreSQL 的最大連接數配置為500 左右即可,
PostgreSQL控制臺運行,啟動和停止命令如下:
啟動 pg_ctl.exe -D "D:\Software\PostgreSQL\data" start
停止 pg_ctl.exe -D "D:\Software\PostgreSQL\data" stop
-D 的引數 "D:\Software\PostgreSQL\data" 是 PostgreSQL 的資料實體位置
今天我們采用邏輯同步復制來實作主從資料庫的配置,首選在主資料庫上調整 postgresql.conf 組態檔啟用邏輯復制功能
wal_level = logical

配置調整之后需要重新啟動主資料庫實體,
然后在主資料庫對我們需要配置的資料庫執行邏輯發布
CREATE PUBLICATION p FOR ALL TABLES WITH (publish = 'insert, update, delete, truncate', publish_via_partition_root = false);
其中 p 為這個發布設定的名稱,也可以自定義為其它,

然后在從資料庫實體上選擇我們要用來訂閱主實體的資料庫,然后執行創建邏輯訂閱
CREATE SUBSCRIPTION s
CONNECTION 'host=127.0.0.1 port=5432 user=postgres dbname=xxxxx connect_timeout=10 password=xxxxxx'
PUBLICATION p
WITH (connect = true, enabled = true, copy_data = https://www.cnblogs.com/berkerdong/archive/2022/10/26/true, create_slot = true, synchronous_commit ='remote_apply');
其中 s 為這個訂閱設定的名稱 'host=127.0.0.1 port=5432 user=postgres dbname=xxxxx connect_timeout=10 password=xxxxxx' 為主庫的連接資訊

創建好名為 s 的訂閱創建之后,我們再次打開 主庫的 postgresql.conf 檔案進行調整設定
synchronous_standby_names = s

調整組態檔之后記得重啟主庫的資料庫實體
這樣我們就完成本地 localhost 的 PostgreSQL 實體中 csapp 資料庫和 遠程服務器上 caspp 資料庫的主從配置,
這里要注意的一點是 PostgreSQL 的 邏輯訂閱并不會同步DDL操作 ,所以對于資料庫的建表等操作是不會進行主從同步的,我們需要手動維護 主從實體資料庫上的表結構使其保持一致,
當在主和從資料庫都創建完成表之后需要在從庫上執行以下重繪訂閱的 SQL,每次主庫新增或者洗掉了表,從庫都需要執行這個操作,
ALTER SUBSCRIPTION s
REFRESH PUBLICATION WITH (copy_data = https://www.cnblogs.com/berkerdong/archive/2022/10/26/true);
然后我們在主庫的資料庫表中進行資料操作,所有的操作就會被同步到 從庫的資料表中,

下面介紹如果想要洗掉發布設定和訂閱設定的操作
在主庫執行
SELECT * FROM pg_publication 可以查詢當前主庫的所有發布資訊

DROP PUBLICATION p 洗掉名字為 p 的發布資訊
在從庫執行:
SELECT * FROM pg_subscription 可以查詢當前從庫的所有訂閱資訊

DROP SUBSCRIPTION s 洗掉名字為 s 的訂閱資訊
至此 Windows 環境搭建 PostgreSQL 邏輯復制高可用架構資料庫服務 就講解完了,有任何不明白的,可以在文章下面評論或者私信我,歡迎大家積極的討論交流,有興趣的朋友可以關注我目前在維護的一個 .NET 基礎框架專案,專案地址如下
https://github.com/berkerdong/NetEngine.git
https://gitee.com/berkerdong/NetEngine.git
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/520719.html
標籤:其他
