news 2026/7/23 20:16:41

[特殊字符] 干货 | PostgreSQL 流复制搭建保姆级教程,生产环境可直接用!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[特殊字符] 干货 | PostgreSQL 流复制搭建保姆级教程,生产环境可直接用!

📌 摘要:数据无价,高可用是底线。本文手把手教你搭建 PostgreSQL 主从流复制环境,涵盖环境规划、主从配置、复制槽管理及同步模式切换,步骤详细,建议收藏!

在数据库运维中,高可用(HA数据安全永远是第一要务。PostgreSQL 的流复制(Streaming Replication)机制是实现主从热备、读写分离的基础。

很多同学在搭建过程中容易在权限、配置文件或网络连通性上踩坑。今天,我们整理了一份**"保姆级"**的 PG 流复制搭建文档,基于两台 CentOS 主机,从 0 到 1 完成搭建。


📋 一、环境规划

在开始之前,请确保两台主机网络互通,并关闭防火墙或开放 5432 端口。

🖥️ 主机规划表

主机名

IP 地址

角色

说明

node1

192.168.171.43

Master(主)

提供写服务,同步 WAL 日志

node2

192.168.171.44

Standby(备)

提供读服务,实时回放日志

⚠️注意:本文演示使用二进制包安装(tar.gz),生产环境建议使用 yum/apt 或源码编译,并注意权限安全。


🛠️ 二、主节点 (node1) 配置

1️⃣ 创建系统用户

为了安全,数据库不应使用 root 运行。我们在 node1 上执行:

# 创建组和用户 getent group postgres || sudo groupadd postgres id postgres &>/dev/null || sudo useradd -g postgres -m -d /home/postgres -s /bin/bash postgres # 设置密码 (生产环境请修改!) echo postgres:Rn#tU02021 | chpasswd # 配置免密 sudo (方便运维,生产环境建议限制命令) echo "postgres ALL=(ALL)NOPASSWD:ALL" >>/etc/sudoers # 创建安装目录 su - postgres -c 'mkdir -p /home/postgres/opt'

2️⃣ 安装数据库

将安装包PostgreSQL.tar.gz上传至/home/postgres/opt并解压:

su - postgres cd /home/postgres/opt tar -xvf PostgreSQL.tar.gz

3️⃣ 配置环境变量

编辑/home/postgres/.bash_profile

export PATH=/home/postgres/opt/PostgreSQL/bin:$PATH export LD_LIBRARY_PATH=/home/postgres/opt/PostgreSQL/lib

生效配置:

source /home/postgres/.bash_profile

4️⃣ 初始化与目录准备

# 创建归档目录 mkdir -p /home/postgres/opt/wal_archivedir chown -R postgres:postgres /home/postgres/opt/ # 初始化数据库 initdb -D /home/postgres/opt/data

5️⃣ 核心配置文件修改

编辑vi /home/postgres/opt/data/postgresql.conf,重点关注以下参数:

listen_addresses = '*' # 监听所有地址 port = 5432 # 端口 wal_level = replica # 开启复制级别 archive_mode = on # 开启归档 archive_command = 'test ! -f /home/postgres/opt/wal_archivedir/%f && cp %p /home/postgres/opt/wal_archivedir/%f' max_wal_senders = 10 # 最大复制连接数 wal_keep_size = 200MB # 保留 WAL 大小 hot_standby = on # 允许备库查询 logging_collector = on # 开启日志收集

编辑vi /home/postgres/opt/data/pg_hba.conf,允许复制连接:

# 允许复制用户连接 host replication replicator 0.0.0.0/0 md5 # 允许所有业务连接 host all all 0.0.0.0/0 md5

6️⃣ 启动并创建复制用户

# 启动数据库 pg_ctl -D /home/postgres/opt/data start # 进入 psql 创建用户 psql -U postgres

在 SQL 提示符下执行:

CREATE USER replicator REPLICATION LOGIN CONNECTION LIMIT 5 ENCRYPTED PASSWORD '7$T|6as-dfojg10NBS3';

7️⃣ 配置免密认证 (.pgpass)

为了主备之间通信免密,在 postgres 家目录创建.pgpass

vi /home/postgres/.pgpass

内容如下(注意格式:主机:端口:数据库:用户:密码):

192.168.171.43:5432:replication:replicator:7$T|6as-dfojg10NBS3 192.168.171.44:5432:replication:replicator:7$T|6as-dfojg10NBS3

🛑重要:必须修改权限为 600,否则无效!

chmod 0600 /home/postgres/.pgpass

📦 三、备节点 (node2) 配置

1️⃣ 基础环境准备

在 node2 上重复主节点步骤 1、2、3(创建用户、解压安装包、配置环境变量)。

2️⃣ 创建数据目录

su - postgres mkdir -p /home/postgres/opt/data chmod 755 /home/postgres/opt/data

3️⃣ 配置免密认证

同样在 node2 的 postgres 家目录下创建.pgpass,内容同主节点,权限设为 0600

4️⃣ 执行基备份 (关键步骤)

使用pg_basebackup从主节点拉取全量数据并自动配置复制参数。

pg_basebackup -h 192.168.171.43 -U replicator -F p -P -X stream -R -D /home/postgres/opt/data

📖 参数解析:

参数

说明

-h

主库 IP

-U

复制用户

-F p

纯文本格式

-P

显示进度

-X stream

流式传输 WAL

-R

自动生成 standby.signal 和配置连接信息

-D

数据目录

5️⃣ 启动备库

pg_ctl -D /home/postgres/opt/data start

此时,备库应处于只读模式,并开始同步主库数据。


🔍 四、验证复制状态

登录主库 (node1)的 psql,执行以下 SQL 查看复制状态:

select * from pg_stat_replication;

✅ 成功标志:

如果看到state字段为streaming,且client_addr为备库 IP,说明流复制搭建成功!

-[ RECORD 1 ]----+------------------------------ usename | replicator client_addr | 192.168.171.44 state | streaming ← 关键状态 sync_state | async

🚀 五、进阶:复制槽与同步模式

1️⃣ 使用物理复制槽 (Replication Slot)

作用:防止主库在备库未接收时过早清理 WAL 日志,避免备库断连后无法追平。

主库创建槽:

select * from pg_create_physical_replication_slot('slave');

备库关联槽:

修改备库postgresql.conf,添加:

primary_slot_name = 'slave'

重启备库生效。再次在主库查询pg_replication_slots,可见activet

2️⃣ 异步改同步 (Sync Replication)

默认是异步复制(主库提交不等待备库),数据安全性稍低。若需强一致性,可改为同步。

主库修改postgresql.conf

synchronous_commit = on synchronous_standby_names = '*'

⚠️注意:重启主库后,主库事务提交将等待备库确认,安全性提高,但写入性能会有所下降


💡 六、避坑指南 & 总结

🔴 常见问题速查表

问题

解决方案

权限问题

.pgpass文件权限必须是0600,数据目录属主必须是postgres

网络防火墙

确保 5432 端口在两台机器间互通

版本一致

主备节点的 PostgreSQL 大版本最好保持一致

安全警告

本文密码、sudo 配置仅用于测试,生产环境请强化安全策略

🎉 搭建成功!

现在你拥有了一个具备高可用基础的 PostgreSQL 集群。后续可以结合KeepalivedPatroni实现自动故障切换。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 14:21:17

Kafka-King:一站式Kafka集群管理解决方案

Kafka-King:一站式Kafka集群管理解决方案 【免费下载链接】Kafka-King A modern and practical kafka GUI client 项目地址: https://gitcode.com/gh_mirrors/ka/Kafka-King Kafka-King是一款现代化、图形化的Kafka集群管理工具,专为开发者和运维…

作者头像 李华
网站建设 2026/7/23 20:15:50

FUTURE POLICE与数据库集成:将语音解构结果存入MySQL并进行查询分析

FUTURE POLICE与数据库集成:将语音解构结果存入MySQL并进行查询分析 你是不是也遇到过这样的场景?手头有一大堆会议录音、客服对话或者访谈音频,用FUTURE POLICE处理完后,生成了一大堆结构化的文本、情感标签和说话人信息。这些数…

作者头像 李华
网站建设 2026/7/14 14:21:20

Rainmeter网络带宽限制器集成:终极流量控制实现指南 [特殊字符]

Rainmeter网络带宽限制器集成:终极流量控制实现指南 🚀 【免费下载链接】rainmeter Desktop customization tool for Windows 项目地址: https://gitcode.com/gh_mirrors/ra/rainmeter 想要在Windows桌面上实时监控网络流量并实现智能带宽控制吗&…

作者头像 李华
网站建设 2026/7/14 14:21:21

如何用oapi-codegen生成雪花算法分布式ID代码:完整指南

如何用oapi-codegen生成雪花算法分布式ID代码:完整指南 【免费下载链接】oapi-codegen Generate Go client and server boilerplate from OpenAPI 3 specifications 项目地址: https://gitcode.com/gh_mirrors/oa/oapi-codegen 在分布式系统中,雪…

作者头像 李华