跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
SQL

PostgreSQL 高可用实战:主从流复制搭建与配置详解

详细讲解 PostgreSQL 主从流复制的高可用搭建流程。内容包括环境准备、主库参数配置(WAL、归档、认证)、从库初始化(pg_basebackup)、数据同步验证以及故障切换操作。旨在帮助开发者构建稳定的数据库容灾方案,避免单点故障风险。

Stephaine Walsh发布于 2026/3/26更新于 2026/10/25129 浏览
PostgreSQL 高可用实战:主从流复制搭建与配置详解

作为数据库开发者,单点故障导致的业务停摆是常见风险。PostgreSQL 原生流复制功能强大,通过合理配置即可低成本实现高可用。

本文将基于 CentOS/Ubuntu 环境下的 PostgreSQL 14,介绍从零搭建、配置调优到故障演练的完整流程。

1. 环境准备

1.1 基础环境要求
节点类型服务器地址系统版本PostgreSQL 版本核心要求
主库(Master)192.168.42.140(示例)CentOS 7/8/9 或 Ubuntu 20.04+14开启网络端口、关闭防火墙 / 放行 5432 端口
从库(Slave/Standby)192.168.42.145(示例)与主库一致与主库完全一致与主库网络互通、磁盘空间不小于主库
1.2 安装 PostgreSQL

确保两台服务器均安装相同版本的 PostgreSQL。

2. 主库配置

2.1 修改 PostgreSQL 主配置文件

主配置文件路径:/var/lib/pgsql/14/data/postgresql.conf

vim /var/lib/pgsql/14/data/postgresql.conf 

修改以下核心参数(取消注释并调整值):

# 1. 监听地址(允许从库连接,可指定从库 IP 或 0.0.0.0 允许所有)
listen_addresses = '*'

# 2. 开启归档模式(主从复制依赖)
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/14/archive/%f'
# %p=归档文件路径,%f=归档文件名
# 提前创建归档目录
mkdir -p /var/lib/pgsql/14/archive && chown -R postgres:postgres /var/lib/pgsql/14/archive

# 3. WAL 日志配置(保证复制可靠性)
wal_level = replica
wal_buffers = 16MB
max_wal_senders = 10
wal_keep_size = 1GB

# 4. 同步模式(可选,按需配置)
# synchronous_commit = on
# synchronous_standby_names = 'slave1'

# 5. 其他优化(可选)
 = 
max_connections
1000
2.2 修改客户端认证配置文件

文件路径:/var/lib/pgsql/14/data/pg_hba.conf

vim /var/lib/pgsql/14/data/pg_hba.conf 

添加从库的连接授权(允许从库 IP 通过复制用户连接):

host replication repl_user 192.168.42.145/32 md5
host all all 192.168.42.0/24 md5
2.3 创建复制专用用户

切换到 postgres 用户,执行 SQL 命令创建用于主从复制的专用用户(需授予复制权限):

su - postgres psql 

执行 SQL:

-- 创建复制用户(密码自定义,示例:Repl@123456)
CREATE ROLE repl_user WITH REPLICATION LOGIN ENCRYPTED PASSWORD '********';
-- 验证用户(可选)
\du repl_user;
-- 退出 psql
\q 
2.4 重启主库使配置生效
systemctl restart postgresql-14
systemctl status postgresql-14
sudo -u postgres psql -c "SELECT pg_is_in_recovery();"
# 主库返回 f(非恢复模式)
2.5 备份主库数据(供从库初始化)

使用 pg_basebackup 工具备份主库数据,该工具专门用于 PostgreSQL 复制环境的从库初始化:

# 切换到 postgres 用户
su - postgres
# 执行备份(备份到临时目录,后续拷贝到从库)
pg_basebackup -h 192.168.42.140 -U repl_user -p 5432 -D /tmp/pg_master_backup -F p -X s -P -R
# 参数说明:
# -h:主库地址
# -U:复制用户
# -p:主库端口
# -D:备份目录
# -F p:输出格式为普通文件(与主库数据目录结构一致)
# -X s:备份过程中同步复制 WAL 日志,保证备份一致性
# -P:显示备份进度
# -R:自动生成复制所需的 standby.signal 文件和 postgresql.auto.conf 配置,简化从库配置

备份完成后,将备份目录打包拷贝到从库的 /var/lib/pgsql/14/ 目录下(可通过 scp 传输):

