pg流複製部署實踐

2022-09-10 19:06:18 字數 3065 閱讀 9198

流複製是pg資料庫9.0後面版本新增的功能,基本原理是從伺服器連線到主伺服器,主伺服器在wal記錄產生時就將它們以流式傳送到從伺服器中,而不必等到wal日誌檔案被填充。

預設情況下,流複製是非同步的,在這種情況下,主伺服器提交乙個事務與該變化在從伺服器上變得可見之間存在短暫的延遲,不過這種延遲比基於檔案的日誌傳送方式中要小得多,在從伺服器硬體等負載條件允許的情況下,延遲通常低於一秒。

伺服器ip

說明master(centos6.5)

192.168.0.10

pg主伺服器

standby(centos6.5)

192.168.0.11

pg從伺服器

這裡面需要注意以下幾點:

這裡省略pg安裝的步驟,實際中安裝可以有多種方式,這裡並不做詳細的介紹。主庫已經安裝完成,並已經啟動。

首先需要配置乙個賬號密碼,從庫需要用這個賬號密碼來同步資料。

postgres# create role replica login replication encrypted password 'replica'
為了保證安全,這個賬號只能由從庫來連線,需要修改pg_hba.conf的配置,如果有多個從庫,只需要更改後面的ip即可。

host    replication     replica     192.168.0.11/32                 md5
配置流複製,修改postgresql.conf。

wal_level = hot_standby  # 這個是設定主為wal的主機

max_wal_senders = 8 #這個設定了可以最多有幾個流複製連線,差不多有幾個從,就設定幾個

wal_keep_segments = 64 # 設定流複製保留的最多的xlog數目,如果資料庫的事務併發數過多,這個一定要設定稍大一些,避免wal日誌沒有同步完,主庫舊wal日誌就刪除了,這會導致備庫直接宕機

wal_sender_timeout = 60s # 設定流複製主機傳送資料的超時時間

max_connections = 100 # 這個設定要注意下,從庫的max_connections必須要大於主庫的

修改完以上的,就可以重啟主庫,讓上面的配置生效。

pg_ctl restart -d /data1/pgdata/
這裡假定已經安裝好了資料庫,但是沒有初始化,即沒有生成pgdata的一系列檔案,因為這些檔案需要從主庫中同步過來,包含一些wal日誌。如果已經初始化了,直接刪除pgdata裡所有檔案就行了。假定資料庫的資料目錄也在/data1/pgdata,注意該目錄的許可權,需要是700,使用者為postgres。

同步主庫的資料檔案到從庫,這一步輸入的密碼就是在主庫配置中第一步建立的使用者replica密碼,這個過程需要複製主庫所有的資料檔案,完成後,可以發現從庫的該目錄檔案和主庫是一模一樣的。

pg_basebackup -f p --progress -d /data1/pgdata -h 192.168.0.10 -p 5432 -u replica --password
修改recovery.conf,這個檔案可以從share資料夾獲取,直接複製出來。

cp /data1/pgdata/share/recovery.conf.sample /data1/pgdata/recovery.conf
修改下面幾個引數:

standby_mode = on  # 這個說明這台機器為從庫

primary_conninfo = 'host=192.168.0.10 port=5432 user=replica password=replica' # 這個說明這台機器對應主庫的資訊

recovery_target_timeline = 'latest' # 這個說明這個流複製同步到最新的資料

postgresql.conf修改幾個引數:

max_connections = 300 # 一般查多於寫的應用從庫的最大連線數要比較大

hot_standby = on # 說明這台機器不僅僅是用於資料歸檔,也用於資料查詢

max_standby_streaming_delay = 30s # 資料流備份的最大延遲時間

wal_receiver_status_interval = 10s # 多久向主報告一次從的狀態,當然從每次資料複製都會向主報告狀態,這裡只是設定最長的間隔時間

hot_standby_feedback = on # 如果有錯誤的資料複製,是否向主進行反饋

然後啟動從庫:

pg_ctl start -d /data1/pgdata/
主庫檢視程序ps -ef|grep sender,這個sender程序就是wal傳送的程序

postgres  3564 64185  0 aug29 ?        00:00:08 postgres: wal sender process replica 192.168.0.11(50828) streaming 5/4ed4f868
從庫檢視程序ps -ef|grep receiver程序,這個wal的接收程序

postgres 34251 34245  0 aug29 ?        00:09:54 postgres: wal receiver process   streaming 5/4ed4f868
同步的wal日誌為4ed4f868。

主庫中有乙個檢視pg_stat_replication可以檢視更為詳細的資訊,這裡不再做介紹。

通過上面的部署,發現主從流複製還是比較穩定的,作者在生產環境搭建了一套,跑了1年多,沒有出現過故障,保障了業務的可靠性和穩定性。但是,隨著業務的增長,乙個從庫可能滿足不了併發查詢,可以考慮拓展多台從庫來滿足需求,但是帶來的乙個問題就是主庫sender的壓力會比較大,另乙個就是同步的延時問題。作者還是比較喜歡從簡單的架構來實現優化,而不是堆疊機器來實現效能優化,因為任何系統變大,複雜度就更高,同時帶來的就是不穩定的因素增多。

所以,簡單就好。

PG複製引數

複製引數 流複製 單向複製 級聯複製 雙向複製 下面說流複製的引數 1 傳送伺服器 max wal senders integer 指定來自備用伺服器或流基礎備份客戶端的併發連線的最大數目 即同時運 行 wal 傳送者程序的最大數目 預設值是零,這意味著禁用複製。此引數不能高於max connect...

PG 一 PostgreSQL安裝與部署

進入選擇對應的作業系統,即可獲取rpm安裝的操作步驟 安裝rpm源 yum install y 安裝資料庫 yum install y postgresql12 server 儲存安裝包 yum install postgresql12 server downloadonly downloaddir...

流 複製操作

1 序列化 程式中的動態物件轉化為磁碟上的靜態資料。用於儲存物件狀態,有利於快速查詢,不用序列化,也可以儲存,但工作量很大。2 流的基礎操作 filestream fs1 new filestream sourcepath,filemode.open,fileaccess.read filestre...