暂无图片
暂无图片
5
暂无图片
暂无图片
1
暂无图片

PostgreSQL 17 主从部署、配置优化及备份脚本最佳实践

www 2025-02-08
420

PostgreSQL 17 主从部署、配置优化及备份脚本最佳实践

PostgreSQL 作为一款功能强大且广泛应用的开源关系数据库管理系统,在企业级应用场景中发挥着重要作用。主从部署不仅能显著提升数据库的可用性,还可实现读写分离与数据备份。本文将深入介绍 PostgreSQL 17 主从部署的详细步骤、配置文件的优化策略,同时提供实用的备份脚本。

一、环境准备

在开展主从部署工作之前,务必确保满足以下条件:

  • 操作系统:推荐使用支持 PostgreSQL 运行的 Linux 系统,如 CentOS 7 或更高版本。
  • 服务器:至少准备两台服务器,分别作为主库(Master)和从库(Standby)。
  • 软件安装:在主库和从库上都完成 PostgreSQL 17 的安装。

安装 PostgreSQL 17

以 CentOS 系统为例,可通过 yum 进行安装,具体步骤如下:

# 安装 PostgreSQL 官方 yum 源 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm # 安装 PostgreSQL 17 yum install -y postgresql17-server # 初始化数据库 /usr/pgsql-17/bin/postgresql-17-setup initdb # 启动 PostgreSQL 服务 systemctl start postgresql-17 # 设置开机自启 systemctl enable postgresql-17
复制

二、主库配置

1. 创建复制用户

在主库上创建专门用于复制的用户,例如 replica,并赋予 REPLICATION 权限。

CREATE ROLE replica LOGIN REPLICATION ENCRYPTED PASSWORD 'your_password';
复制

2. 配置 pg_hba.conf

编辑 pg_hba.conf 文件,添加从库的 IP 地址和复制用户的访问权限。

# 允许从库通过 replica 用户进行复制连接 host replication replica 从库 IP/32 md5
复制

3. 配置 postgresql.conf

修改 postgresql.conf 文件,启用流复制相关参数。

# 监听所有 IP 地址 listen_addresses = '*' # 启用归档模式 archive_mode = on archive_command = 'cp %p /var/lib/pgsql/17/data/archive/%f' # 归档路径可自行调整 # 设置流复制相关参数 wal_level = replica max_wal_senders = 10 # 根据实际需求调整最大复制连接数 wal_keep_segments = 100 # 保留的 WAL 段数量,用于故障恢复时的数据同步
复制

4. 重启主库

修改完配置文件后,重启 PostgreSQL 服务使配置生效。

systemctl restart postgresql-17
复制

三、从库配置

1. 停止从库服务

在从库上停止 PostgreSQL 服务。

systemctl stop postgresql-17
复制

2. 清空数据目录

清空从库的数据目录,为从主库同步数据做准备。