tar -zcvf pg_master_backup.tar.gz /tmp/pg_master_backup
scp pg_master_backup.tar.gz [email protected]:/var/lib/pgsql/14

3. 从库配置

3.1 停止从库 PostgreSQL 服务并清理原有数据目录
# 停止从库服务
systemctl stop postgresql-14
# 清理原有数据目录(初始化后的空目录,需替换为主库备份)
mv /var/lib/pgsql/14/data /var/lib/pgsql/14/data_bak
# 备份原有目录,防止误删
mkdir -p /var/lib/pgsql/14/data
3.2 解压主库备份到从库数据目录
# 切换到 postgres 用户
su - postgres
# 解压备份包
tar -zxvf /var/lib/pgsql/14/pg_master_backup.tar.gz -C /var/lib/pgsql/14/
# 移动备份数据到 data 目录
mv /var/lib/pgsql/14/tmp/pg_master_backup/* /var/lib/pgsql/14/data/
# 修改目录权限(必须为 postgres 用户和组)
chown -R postgres:postgres /var/lib/pgsql/14/data
chmod 700 /var/lib/pgsql/14/data
3.3 验证 / 修改从库复制配置

由于主库备份时使用了 -R 参数,会自动生成 standby.signal(标识从库身份)和 postgresql.auto.conf(包含复制连接信息),无需手动创建:

# 查看自动生成的复制配置
cat /var/lib/pgsql/14/data/postgresql.auto.conf
ls /var/lib/pgsql/14/data/

若没有,则手动创建 standby.signal 并修改 postgresql.conf:

# 手动创建 standby.signal(标识为从库)
touch /var/lib/pgsql/14/data/standby.signal
# 编辑 postgresql.conf,添加复制配置
vim /var/lib/pgsql/14/data/postgresql.conf
# 从库专属配置
hot_standby = on
max_connections = 500
primary_conninfo = 'user=repl_user password=Repl@123456 host=192.168.42.140 port=5432'
3.4 启动从库服务
# 启动从库
systemctl start postgresql-14
systemctl enable postgresql-14
# 验证从库状态
systemctl status postgresql-14

4. 验证主从复制是否生效

4.1 主库验证复制状态
su - postgres psql
# 查看复制连接状态(可看到从库的连接信息)
SELECT * FROM pg_stat_replication;
# 输出说明:
# - usename:repl_user(复制用户)
# - client_addr:192.168.42.145(从库 IP)
# - state:streaming(表示正在流式复制)
# - sync_state:async(异步复制)或 sync(同步复制,需主库配置 synchronous_commit=on)
4.2 从库验证复制状态
su - postgres psql
# 1. 验证是否处于恢复模式(从库返回 t,主库返回 f)
SELECT pg_is_in_recovery();
4.3 验证主从数据一致性
# 主库创建测试表并插入数据
# 主库执行:
CREATE DATABASE test_repl;
\c test_repl;
CREATE TABLE user_info (id int, name varchar(50));
INSERT INTO user_info VALUES (1, 'test_replication');

# 从库执行(查看是否同步到数据)
\c test_repl;
SELECT * FROM user_info;

5. 主从复制常用操作

5.1 切换主从(故障转移,简易版)

当主库故障时,可将从库提升为主库:

# 从库执行(停止恢复模式,提升为主库)
su - postgres psql -c "SELECT pg_promote();"
# 验证:提升后从库 pg_is_in_recovery() 返回 f
psql -c "SELECT pg_is_in_recovery();"
5.2 监控复制延迟
# 从库执行,查看复制延迟(单位:秒)
SELECT now() - pg_last_xact_replay_timestamp() AS replication_delay;
5.3 新增从库

只需重复'从库配置'步骤,使用主库(或现有从库,需开启级联复制)的 pg_basebackup 备份初始化即可。

总结

这套 PostgreSQL 主从架构方案,通过原生流复制实现数据库容灾,既能扛住日常的业务压力,又能应对突发的主库故障。关键是做好基础配置、监控和切换流程。

目录

  1. 1. 环境准备
  2. 1.1 基础环境要求
  3. 1.2 安装 PostgreSQL
  4. 2. 主库配置
  5. 2.1 修改 PostgreSQL 主配置文件
  6. 1. 监听地址(允许从库连接,可指定从库 IP 或 0.0.0.0 允许所有)
  7. 2. 开启归档模式(主从复制依赖)
  8. %p=归档文件路径,%f=归档文件名
  9. 提前创建归档目录
  10. 3. WAL 日志配置(保证复制可靠性)
  11. 4. 同步模式(可选,按需配置)
  12. synchronous_commit = on
  13. synchronousstandbynames = 'slave1'
  14. 5. 其他优化(可选)
  15. 2.2 修改客户端认证配置文件
  16. 2.3 创建复制专用用户
  17. 2.4 重启主库使配置生效
  18. 主库返回 f(非恢复模式)
  19. 2.5 备份主库数据(供从库初始化)
  20. 切换到 postgres 用户
  21. 执行备份(备份到临时目录,后续拷贝到从库)
  22. 参数说明:
  23. -h:主库地址
  24. -U:复制用户
  25. -p:主库端口
  26. -D:备份目录
  27. -F p:输出格式为普通文件(与主库数据目录结构一致)
  28. -X s:备份过程中同步复制 WAL 日志,保证备份一致性
  29. -P:显示备份进度
  30. -R:自动生成复制所需的 standby.signal 文件和 postgresql.auto.conf 配置,简化从库配置
  31. 3. 从库配置
  32. 3.1 停止从库 PostgreSQL 服务并清理原有数据目录
  33. 停止从库服务
  34. 清理原有数据目录(初始化后的空目录,需替换为主库备份)
  35. 备份原有目录,防止误删
  36. 3.2 解压主库备份到从库数据目录
  37. 切换到 postgres 用户
  38. 解压备份包
  39. 移动备份数据到 data 目录
  40. 修改目录权限(必须为 postgres 用户和组)
  41. 3.3 验证 / 修改从库复制配置
  42. 查看自动生成的复制配置
  43. 手动创建 standby.signal(标识为从库)
  44. 编辑 postgresql.conf,添加复制配置
  45. 从库专属配置
  46. 3.4 启动从库服务
  47. 启动从库
  48. 验证从库状态
  49. 4. 验证主从复制是否生效
  50. 4.1 主库验证复制状态
  51. 查看复制连接状态(可看到从库的连接信息)
  52. 输出说明:
  53. - usename:repl_user(复制用户)
  54. - client_addr:192.168.42.145(从库 IP)
  55. - state:streaming(表示正在流式复制)
  56. - syncstate:async(异步复制)或 sync(同步复制,需主库配置 synchronouscommit=on)
  57. 4.2 从库验证复制状态
  58. 1. 验证是否处于恢复模式(从库返回 t,主库返回 f)
  59. 4.3 验证主从数据一致性
  60. 主库创建测试表并插入数据
  61. 主库执行:
  62. 从库执行(查看是否同步到数据)
  63. 5. 主从复制常用操作
  64. 5.1 切换主从(故障转移,简易版)
  65. 从库执行(停止恢复模式,提升为主库)
  66. 验证:提升后从库 pgisin_recovery() 返回 f
  67. 5.2 监控复制延迟
  68. 从库执行,查看复制延迟(单位:秒)
  69. 5.3 新增从库
  70. 总结

更多推荐文章

查看全部
  • ToDesk ToClaw 实测:AI 融入远程桌面工作流分析
  • 协作机器人轴孔装配的轨迹优化与智能搜索技术
  • 5 款 AI 写作工具横评:DeepSeek、Kimi、笔灵等网文创作辅助指南
  • Python 数据分析相比 Excel 的优势与入门指南
  • 骡子快跑 MuleRun:自进化 AI 数字员工开启 Agent 普及元年
  • 滑动窗口四题的共通解法
  • AI 大模型工程师职业前景与技术学习路径指南
  • 大模型领域 11 篇最新论文精选
  • Python 近期副业需求清单及常见项目类型
  • C++ 函数重载详解:调试技巧与性能优化实战
  • VSCode 与 PyCharm 配置 OpenCV 实战指南(Python/C++)
  • 企业如何落地大语言模型应用
  • C++11 核心特性详解:列表初始化、新式声明、范围 for 与 STL 变化
  • AI 电商详情页智能生成工作流:主图海报与详情页设计
  • 大型语言模型(LLM)核心技术与应用学习路线
  • MCP Server 商店:AI 即插即用与工具自动化实战
  • Pix4Dmapper 处理大疆无人机影像数据实战指南
  • React Web 基础应用核心知识体系
  • 深入解析 CGraph:高性能 C++ DAG 并行计算框架的架构设计与实战应用
  • Windows 下 Git Bash 安装与基础配置指南

相关免费在线工具

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online

  • CSV 工具包

    CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online