CentOS PostgreSQL 12 主從復(fù)制(主從切換)操作
主從復(fù)制
1. 基于文件的日志傳送
創(chuàng)建一個(gè)高可用性(HA)集群配置可采用連續(xù)歸檔,集群中主服務(wù)器工作在連續(xù)歸檔模式下,備服務(wù)器工作在連續(xù)恢復(fù)模式下(1臺(tái)或多臺(tái)可隨時(shí)接管主服務(wù)器),備持續(xù)從主服務(wù)器讀取WAL文件。
連續(xù)歸檔不需要對(duì)數(shù)據(jù)庫(kù)表做任何改動(dòng),可有效降低管理開(kāi)銷,對(duì)主服務(wù)器的性能影響也相對(duì)較低。
直接從一個(gè)數(shù)據(jù)庫(kù)服務(wù)器移動(dòng)WAL記錄到另一臺(tái)服務(wù)器被稱為日志傳送,PostgreSQL通過(guò)一次一文件(WAL段)的WAL記錄傳輸實(shí)現(xiàn)了基于文件的日志傳送。
日志傳送所需的帶寬取根據(jù)主服務(wù)器的事務(wù)率而變化;
日志傳送是異步的,即WAL記錄是在事務(wù)提交后才被傳送,那么在一個(gè)窗口期內(nèi)如果主服務(wù)器發(fā)生災(zāi)難性的失效則會(huì)導(dǎo)致數(shù)據(jù)丟失,還沒(méi)有被傳送的事務(wù)將會(huì)被丟失;
數(shù)據(jù)丟失窗口可以通過(guò)使用參數(shù)archive_timeout進(jìn)行限制,可以低至數(shù)秒,但同時(shí)會(huì)增加文件傳送所需的帶寬。
2. 流復(fù)制
PostgreSQL在9.x之后引入了主從的流復(fù)制機(jī)制,所謂流復(fù)制,就是備服務(wù)器通過(guò)tcp流從主服務(wù)器中同步相應(yīng)的數(shù)據(jù),主服務(wù)器在WAL記錄產(chǎn)生時(shí)即將它們以流式傳送給備服務(wù)器,而不必等到WAL文件被填充。
默認(rèn)情況下流復(fù)制是異步的,這種情況下主服務(wù)器上提交一個(gè)事務(wù)與該變化在備服務(wù)器上變得可見(jiàn)之間客觀上存在短暫的延遲,但這種延遲相比基于文件的日志傳送方式依然要小得多,在備服務(wù)器的能力滿足負(fù)載的前提下延遲通常低于一秒;
在流復(fù)制中,備服務(wù)器比使用基于文件的日志傳送具有更小的數(shù)據(jù)丟失窗口,不需要采用archive_timeout來(lái)縮減數(shù)據(jù)丟失窗口;
將一個(gè)備服務(wù)器從基于文件日志傳送轉(zhuǎn)變成基于流復(fù)制的步驟是:把recovery.conf文件中的primary_conninfo設(shè)置指向主服務(wù)器;設(shè)置主服務(wù)器配置文件的listen_addresses參數(shù)與認(rèn)證文件即可。
操作系統(tǒng): CentOS 7
數(shù)據(jù)庫(kù): PostgreSQL 12
一、主庫(kù)配置
1、創(chuàng)建具有流復(fù)制權(quán)限的用戶
CREATE ROLE replica login replication encrypted password 'replica的密碼';
2、編輯pg_hba.conf
# 新增或修改下列屬性設(shè)置 # 監(jiān)聽(tīng)所有IP listen_addresses = '*' # 開(kāi)啟歸檔 archive_mode = on #歸檔命令 archive_command = 'test ! -f /var/lib/pgsql/12/data/pg_archive/%f && cp %p /var/lib/pgsql/12/data//pg_archive/%f' # 9.6開(kāi)始沒(méi)有hot_standby(熱備模式) wal_level = replica #最多有2個(gè)流復(fù)制連接 max_wal_senders = 2 wal_keep_segments = 16 #流復(fù)制超時(shí)時(shí)間 wal_sender_timeout = 60s # 最大連接數(shù),據(jù)說(shuō)從機(jī)需要大于或等于該值 max_connections = 100
3、重啟postgres
pg_ctl -D /var/lib/pgsql/12/data -l logfile restart
二、從庫(kù)配置
1、驗(yàn)證在從庫(kù)是否可以訪問(wèn)主節(jié)點(diǎn)
psql -h 10.20.2.195 -U postgres
2、停止從庫(kù)postgres服務(wù)
pg_ctl -D /var/lib/pgsql/12/data -l logfile stop
3、清空從庫(kù)數(shù)據(jù)存儲(chǔ)文件夾
rm -rf /var/lib/pgsql/12/data/*
4、從主服務(wù)器上copy數(shù)據(jù)到從服務(wù)器,這一步叫做“基礎(chǔ)備份”
pg_basebackup -h 主節(jié)點(diǎn)IP -p 5432 -U replica -Fp -Xs -Pv -R -D /var/lib/pgsql/12/data
5、此時(shí)data目錄下會(huì)出現(xiàn)standby.signal文件,編輯此文件
## 加入 standby_mode = 'on'
6、修改postgresql.conf文件
#從機(jī)信息和連接用戶 primary_conninfo = 'host=主節(jié)點(diǎn)IP port=5432 user=replica password=replica用戶的密碼' #說(shuō)明恢復(fù)到最新?tīng)顟B(tài) recovery_target_timeline = latest #大于主節(jié)點(diǎn),正式環(huán)境應(yīng)當(dāng)重新考慮此值的大小 max_connections = 120 #說(shuō)明這臺(tái)機(jī)器不僅用于數(shù)據(jù)歸檔,還可以用于數(shù)據(jù)查詢 hot_standby = on #流備份的最大延遲時(shí)間 max_standby_streaming_delay = 30s #向主機(jī)匯報(bào)本機(jī)狀態(tài)的間隔時(shí)間 wal_receiver_status_interval = 10s #r出現(xiàn)錯(cuò)誤復(fù)制,向主機(jī)反饋 hot_standby_feedback = on
7、重啟從庫(kù)
pg_ctl -D /var/lib/pgsql/12/data -l logfile start
三、驗(yàn)證主從搭建是否成功
1、連接主庫(kù)執(zhí)行
select client_addr,sync_state from pg_stat_replication;

說(shuō)明從服務(wù)器正在接收流,而且是異步流復(fù)制。主從配置成功
四、主從切換
主數(shù)據(jù)庫(kù)是讀寫的,備數(shù)據(jù)庫(kù)是只讀的。當(dāng)主數(shù)據(jù)庫(kù)宕機(jī)了,可以通過(guò)pg_controldata命令將從庫(kù)提升為主庫(kù)(將只讀模式變成讀寫),實(shí)現(xiàn)一些基本的HA應(yīng)用。也可以通過(guò)建立觸發(fā)文件提升為主庫(kù),不推薦。命令快捷不容易出錯(cuò)。
1、查看/var/lib/pgsql/12/data復(fù)制狀態(tài)
主庫(kù)

從庫(kù)

2、主庫(kù)故障,停止主庫(kù)服務(wù)

3、提升從庫(kù)為主庫(kù)
su - postgres -c "pg_ctl promote" server promoting
4、查看從庫(kù)日志
cat /var/lib/pgsql/912/data/pg_log/postgresql-Mon.log
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
- PostgreSQL流復(fù)制(主從復(fù)制)詳細(xì)教程
- PostgreSQL主從搭建的實(shí)現(xiàn)步驟
- postgresql數(shù)據(jù)庫(kù)主從恢復(fù)的實(shí)現(xiàn)
- 在docker上部署postgreSQL主從的超詳細(xì)步驟
- 利用Docker部署PostgreSQL 12.4主從方式
- postgresql13主從搭建Ubuntu
- postgresql數(shù)據(jù)庫(kù)安裝部署搭建主從節(jié)點(diǎn)的詳細(xì)過(guò)程(業(yè)務(wù)庫(kù))
- Postgresql 檢查數(shù)據(jù)庫(kù)主從復(fù)制進(jìn)度的操作
- Postgresql主從異步流復(fù)制方案的深入探究
- PostgreSQL 主從集群搭建
相關(guān)文章
PostgreSql生產(chǎn)級(jí)別數(shù)據(jù)庫(kù)安裝要注意事項(xiàng)
這篇文章主要介紹了PostgreSql生產(chǎn)級(jí)別數(shù)據(jù)庫(kù)安裝要注意事項(xiàng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
postgresql 利用fdw來(lái)實(shí)現(xiàn)不同數(shù)據(jù)庫(kù)之間數(shù)據(jù)互通(推薦)
這篇文章主要介紹了postgresql 利用fdw來(lái)實(shí)現(xiàn)不同數(shù)據(jù)庫(kù)之間數(shù)據(jù)互通,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
postgreSql分組統(tǒng)計(jì)數(shù)據(jù)的實(shí)現(xiàn)代碼
這篇文章給大家介紹postgreSql的監(jiān)控記錄表里多條不同時(shí)間的數(shù)據(jù),只取最新的數(shù)據(jù),并分組統(tǒng)計(jì),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-12-12
PostgreSQL數(shù)據(jù)庫(kù)視圖及子查詢使用操作
這篇文章主要為大家介紹了PostgreSQL數(shù)據(jù)庫(kù)視圖及子查詢的使用操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
postgresql 中的 like 查詢優(yōu)化方案
這篇文章主要介紹了postgresql 中的 like 查詢優(yōu)化方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
PGSQL 實(shí)現(xiàn)查詢今天,昨天的數(shù)據(jù),一個(gè)月之內(nèi)的數(shù)據(jù)
這篇文章主要介紹了PGSQL 實(shí)現(xiàn)查詢今天,昨天的數(shù)據(jù),一個(gè)月之內(nèi)的數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
PostgreSQL數(shù)據(jù)庫(kù)儲(chǔ)存空間不足的解決方案
在使用 PostgreSQL 數(shù)據(jù)庫(kù)時(shí),可能會(huì)遇到存儲(chǔ)空間不足的問(wèn)題,這個(gè)問(wèn)題不僅會(huì)影響數(shù)據(jù)庫(kù)的正常運(yùn)行,還可能導(dǎo)致數(shù)據(jù)丟失或應(yīng)用程序出現(xiàn)故障,因此,了解如何應(yīng)對(duì)這種情況至關(guān)重要,所以本文給大家就介紹了PostgreSQL數(shù)據(jù)庫(kù)儲(chǔ)存空間不足的解決方案,需要的朋友可以參考下2024-07-07

