PostgreSQL 18 主从架构实战:3步配置流复制,实现读写分离与高可用

📅 2026/7/8 12:17:57
PostgreSQL 18 主从架构实战:3步配置流复制,实现读写分离与高可用
PostgreSQL 18 主从架构实战3步配置流复制实现读写分离与高可用在当今数据驱动的业务环境中数据库的高可用性和读写分离能力已成为企业级应用的标配。PostgreSQL 18 作为最新版本的开源关系型数据库其流复制功能为企业提供了稳定可靠的数据同步方案。本文将带您深入实践通过三个关键步骤快速搭建生产级主从架构。1. 环境准备与主节点配置在开始配置前我们需要确保所有节点满足以下基础条件操作系统Alibaba Cloud Linux 3/CentOS 8 或兼容系统硬件资源建议至少4核CPU、8GB内存、100GB存储网络环境节点间网络延迟5ms建议使用内网专线连接1.1 安装PostgreSQL 18首先在主节点执行以下命令添加官方YUM源并安装# 禁用系统默认PostgreSQL模块仅CentOS 8需要 if [ -f /etc/os-release ]; then . /etc/os-release if [ $ID centos ] [ ${VERSION_ID%%.*} 8 ]; then sudo dnf --assumeyes module disable postgresql fi fi # 添加PostgreSQL官方仓库使用阿里云镜像加速 sudo rpm -Uvh http://mirrors.cloud.aliyuncs.com/postgresql/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo sed -i shttps://download.postgresql.org/pubhttp://mirrors.cloud.aliyuncs.com/postgresqlg /etc/yum.repos.d/pgdg-redhat-all.repo sudo sed -i s\$releasever8g /etc/yum.repos.d/pgdg-redhat-all.repo # 安装服务端软件 sudo dnf install -y postgresql18-server1.2 初始化主库配置初始化数据库并修改关键参数# 初始化数据目录 sudo /usr/pgsql-18/bin/postgresql-18-setup initdb # 修改postgresql.conf核心参数 sudo tee -a /var/lib/pgsql/18/data/postgresql.conf EOF listen_addresses * wal_level replica max_wal_senders 3 archive_mode on archive_command test ! -f /var/lib/pgsql/18/archivedir/%f cp %p /var/lib/pgsql/18/archivedir/%f hot_standby on EOF # 创建归档目录 sudo mkdir -p /var/lib/pgsql/18/archivedir sudo chown postgres:postgres /var/lib/pgsql/18/archivedir1.3 配置复制用户与权限创建专用复制账号并设置访问规则# 启动服务 sudo systemctl enable --now postgresql-18 # 创建复制用户 sudo -u postgres psql -c CREATE ROLE replica_user WITH REPLICATION LOGIN PASSWORD SecurePass123!; # 配置pg_hba.conf访问规则 sudo tee -a /var/lib/pgsql/18/data/pg_hba.conf EOF host replication replica_user 从节点IP/32 scram-sha-256 EOF # 创建物理复制槽防止WAL日志被过早清理 sudo -u postgres psql -c SELECT pg_create_physical_replication_slot(standby_slot1); # 重启服务生效 sudo systemctl restart postgresql-18注意将从节点IP替换为实际从节点内网IP生产环境密码应使用更复杂的组合2. 从节点部署与数据同步从节点需要从主库获取基础数据并配置为只读模式。2.1 基础安装与准备在从节点执行与主节点相同的安装步骤但跳过初始化# 安装软件包同主节点 sudo dnf install -y postgresql18-server # 创建密码文件 sudo -u postgres bash -c echo 主节点IP:5432:replication:replica_user:SecurePass123! ~/.pgpass sudo -u postgres chmod 600 ~/.pgpass2.2 数据同步与配置使用pg_basebackup进行基础备份# 清空现有数据目录 sudo rm -rf /var/lib/pgsql/18/data/* sudo chown postgres:postgres /var/lib/pgsql/18/data # 从主库同步数据 sudo -u postgres pg_basebackup -h 主节点IP -D /var/lib/pgsql/18/data -U replica_user -P -v --wal-methodstream -R # 创建standby标识文件 sudo -u postgres touch /var/lib/pgsql/18/data/standby.signal关键配置参数说明参数文件关键配置项作用说明postgresql.confprimary_conninfo主库连接信息postgresql.confprimary_slot_name复制槽名称standby.signal(空文件)声明该实例为备库2.3 启动从节点服务完成配置后启动从节点sudo systemctl enable --now postgresql-18 # 验证复制状态 sudo -u postgres psql -c SELECT pid, state, sync_state, replay_lag FROM pg_stat_replication;3. 高可用验证与优化架构搭建完成后需要进行全面的功能验证和性能调优。3.1 复制状态监控主节点上执行以下命令检查复制状态-- 查看复制连接状态 SELECT client_addr AS 从节点IP, state AS 状态, sync_state AS 同步模式, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn)) AS 延迟大小, EXTRACT(SECOND FROM (now() - reply_time)) AS 延迟秒数 FROM pg_stat_replication; -- 查看复制槽状态 SELECT slot_name, active, restart_lsn, confirmed_flush_lsn FROM pg_replication_slots;3.2 故障转移测试模拟主节点故障并验证高可用性停止主节点服务sudo systemctl stop postgresql-18提升从节点为主sudo -u postgres pg_ctl promote -D /var/lib/pgsql/18/data应用切换验证检查新主节点是否可读写验证历史数据完整性测试新写入数据是否持久化3.3 性能优化建议根据实际业务负载调整以下参数# 主节点postgresql.conf优化项 max_wal_senders 5 # 根据从节点数量调整 wal_keep_size 2GB # 保留的WAL日志大小 synchronous_commit remote_apply # 同步提交级别 # 从节点postgresql.conf优化项 hot_standby_feedback on # 避免主库vacuum清理正在查询的数据 max_standby_streaming_delay 30s # 查询冲突时的最大延迟4. 生产环境进阶配置对于企业级应用还需要考虑以下增强配置。4.1 同步复制配置确保数据零丢失的同步复制模式-- 在主节点执行 ALTER SYSTEM SET synchronous_standby_names standby_slot1; -- 验证配置 SELECT name, setting FROM pg_settings WHERE name LIKE synchronous%;同步模式对比模式配置值数据安全性性能影响异步off可能丢失少量数据最低同步remote_write可能丢失1个事务中等强同步remote_apply零数据丢失较高4.2 自动故障转移方案推荐使用Patroni等工具实现自动故障检测与切换# 示例Patroni配置片段 postgresql: parameters: wal_level: replica hot_standby: on use_pg_rewind: true recovery_conf: recovery_target_timeline: latest standby_mode: on4.3 监控与告警配置关键监控指标建议主节点SELECT pg_current_wal_lsn() AS current_lsn, pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS bytes_lag FROM pg_stat_replication;从节点SELECT pg_last_wal_receive_lsn() AS received_lsn, pg_last_wal_replay_lsn() AS replayed_lsn, pg_is_in_recovery() AS is_standby;通过以上步骤您已经成功搭建了PostgreSQL 18的高可用主从架构。这套方案不仅实现了数据的实时同步和读写分离还能在主机故障时快速恢复服务为业务连续性提供了坚实保障。