PostgreSQL 主從集群搭建
下面是 PostgreSQL 主從復(fù)制(Streaming Replication)環(huán)境的安裝與配置指南,適合在兩臺(tái)或多臺(tái)服務(wù)器之間構(gòu)建一主一從(或一主多從)的高可用讀寫分離系統(tǒng)。
環(huán)境準(zhǔn)備
| 角色 | 主機(jī)名/IP | 說(shuō)明 |
|---|---|---|
| 主庫(kù) | 192.168.1.10 | 可讀寫,負(fù)責(zé)復(fù)制源 |
| 從庫(kù) | 192.168.1.11 | 只讀,從主庫(kù)同步數(shù)據(jù) |
推薦 PostgreSQL 版本一致,例如 15.x;操作系統(tǒng)為 Ubuntu/CentOS 均可。
一、安裝 PostgreSQL(主從都要裝)
以 Ubuntu 為例:
sudo apt update sudo apt install postgresql postgresql-contrib -y
CentOS:
sudo yum install -y postgresql-server postgresql-contrib
初始化數(shù)據(jù)庫(kù)(如未自動(dòng)初始化):
sudo -u postgres /usr/pgsql-15/bin/initdb -D /var/lib/pgsql/15/data
二、配置主庫(kù)(192.168.1.10)
1. 修改postgresql.conf
路徑通常為 /etc/postgresql/15/main/postgresql.conf 或 /var/lib/pgsql/15/data/postgresql.conf
# 啟用 WAL 日志并設(shè)置參數(shù) wal_level = replica max_wal_senders = 10 wal_keep_size = 128MB hot_standby = on listen_addresses = '*'
2. 修改pg_hba.conf(允許從庫(kù)連接復(fù)制)
# 添加允許從庫(kù)復(fù)制連接 host replication all 192.168.1.11/32 md5
3. 重啟主庫(kù)
sudo systemctl restart postgresql
三、從庫(kù)配置(192.168.1.11)
1. 停止 PostgreSQL 服務(wù)并清空數(shù)據(jù)目錄
sudo systemctl stop postgresql rm -rf /var/lib/postgresql/15/main/*
2. 使用pg_basebackup拉取主庫(kù)數(shù)據(jù)
pg_basebackup -h 192.168.1.10 -D /var/lib/postgresql/15/main -U postgres -P -R
說(shuō)明:
- -h:主庫(kù) IP
- -D:寫入數(shù)據(jù)目錄
- -U:復(fù)制用戶(需先創(chuàng)建)
- -R:自動(dòng)創(chuàng)建 standby.signal 和 primary_conninfo
如果提示用戶不存在,請(qǐng)先在主庫(kù)執(zhí)行:
CREATE ROLE repl WITH REPLICATION LOGIN PASSWORD 'replpass';
并確保 pg_hba.conf 中允許該 IP 使用此用戶連接。
3. 修改復(fù)制用戶密碼(如果-R中未設(shè)置)
編輯 postgresql.conf 確保:
primary_conninfo = 'host=192.168.1.10 port=5432 user=repl password=replpass'
四、啟動(dòng)從庫(kù)
sudo systemctl start postgresql
檢查日志 /var/log/postgresql/postgresql-15-main.log 是否同步成功。
五、驗(yàn)證主從同步
主庫(kù)執(zhí)行:
SELECT * FROM pg_stat_replication;
從庫(kù)查看:
SELECT pg_is_in_recovery(); -- 返回 true 表示是從庫(kù)
六、主從讀寫測(cè)試建議
| 操作 | 主庫(kù) | 從庫(kù) |
|---|---|---|
| 創(chuàng)建表/插入數(shù)據(jù) | ? 支持 | ? 禁止 |
| 查詢數(shù)據(jù) | ? 支持 | ? 支持 |
| 自動(dòng)同步 | ? 向從庫(kù)推送 | ? 被動(dòng)接收 |
七、開(kāi)機(jī)自啟動(dòng)設(shè)置(主從)
sudo systemctl enable postgresql
八、參考目錄結(jié)構(gòu)(Debian/Ubuntu)
| 配置文件 | 路徑 |
|---|---|
| postgresql.conf | /etc/postgresql/15/main/ |
| pg_hba.conf | /etc/postgresql/15/main/ |
| 數(shù)據(jù)目錄 | /var/lib/postgresql/15/main/ |
| 日志文件 | /var/log/postgresql/postgresql-15-main.log |
常見(jiàn)問(wèn)題排查
| 問(wèn)題 | 解決辦法 |
|---|---|
| pg_basebackup 報(bào)權(quán)限錯(cuò)誤 | 主庫(kù)需創(chuàng)建 replication 權(quán)限用戶 |
| 從庫(kù)無(wú)法連接主庫(kù) | 檢查主庫(kù)防火墻 / pg_hba.conf |
| 主庫(kù) pg_stat_replication 為空 | 檢查從庫(kù)連接信息是否正確 |
| 寫入從庫(kù)失敗 | 合理,PostgreSQL 只讀備庫(kù)默認(rèn)禁止寫入 |
高級(jí)擴(kuò)展建議
| 目標(biāo) | 建議工具 |
|---|---|
| 自動(dòng)故障切換 | repmgr, Patroni |
| 虛擬 IP 高可用切換 | Keepalived + VIP |
| 讀寫分離中間件 | pgpool-II |
| 多從、鏈?zhǔn)綇?fù)制 | 支持 |
| 雙機(jī)部署腳本化自動(dòng)搭建 | Ansible/腳本工具 |
到此這篇關(guān)于PostgreSQL 主從集群搭建的文章就介紹到這了,更多相關(guān)PostgreSQL 主從集群搭建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 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
- CentOS PostgreSQL 12 主從復(fù)制(主從切換)操作
- postgresql數(shù)據(jù)庫(kù)安裝部署搭建主從節(jié)點(diǎn)的詳細(xì)過(guò)程(業(yè)務(wù)庫(kù))
- Postgresql 檢查數(shù)據(jù)庫(kù)主從復(fù)制進(jìn)度的操作
- Postgresql主從異步流復(fù)制方案的深入探究
相關(guān)文章
PostgreSQL ERROR: invalid escape string 解決辦法
這篇文章主要介紹了PostgreSQL ERROR: invalid escape string 解決辦法,本文環(huán)境是JDBC+PostgreSQL,需要的朋友可以參考下2014-07-07
Postgresql排序與limit組合場(chǎng)景性能極限優(yōu)化詳解
這篇文章主要介紹了Postgresql排序與limit組合場(chǎng)景性能極限優(yōu)化詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
PostgreSQL時(shí)間線(timeline)和History File的用法
這篇文章主要介紹了PostgreSQL時(shí)間線(timeline)和History File的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
PostgreSQL索引的設(shè)計(jì)原則和最佳實(shí)踐
本文詳細(xì)介紹了PostgreSQL索引設(shè)計(jì)的核心原則和最佳實(shí)踐,本文將從 索引類型選擇、列順序設(shè)計(jì)、復(fù)合索引策略、部分索引應(yīng)用、統(tǒng)計(jì)信息管理、反模式識(shí)別 六大維度,深入剖析 PostgreSQL 索引設(shè)計(jì)的核心原則,并提供可落地的最佳實(shí)踐,感興趣的朋友跟隨小編一起看看吧2026-01-01
PostgreSQL中rank()窗口函數(shù)實(shí)用指南與示例
在數(shù)據(jù)分析和數(shù)據(jù)庫(kù)管理中,經(jīng)常需要對(duì)數(shù)據(jù)進(jìn)行排名操作,PostgreSQL提供了強(qiáng)大的窗口函數(shù)rank(),可以方便地對(duì)結(jié)果集中的行進(jìn)行排名,本文將詳細(xì)介紹rank()函數(shù)的使用方法,并通過(guò)多個(gè)實(shí)用示例展示其在不同場(chǎng)景下的應(yīng)用,需要的朋友可以參考下2025-07-07
Postgresql ALTER語(yǔ)句常用操作小結(jié)
這篇文章主要介紹了Postgresql ALTER語(yǔ)句常用操作小結(jié),本文講解了增加一列、刪除一列、更改列的數(shù)據(jù)類型、表的重命名、更改列的名字、字段的not null設(shè)置等常用操作的代碼示例,需要的朋友可以參考下2015-06-06
PostgreSQL教程(四):數(shù)據(jù)類型詳解
這篇文章主要介紹了PostgreSQL教程(四):數(shù)據(jù)類型詳解,本文講解了數(shù)值類型、字符類型、布爾類型、位串類型、數(shù)組、復(fù)合類型等數(shù)據(jù)類型,需要的朋友可以參考下2015-05-05
postgresql 實(shí)現(xiàn)查詢某時(shí)間區(qū)間的所有日期案例
這篇文章主要介紹了postgresql 實(shí)現(xiàn)查詢某時(shí)間區(qū)間的所有日期案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
PostgreSQL教程(一):數(shù)據(jù)表詳解
這篇文章主要介紹了PostgreSQL教程(一):數(shù)據(jù)表詳解表的定義、系統(tǒng)字段、表的修改、表的權(quán)限等4大部份內(nèi)容,內(nèi)容種包括表的創(chuàng)建、刪除、修改、字段的修改、刪除、主鍵和外鍵、約束添加修改刪除等,本文講解了,需要的朋友可以參考下2015-05-05
Win11安裝PostgreSQL數(shù)據(jù)庫(kù)的兩種方式詳細(xì)步驟
PostgreSQL是備受業(yè)界青睞的關(guān)系型數(shù)據(jù)庫(kù),尤其是在地理空間和移動(dòng)領(lǐng)域,這篇文章主要介紹了Win11安裝PostgreSQL數(shù)據(jù)庫(kù)的兩種方式詳細(xì)步驟,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04

