下面是 postgresql 主从复制(streaming replication)环境的安装与配置指南,适合在两台或多台服务器之间构建一主一从(或一主多从)的高可用读写分离系统。
环境准备
| 角色 | 主机名/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 或 /var/lib/pgsql/15/data/postgresql.conf
# 启用 wal 日志并设置参数 wal_level = replica max_wal_senders = 10 wal_keep_size = 128mb hot_standby = on listen_addresses = '*'
2. 修改pg_hba.conf(允许从库连接复制)
# 添加允许从库复制连接 host replication all 192.168.1.11/32 md5
3. 重启主库
sudo systemctl restart postgresql
三、从库配置(192.168.1.11)
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 中允许该 ip 使用此用户连接。
3. 修改复制用户密码(如果-r中未设置)
编辑 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 是否同步成功。
五、验证主从同步
主库执行:
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/脚本工具 |
到此这篇关于postgresql 主从集群搭建的文章就介绍到这了,更多相关postgresql 主从集群搭建内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论