游乐游手机版
首页/数据库/文章详情

PostgreSQL主从集群搭建教程

时间:2026-07-29 21:51
PostgreSQL主从集群搭建需主从两台机器,主库可读写,从库只读。主库配置WAL日志、允许从库复制连接;从库清空数据目录后使用pg_basebackup拉取主库全量数据并自动生成standby signal文件。启动后通过pg_stat_replication和pg_is_in_recovery验证同步,从库处于只读恢复模式。

PostgreSQL主从复制的搭建,其实只要把这个流程理解透,操作起来并不复杂。下面咱们从头开始,把一主一从(或者一主多从)的高可用读写分离系统搭起来。

PostgreSQL主从集群搭建

环境准备

先搞清楚两台机器各自扮演什么角色:

角色主机名/IP说明
主库192.168.1.10可读写,负责复制源
从库192.168.1.11只读,从主库同步数据

推荐PostgreSQL版本保持一致,比如都用15.x;操作系统用Ubuntu或CentOS都可以。

一、安装 PostgreSQL(主从都要装)

先拿Ubuntu来说,直接一条命令搞定:

sudo apt update
sudo apt install postgresql postgresql-contrib -y

如果是CentOS环境:

sudo yum install -y postgresql-server postgresql-contrib

装完之后如果数据库没自动初始化,需要手动来一下:

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(Debian系)或者 /var/lib/pgsql/15/data/postgresql.conf(RHEL系)。把下面这些参数改好:

# 启用 WAL 日志并设置参数
wal_level = replica
max_wal_senders = 10
wal_keep_size = 128MB
hot_standby = on
listen_addresses = '*'

2. 修改pg_hba.conf(允许从库连接复制)

加一行规则,允许从库IP来同步数据:

# 添加允许从库复制连接
host    replication     all     192.168.1.11/32     md5

3. 重启主库

sudo systemctl restart postgresql

三、从库配置(192.168.1.11)

到这步,从库需要先把服务停掉,把数据目录清干净,然后用pg_basebackup从主库拉一份全量数据。

1. 停止 PostgreSQL 服务并清空数据目录

sudo systemctl stop postgresql
rm -rf /var/lib/postgresql/15/main/*

2. 使用pg_basebackup拉取主库数据

pg_basebackup -h 192.168.1.10 -D /var/lib/postgresql/15/main -U postgres -P -R

这些参数的含义:-h是主库IP,-D是数据写入目录,-U是复制用户,-R的意思是一口气自动创建好standby.signal和primary_conninfo。省得咱们后面手动配了。

如果提示用户不存在,那就先到主库创建个专用复制用户:

CREATE ROLE repl WITH REPLICATION LOGIN PASSWORD 'replpass';

别忘了,pg_hba.conf里也要把这个用户的连接权限放开。

3. 修改复制用户密码(如果-R中未设置)

去postgresql.conf里检查一下,确保 primary_conninfo 这一段是配好的:

primary_conninfo = 'host=192.168.1.10 port=5432 user=repl password=replpass'

四、启动从库

sudo systemctl start postgresql

启动之后,建议看看日志有没有异常。日志一般在 /var/log/postgresql/postgresql-15-main.log,如果有报错信息会写得很清楚。

五、验证主从同步

在主库执行下面这条SQL,能看到从库的连接状态:

SELECT * FROM pg_stat_replication;

在从库上查询,确认它是否处于恢复(只读)模式:

SELECT pg_is_in_recovery();  -- 返回 true 表示是从库

六、主从读写测试建议

验证一下读写功能是否符合预期:

操作主库从库
创建表/插入数据✅ 支持❌ 禁止
查询数据✅ 支持✅ 支持
自动同步✅ 向从库推送✅ 被动接收

七、开机自启动设置(主从)

sudo systemctl enable postgresql

八、参考目录结构(Debian/Ubuntu)

如果对文件放在哪里不熟,可以参考下面这个表:

配置文件路径
postgresql.conf/etc/postgresql/15/main/
pg_hba.conf/etc/postgresql/15/main/
数据目录/var/lib/postgresql/15/main/
日志文件/var/log/postgresql/postgresql-15-main.log

常见问题排查

实操当中最常遇到的几个坑,提前列出来,省得到时候抓瞎:

问题解决办法
pg_basebackup 报权限错误主库需创建 replication 权限用户
从库无法连接主库检查主库防火墙 / pg_hba.conf
主库 pg_stat_replication 为空检查从库连接信息是否正确
写入从库失败合理,PostgreSQL 只读备库默认禁止写入

高级扩展建议

如果后期要做更完善的高可用架构,以下几个工具可以重点了解一下:

目标建议工具
自动故障切换repmgr, Patroni
虚拟 IP 高可用切换Keepalived + VIP
读写分离中间件pgpool-II
多从、链式复制支持
双机部署脚本化自动搭建Ansible/脚本工具
来源:https://www.jb51.net/database/358545pzu.htm
上一篇PostgreSQL连接数过多问题原因分析及连接池优化方案 下一篇PostgreSQL数据恢复从原理到实战完整指南
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Redis是什么:核心特性、架构与应用场景解析
数据库 · 2026-09-01

Redis是什么:核心特性、架构与应用场景解析

Redis是一款基于内存的键值型NoSQL数据库,以超高读写速度和丰富的数据结构著称。本文系统梳理Redis的核心特性、架构组成、性能优势及典型应用场景,并通过与Memcached、MySQL、MongoDB的对比,帮助开发者快速判断Redis是否适合当前业务需求。

Windows 安装 MongoDB 完整图文教程
数据库 · 2026-09-01

Windows 安装 MongoDB 完整图文教程

本文详细介绍在 Windows 系统上安装 MongoDB 的完整流程。从官网下载 MSI 安装包开始,逐步演示自定义安装路径、配置 Windows 服务、跳过 MongoDB Compass 等关键选项,并提供通过系统服务列表验证安装是否成功的方法,帮助开发者快速搭建本地 MongoDB 环境。

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动
数据库 · 2026-09-01

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动

本文详解在 Linux 系统下安装 MongoDB 的完整流程,涵盖依赖包安装、二进制包下载解压、环境变量配置、数据与日志目录创建及服务启动验证。通过标准化命令与路径说明,帮助开发者快速完成部署并确认服务状态。

MacOS安装MongoDB完整教程
数据库 · 2026-09-01

MacOS安装MongoDB完整教程

本文介绍在MacOS系统下安装MongoDB的完整流程,涵盖下载、解压、目录配置、环境变量设置及服务启动。通过明确的命令与参数说明,帮助开发者快速完成环境搭建并验证安装结果。

Ubuntu系统安装与配置Redis完整指南
数据库 · 2026-09-01

Ubuntu系统安装与配置Redis完整指南

本文详解在Ubuntu系统中安装Redis的两种主流方式:apt在线安装与源码编译安装。涵盖版本选择逻辑、服务启停与状态检查、连接验证方法,以及在线练习工具与桌面GUI客户端的对比与使用建议,帮助开发者快速搭建并验证Redis运行环境。