rm -rf /var/lib/pgsql/17/data/*
复制

3. 使用 pg_basebackup 同步数据

使用 pg_basebackup 工具从主库同步数据到从库。

su - postgres pg_basebackup -h 主库 IP -U replica -D /var/lib/pgsql/17/data -P -R
复制
  • -h:主库的 IP 地址。
  • -U:复制用户。
  • -D:从库的数据目录。
  • -P:显示进度。
  • -R:生成 recovery.conf 配置文件(PostgreSQL 17 中为 standby.signalpostgresql.auto.conf)。

4. 配置 postgresql.conf

编辑 postgresql.conf 文件,启用从库相关参数。

# 启用热备模式 hot_standby = on # 从库可接受的最大连接数 max_connections = 200 # 根据实际需求调整
复制

5. 启动从库

完成配置后,启动 PostgreSQL 服务。

systemctl start postgresql-17
复制

四、验证主从部署

1. 在主库上检查复制状态

连接到主库的 PostgreSQL,执行以下 SQL 语句查看复制状态。

SELECT * FROM pg_stat_replication;
复制

若一切正常,会看到从库的相关信息,包括复制状态、同步进度等。

2. 在从库上检查接收状态

连接到从库的 PostgreSQL,执行以下 SQL 语句查看 WAL 接收状态。

SELECT * FROM pg_stat_wal_receiver;
复制

确保 state 字段显示为 streaming,表示从库正在正常接收主库的 WAL 日志。

五、主从切换

在某些情况下,如主库故障或计划维护,需要进行主从切换,步骤如下:

1. 提升从库为主库

在从库上执行以下命令,将从库提升为主库。

su - postgres pg_ctl promote
复制

2. 重新配置原主库为从库

若原主库恢复正常,需将其重新配置为从库。首先停止原主库服务,清空数据目录,然后使用 pg_basebackup 重新同步数据,并配置 postgresql.conf 文件为从库模式。

六、配置文件优化

1. 内存相关参数优化

shared_buffers

该参数表示数据库服务器用于缓存数据块的共享内存区域大小,增大此值可减少磁盘 I/O,提高查询性能。一般可设置为系统内存的 25% - 50%,例如系统有 8GB 内存,可设置为:

shared_buffers = '2GB'
复制

work_mem

决定了在排序操作和哈希表创建时使用的内存大小。对于复杂查询,适当增大该值可减少磁盘临时文件的使用,提高查询速度。通常设置为几百 MB,例如:

work_mem = '64MB'
复制

maintenance_work_mem

用于维护操作(如 VACUUM、CREATE INDEX 等)的内存大小。增大该值可加快这些操作的执行速度,一般设置为系统内存的 5% - 10%,例如:

maintenance_work_mem = '512MB'
复制

2. 磁盘 I/O 相关参数优化

wal_buffers

WAL(Write - Ahead Logging)缓冲区的大小,用于存储未写入磁盘的 WAL 记录。适当增大该值可减少 WAL 日志的磁盘 I/O,通常设置为 shared_buffers 的 3% - 5%,例如:

wal_buffers = '64MB'
复制

fsync

控制是否强制将数据同步写入磁盘。设置为 on 可保证数据的持久性,但会增加磁盘 I/O 开销;设置为 off 可提高性能,但在系统崩溃时可能会丢失部分数据。若对数据的持久性要求不是非常高,或者使用了电池备份的 RAID 控制器等可靠的存储设备,可考虑设置为 off

fsync = off
复制

synchronous_commit

控制事务提交时是否等待 WAL 记录写入磁盘。on 表示同步提交,off 表示异步提交。若对数据一致性要求不是特别高,为提高性能,可设置为 off

synchronous_commit = off
复制

3. 并发相关参数优化

max_connections

表示允许的最大客户端连接数。需根据系统性能和业务需求进行调整,一般小型应用可设置为几十到几百,大型应用可能需设置为上千,例如:

max_connections = 200
复制

max_worker_processes

表示系统中可以同时运行的后台工作进程的最大数量。通常可设置为 CPU 核心数的 2 - 4 倍,例如服务器有 4 个 CPU 核心,可设置为:

max_worker_processes = 8
复制

max_parallel_workers_per_gather

控制每个查询可以使用的并行工作进程的最大数量。可根据系统资源和查询复杂度进行调整,一般设置为 max_worker_processes 的一半左右,例如:

max_parallel_workers_per_gather = 4
复制

4. 日志相关参数优化

log_destination

指定日志的输出目标,为方便后续的日志分析,建议使用 csvlog

log_destination = 'csvlog'
复制

logging_collector

控制是否启用日志收集器,设置为 on 以启用日志收集:

logging_collector = on
复制

log_statement

指定哪些 SQL 语句需要记录到日志中。在开发和测试环境中,可设置为 'all' 以便全面记录 SQL 语句;在生产环境中,为减少日志量,可设置为 'ddl''mod'

log_statement = 'mod'
复制

5. 复制相关参数优化(主从部署场景)

wal_level

指定 WAL 日志的详细级别,对于流复制,需设置为 replica 或更高:

wal_level = 'replica'
复制

max_wal_senders

表示主库可以同时向从库发送 WAL 日志的最大连接数。根据从库的数量和并发复制需求进行调整,一般设置为比从库数量略大的值,例如有 3 个从库,可设置为:

max_wal_senders = 5
复制

wal_keep_segments

指定主库保留的 WAL 段数量,用于从库在网络中断等情况下恢复数据同步。根据网络稳定性和业务需求进行调整,一般设置为几十到几百,例如:

wal_keep_segments = 100
复制

修改配置文件后,需重启 PostgreSQL 服务使配置生效:

sudo systemctl restart postgresql-17
复制

七、PostgreSQL 备份脚本

以下是一个简单的 PostgreSQL 全量备份脚本示例,可将其保存为 pg_backup.sh,并添加执行权限:

#!/bin/bash # 备份目录 BACKUP_DIR="/var/backup/postgresql" # 数据库用户名 DB_USER="postgres" # 数据库名称 DB_NAME="your_database_name" # 日期格式 DATE=$(date +%Y%m%d%H%M%S) # 创建备份目录(如果不存在) mkdir -p $BACKUP_DIR # 执行备份 pg_dump -U $DB_USER $DB_NAME > $BACKUP_DIR/$DB_NAME-$DATE.sql # 检查备份是否成功 if [ $? -eq 0 ]; then echo "备份成功:$BACKUP_DIR/$DB_NAME-$DATE.sql" else echo "备份失败" fi
复制

使用方法

chmod +x pg_backup.sh ./pg_backup.sh
复制

八、最佳实践建议

  • 定期备份:无论是主库还是从库,都应定期进行全量和增量备份,以防止数据丢失。可使用上述备份脚本结合 cron 任务实现定期备份。
  • 监控与告警:设置监控系统,实时监控主从库的状态、复制延迟等指标,并配置告警机制,以便及时发现和处理问题。
  • 性能优化:根据实际业务需求,合理调整主从库的参数,如 max_connectionsshared_buffers 等,以提升数据库性能。
  • 测试与演练:定期进行主从切换测试和故障恢复演练,确保在实际故障发生时能够快速、准确地进行处理。

通过以上步骤和最佳实践建议,你可以成功部署并管理 PostgreSQL 17 的主从架构,同时优化数据库配置,提高数据库的可用性和性能。在实际应用中,应根据具体业务场景和需求进行适当调整和优化。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

星星之火
暂无图片
2月前
评论
暂无图片 0
支持 PostgreSQL 运行的 Linux 系统,如 CentOS 7 或更高版本
2月前
暂无图片 点赞
评论
目录
  • PostgreSQL 17 主从部署、配置优化及备份脚本最佳实践
    • 一、环境准备
      • 安装 PostgreSQL 17
    • 二、主库配置
      • 1. 创建复制用户
      • 2. 配置 pg_hba.conf
      • 3. 配置 postgresql.conf
      • 4. 重启主库
    • 三、从库配置
      • 1. 停止从库服务
      • 2. 清空数据目录
      • 3. 使用 pg_basebackup 同步数据
      • 4. 配置 postgresql.conf
      • 5. 启动从库
    • 四、验证主从部署
      • 1. 在主库上检查复制状态
      • 2. 在从库上检查接收状态
    • 五、主从切换
      • 1. 提升从库为主库
      • 2. 重新配置原主库为从库
    • 六、配置文件优化
      • 1. 内存相关参数优化
      • 2. 磁盘 I/O 相关参数优化
      • 3. 并发相关参数优化
      • 4. 日志相关参数优化
      • 5. 复制相关参数优化(主从部署场景)
    • 七、PostgreSQL 备份脚本
      • 使用方法
    • 八、最佳实践建议