PostgreSQL 主從集群搭建
下面是 PostgreSQL 主從復(fù)制(Streaming Replication)環(huán)境的安裝與配置指南,適合在兩臺或多臺服務(wù)器之間構(gòu)建一主一從(或一主多從)的高可用讀寫分離系統(tǒng)。
環(huán)境準(zhǔn)備
| 角色 | 主機(jī)名/IP | 說明 |
|---|---|---|
| 主庫 | 192.168.1.10 | 可讀寫,負(fù)責(zé)復(fù)制源 |
| 從庫 | 192.168.1.11 | 只讀,從主庫同步數(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ù)庫(如未自動初始化):
sudo -u postgres /usr/pgsql-15/bin/initdb -D /var/lib/pgsql/15/data
二、配置主庫(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(允許從庫連接復(fù)制)
# 添加允許從庫復(fù)制連接 host replication all 192.168.1.11/32 md5
3. 重啟主庫
sudo systemctl restart postgresql
三、從庫配置(192.168.1.11)
1. 停止 PostgreSQL 服務(wù)并清空數(shù)據(jù)目錄
sudo systemctl stop postgresql rm -rf /var/lib/postgresql/15/main/*
2. 使用pg_basebackup拉取主庫數(shù)據(jù)
pg_basebackup -h 192.168.1.10 -D /var/lib/postgresql/15/main -U postgres -P -R
說明:
- -h:主庫 IP
- -D:寫入數(shù)據(jù)目錄
- -U:復(fù)制用戶(需先創(chuàng)建)
- -R:自動創(chuàng)建 standby.signal 和 primary_conninfo
如果提示用戶不存在,請先在主庫執(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'
四、啟動從庫
sudo systemctl start postgresql
檢查日志 /var/log/postgresql/postgresql-15-main.log 是否同步成功。
五、驗(yàn)證主從同步
主庫執(zhí)行:
SELECT * FROM pg_stat_replication;
從庫查看:
SELECT pg_is_in_recovery(); -- 返回 true 表示是從庫
六、主從讀寫測試建議
| 操作 | 主庫 | 從庫 |
|---|---|---|
| 創(chuàng)建表/插入數(shù)據(jù) | ? 支持 | ? 禁止 |
| 查詢數(shù)據(jù) | ? 支持 | ? 支持 |
| 自動同步 | ? 向從庫推送 | ? 被動接收 |
七、開機(jī)自啟動設(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 |
常見問題排查
| 問題 | 解決辦法 |
|---|---|
| pg_basebackup 報權(quán)限錯誤 | 主庫需創(chuàng)建 replication 權(quán)限用戶 |
| 從庫無法連接主庫 | 檢查主庫防火墻 / pg_hba.conf |
| 主庫 pg_stat_replication 為空 | 檢查從庫連接信息是否正確 |
| 寫入從庫失敗 | 合理,PostgreSQL 只讀備庫默認(rèn)禁止寫入 |
高級擴(kuò)展建議
| 目標(biāo) | 建議工具 |
|---|---|
| 自動故障切換 | repmgr, Patroni |
| 虛擬 IP 高可用切換 | Keepalived + VIP |
| 讀寫分離中間件 | pgpool-II |
| 多從、鏈?zhǔn)綇?fù)制 | 支持 |
| 雙機(jī)部署腳本化自動搭建 | Ansible/腳本工具 |
到此這篇關(guān)于PostgreSQL 主從集群搭建的文章就介紹到這了,更多相關(guān)PostgreSQL 主從集群搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- PostgreSQL流復(fù)制(主從復(fù)制)詳細(xì)教程
- PostgreSQL主從搭建的實(shí)現(xiàn)步驟
- postgresql數(shù)據(jù)庫主從恢復(fù)的實(shí)現(xiàn)
- 在docker上部署postgreSQL主從的超詳細(xì)步驟
- 利用Docker部署PostgreSQL 12.4主從方式
- postgresql13主從搭建Ubuntu
- CentOS PostgreSQL 12 主從復(fù)制(主從切換)操作
- postgresql數(shù)據(jù)庫安裝部署搭建主從節(jié)點(diǎn)的詳細(xì)過程(業(yè)務(wù)庫)
- Postgresql 檢查數(shù)據(jù)庫主從復(fù)制進(jìn)度的操作
- Postgresql主從異步流復(fù)制方案的深入探究
相關(guān)文章
PostgreSQL 如何獲取當(dāng)前日期時間及注意事項
這篇文章主要介紹了PostgreSQL 如何獲取當(dāng)前日期時間及注意事項,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
解析PostgreSQL中Oid和Relfilenode的映射問題
這篇文章主要介紹了PostgreSQL中Oid和Relfilenode的映射問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
PostgreSQL中實(shí)現(xiàn)自增的三種方式舉例
很多小伙伴在把mysql數(shù)據(jù)庫里面的表導(dǎo)入pgsql數(shù)據(jù)庫的時候,會遇到新增數(shù)據(jù)的時候id不自增,這篇文章主要給大家介紹了關(guān)于PostgreSQL中實(shí)現(xiàn)自增的三種方式,需要的朋友可以參考下2024-02-02
PostgreSQL 分區(qū)表的實(shí)現(xiàn)示例
本文主要介紹了PostgreSQL中的分區(qū)表實(shí)現(xiàn),包括傳統(tǒng)分區(qū)表和內(nèi)置分區(qū)表兩種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2026-01-01
Ruoyi從mysql切換到postgresql的幾個踩坑實(shí)戰(zhàn)
最近由于工作的原因,需要將Ruoyi從mysql切換到postgresql,所以這篇文章主要給大家介紹了關(guān)于Ruoyi從mysql切換到postgresql的幾個踩坑實(shí)戰(zhàn),需要的朋友可以參考下2023-02-02
PostgreSQL中進(jìn)行數(shù)據(jù)導(dǎo)入和導(dǎo)出的示例代碼
在數(shù)據(jù)庫管理中,數(shù)據(jù)的導(dǎo)入和導(dǎo)出是非常常見的操作,特別是在 PostgreSQL 中,提供了多種工具和方法來實(shí)現(xiàn)數(shù)據(jù)的有效管理,本文將詳細(xì)介紹在 PostgreSQL 中如何進(jìn)行數(shù)據(jù)導(dǎo)入和導(dǎo)出,并給出具體的命令及示例,需要的朋友可以參考下2026-03-03

