当前位置: 首页 > news >正文

Ubuntu 系统部署 PostgreSQL 主从复制 + 流复制(Streaming Replication)完整操作指南

PostgreSQL 集群是通过网络连接的多个 PostgreSQL 服务器实例协同工作,以提供高可用性、性能优化和数据安全保障的解决方案。

PostgreSQL 集群核心组件与角色

  1. Primary Node(主节点)
    • 功能:处理所有写操作(INSERT/UPDATE/DELETE),维护最新数据状态,是集群的核心数据源。
    • 特点:唯一写入入口,数据变更通过复制机制同步至备节点。
  2. Standby Node(备节点)
    • 功能:通过复制主节点数据保持一致性,可处理读操作(SELECT)实现读写分离。
    • 扩展性:支持一主多备架构,备节点数量可按需扩展。
  3. Failover(故障转移)
    • 机制:主节点故障时,系统自动将服务切换至备节点,确保业务连续性。
    • 触发条件:通过心跳检测或第三方工具(如Patroni)监控节点健康状态。
  4. Switchover(手动切换)
    • 场景:计划内维护时,管理员手动触发主备角色切换,实现零停机升级或配置调整。

高可用性实现原理

1. 数据冗余机制
  • WAL(Write-Ahead Logging)
    • 作用:所有数据修改先写入日志文件,故障时可恢复至一致状态。
    • 应用:流复制、逻辑复制均依赖WAL传输数据变更。
  • Replication Slots(复制槽)
    • 作用:防止主节点过早回收未同步的WAL日志,避免备节点数据缺失。
    • 适用场景:异步复制中确保数据完整性。
  • Heartbeat 检测
    • 机制:通过定期通信(如TCP保活包)监控节点状态,快速发现故障并触发切换。
2. 复制模式
  • 同步复制(Synchronous Replication)
    • 特点:主节点等待备节点确认数据写入后才返回成功,确保零数据丢失。
    • 代价:性能开销较高,延迟增加。
  • 异步复制(Asynchronous Replication)
    • 特点:主节点不等待备节点确认,性能更高。
    • 风险:极端情况下可能丢失少量数据。

PostgreSQL 主流集群方案

1. 原生流复制(Streaming Replication)
  • 原理:主节点通过流式传输WAL日志至备节点,备节点重放日志保持数据一致。
  • 特点
    • 支持同步/异步复制,配置简单。
    • 原生支持,无需额外工具。
  • 适用场景:高可用性、读写分离(如Web应用、数据分析)。
2. 逻辑复制(Logical Replication)
  • 原理:将数据变更解析为SQL或特定格式事件,发送至备节点重放。
  • 特点
    • 支持表级复制,灵活选择复制对象。
    • 允许跨版本/跨数据库复制,但延迟可能较高。
  • 适用场景:数据迁移、跨库同步、细粒度控制需求。
3. 第三方工具方案
工具原理特点适用场景
Patroni基于etcd/ZooKeeper实现自动化故障切换和配置管理。提供自动检测、切换、丰富的API和监控接口。高度自动化、灵活的高可用集群。
Pgpool-II作为中间件提供连接池、负载均衡、高可用性功能。支持多种负载策略、并行查询、查询缓存。连接池、负载均衡、高并发场景。
Repmgr管理基于流复制的集群,提供命令行工具和守护进程。支持故障检测、自动转移、日志通知。简化流复制集群的管理和监控。
4. 分布式数据库解决方案
方案原理特点适用场景
Postgres-XC/XL分离SQL解析层和数据存取层,实现分布式架构。支持水平扩展、全局事务管理(GTM)、复制/分片模式。大规模数据、高并发OLTP系统。
Citus以插件形式扩展PostgreSQL,实现自动分片和复制。提供透明数据分布、查询处理机制,支持多租户。

✅ 部署目标

  • 主节点(Primary)192.168.22.131
  • 备节点(Standby)192.168.22.215
  • PostgreSQL 版本:14(Ubuntu 官方仓库)
  • 复制用户replicator,密码:StrongPass123
  • 数据目录/var/lib/postgresql/14/main
  • 配置目录/etc/postgresql/14/main

一、两台机器都安装 PostgreSQL 14

# 更新系统
sudo apt update# 安装 PostgreSQL 14
sudo apt install -y postgresql-14 postgresql-client-14# 确保服务运行(主库需要,备库后续会重建数据)
sudo systemctl start postgresql@14-main
sudo systemctl enable postgresql@14-main

二、配置主节点(192.168.22.131)

1. 创建复制用户

sudo -u postgres psql -c "CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'StrongPass123';"

2. 修改 postgresql.conf

sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /etc/postgresql/14/main/postgresql.conf
sudo sed -i "s/wal_level = minimal/wal_level = replica/g" /etc/postgresql/14/main/postgresql.conf# 添加或确保以下参数(追加到文件末尾)
cat <<EOF | sudo tee -a /etc/postgresql/14/main/postgresql.conf# Replication settings
max_wal_senders = 10
wal_keep_size = 1GB
hot_standby = on
EOF

3. 配置 pg_hba.conf 允许备库复制

echo "host replication replicator 192.168.22.215/32 md5" | sudo tee -a /etc/postgresql/14/main/pg_hba.conf

4. 重启主库

sudo systemctl restart postgresql@14-main

三、配置备节点(192.168.22.215)

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

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

2. 删除原有目录并设置目录权限

sudo rm -rf /var/lib/postgresql/14/main
sudo mkdir -pv /var/lib/postgresql/14/main
sudo chown postgres:postgres /var/lib/postgresql/14/main
sudo chmod 0755 /var/lib/postgresql/14/main

3. 使用 pg_basebackup 拉取备份

sudo -u postgres pg_basebackup \-h 192.168.22.131 \-U replicator \-D /var/lib/postgresql/14/main \-P -v -R -W

参数说明:

  • -h:主库 IP
  • -U:复制用户名
  • -D:本地数据目录
  • -P:显示进度
  • -v:详细输出
  • -R关键! 自动生成 standby.signal 并在 postgresql.auto.conf 中写入 primary_conninfo
  • -W:提示输入密码

执行后会提示输入 replicator 的密码,输入密码:StrongPass123

-R 参数会自动生成 standby.signal 和连接信息。

4. 确认关键文件存在

ls /var/lib/postgresql/14/main/standby.signal  # 应存在

5. 修改目录权限(关键!)

sudo chmod 0700 /var/lib/postgresql/14/main

5. 启动备库

sudo systemctl start postgresql@14-main

四、验证复制是否成功

在主库插入测试数据:

sudo -u postgres psql -c "CREATE TABLE IF NOT EXISTS test_sr (id SERIAL, msg TEXT);"
sudo -u postgres psql -c "INSERT INTO test_sr (msg) VALUES ('Replication works');"

在备库查询(只读):

sudo -u postgres psql -c "SELECT * FROM test_sr;"

✅ 如果看到数据,说明 流复制部署成功

五、查看复制状态

在主库执行:

SELECT * FROM pg_stat_replication;

在备库执行:

SELECT * FROM pg_stat_wal_receiver;

通过本文的逐步操作,我们成功在 Ubuntu 系统上搭建了一套稳定、安全的 PostgreSQL 14 主从流复制架构。整个过程涵盖了主库配置、复制用户创建、备库初始化、权限修正以及状态验证等关键环节,并特别规避了常见的陷阱——如 wal_keep_size 单位格式错误、数据目录权限不合规、Bash 特殊字符解析冲突等问题。

http://www.dtcms.com/a/596674.html

相关文章:

  • 福州企业网站推广定制wordpress国人模板
  • 场景落地绘就创新图景,人工智能迎来应用浪潮
  • 数据结构(20)
  • 线性代数 - 理解求解矩阵特征值的特征方程
  • Swift的逃逸闭包
  • ESP32基础-GPIO_LED进阶
  • AT指令连接onenet平台(mqtt协议)
  • 二分搜索中 `right = mid` 而非 `right = mid + 1` 的解释
  • 走进Linux的世界:进程优先级
  • 蛙蛙写作网站中国建设银行网站-个人客
  • jetson开机之前自启脚本sudo ifconfig 如何不需要输入密码
  • 环评登记表在哪个网站做php网站开发试题
  • K8S RD: Kubernetes核心技术之管理、高可用与配置详解
  • Rust:Trait 抽象接口 特征约束
  • 【Windows】tauri+rust运行打包工具链安装
  • 网站被人抄袭怎么办哪家做网站的公司
  • 在 Linux 上实现 Spring Boot 程序的自动启动与守护运行
  • 得物TiDB升级实践
  • uni-app微信小程序相机组件二次拍照白屏问题的排查与解决
  • 邯郸大名网站建设网站服务器类型查询
  • 远程在线诊疗|在线诊疗|基于java和小程序的在线诊疗系统小程序设计与实现(源码+数据库+文档)
  • Linux进程间通信(IPC)常用方法精要
  • 展望无人机的未来发展,技术趋势和应用前景
  • 黄页 网站模板什么是展示型网站
  • gov域名网站有哪些如何建一个免费试用网站
  • Vue中 class 和 style 属性的区别对比
  • 视频融合平台EasyCVR:构建智慧化城市/乡镇污水处理厂综合安防与运营监管方案
  • 【ZeroRange WebRTC】KVS WebRTC C SDK 崩溃分析报告
  • 库卡机器人编程语言 | 深入了解库卡机器人的编程方法与应用
  • 移动+协作+视觉=?复合型机器人重新定义智能产线