外观
PostgreSQL Barman配置与管理
Barman 安装与配置
Barman 安装
在 CentOS/RHEL 上安装
bash
# 安装 Barman 仓库
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 安装 Barman
yum install -y barman
# 启动并启用 Barman 服务
systemctl start barman
systemctl enable barman在 Debian/Ubuntu 上安装
bash
# 添加 PostgreSQL 仓库
apt-get install -y wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list
# 安装 Barman
apt-get update
apt-get install -y barman
# 启动并启用 Barman 服务
systemctl start barman
systemctl enable barmanBarman 主配置
主配置文件(barman.conf)
ini
# Barman 主配置文件
[barman]
; Barman 主目录
barman_home = /var/lib/barman
; Barman 用户
barman_user = barman
; 日志文件位置
log_file = /var/log/barman/barman.log
; 日志级别
log_level = INFO
; 压缩备份
compression = gzip
; 备份保留策略
retention_policy = RECOVERY WINDOW OF 14 DAYS
; 网络超时时间
network_compression = true
; 并行备份数量
parallel_jobs = 4
; 备份目录权限
backup_directory_permissions = 0700配置 PostgreSQL 主库
1. 创建 Barman 用户
sql
-- 在主库上创建 Barman 用户
CREATE ROLE barman WITH REPLICATION LOGIN PASSWORD 'strong_password';
-- 配置 pg_hba.conf
host replication barman 0.0.0.0/0 md5
host all barman 0.0.0.0/0 md5
-- 重新加载配置
SELECT pg_reload_conf();2. 配置主库连接(main.conf)
ini
; Barman 主库配置
[main]
; 主库主机地址
host = postgres-primary
; 主库端口
port = 5432
; 主库用户
user = barman
; 主库数据库名
dbname = postgres
; 备份方法
backup_method = postgres
; 备份选项
backup_options = exclusive_backup
; 流复制归档
treaming_archiver = on
; 复制槽名称
slot_name = barman_main
; 归档命令
archiver = on
; WAL 归档路径
archive_command = 'rsync -a %p barman@barman-server:/var/lib/barman/main/incoming/%f'
; 压缩备份
compression = gzip
; 并行备份
parallel_jobs = 4
; 备份保留策略
retention_policy = RECOVERY WINDOW OF 14 DAYSBarman 基本使用
检查主库状态
bash
# 检查 Barman 主库连接状态
barman check main
# 查看主库详细信息
barman show-server main执行全量备份
bash
# 执行全量备份
barman backup main
# 查看备份列表
barman list-backups main
# 查看备份详情
barman show-backup main latest执行增量备份
bash
# 执行增量备份
barman backup main --incremental
# 查看增量备份详情
barman show-backup main latest恢复备份
1. 基础恢复
bash
# 恢复到指定目录
barman recover main latest /var/lib/postgresql/15/main
# 恢复到指定时间点
barman recover main latest /var/lib/postgresql/15/main --target-time "2024-01-24 12:00:00"
# 恢复到指定 WAL 位置
barman recover main latest /var/lib/postgresql/15/main --target-lsn "0/12345678"2. 远程恢复
bash
# 远程恢复到从库
barman recover main latest postgres@slave-server:/var/lib/postgresql/15/mainBarman 高级管理
备份保留与清理
bash
# 查看保留策略
barman show-server main | grep retention_policy
# 执行保留策略
barman cron
# 手动清理旧备份
barman delete main oldest
# 清理特定备份
barman delete main 20240124T120000监控 Barman
1. 查看备份状态
bash
# 查看所有服务器状态
barman list-servers
# 查看备份统计信息
barman stats main
# 查看 WAL 归档状态
barman wal-info main2. 使用 Prometheus 监控
bash
# 启用 Barman Prometheus 导出器
barman-exporter --help
# 配置 Prometheus 抓取
# 在 prometheus.yml 中添加
- job_name: 'barman'
static_configs:
- targets: ['barman-server:9780']
metrics_path: /metrics
scrape_interval: 15sBarman 复制槽管理
bash
# 查看复制槽状态
barman replication-status main
# 创建复制槽
barman receive-wal --create-slot main
# 删除复制槽
barman receive-wal --drop-slot mainBarman 最佳实践
性能优化
- 使用并行备份:根据 CPU 核心数调整
parallel_jobs参数 - 启用压缩:减少备份存储空间和传输时间
- 使用网络压缩:减少网络传输带宽
- 调整 WAL 保留:根据备份频率调整 WAL 保留策略
- 使用 SSD 存储:提高备份和恢复速度
安全最佳实践
- 使用强密码:为 Barman 用户设置强密码
- 限制访问:在 pg_hba.conf 中限制 Barman 用户的访问 IP
- 加密传输:使用 SSL/TLS 加密备份传输
- 加密存储:对备份数据进行加密存储
- 访问控制:限制 Barman 目录的访问权限
- 定期轮换密码:定期更换 Barman 和复制用户密码
备份验证
bash
# 验证备份完整性
barman check-backup main latest
# 测试恢复过程
barman recover main latest /tmp/test-recovery --dry-run灾难恢复测试
- 定期测试恢复:每年至少进行一次完整的灾难恢复测试
- 记录恢复时间:了解恢复所需时间
- 文档化恢复流程:确保团队成员都了解恢复步骤
- 测试不同场景:测试全量恢复、增量恢复和 PITR
常见问题(FAQ)
Q:Barman 支持哪些备份类型?
A:Barman 支持以下备份类型:
- 全量备份
- 增量备份
- 差异备份
- 流复制备份
- 基于 WAL 的备份
Q:如何处理 Barman 备份失败?
A:处理 Barman 备份失败的方法:
- 检查 Barman 日志:
/var/log/barman/barman.log - 检查主库连接状态:
barman check main - 检查网络连接:确保 Barman 服务器可以连接到主库
- 检查磁盘空间:确保 Barman 服务器有足够的磁盘空间
- 检查权限:确保 Barman 用户有足够的权限
Q:Barman 如何实现增量备份?
A:Barman 实现增量备份的方法:
- 基于 WAL 日志的增量备份
- 基于文件系统级别的增量备份
- 使用
rsync实现增量传输 - 支持
pg_basebackup的增量备份功能
Q:如何迁移 Barman 到新服务器?
A:迁移 Barman 到新服务器的步骤:
- 在新服务器上安装 Barman
- 复制 Barman 配置文件
- 复制备份数据目录
- 更新主库的
archive_command - 测试 Barman 功能
- 切换到新服务器
Q:Barman 如何处理 WAL 归档延迟?
A:处理 WAL 归档延迟的方法:
- 检查网络连接和带宽
- 调整
archive_timeout参数 - 启用流复制归档
- 增加 WAL 保留空间
- 监控 WAL 归档状态
Q:如何配置 Barman 发送告警?
A:配置 Barman 发送告警的方法:
- 使用
barman-cli工具编写监控脚本 - 集成到监控系统(如 Prometheus + Alertmanager)
- 使用第三方工具(如 Nagios、Zabbix)
- 配置邮件告警:使用
barman的--mail-info选项
Q:Barman 支持哪些 PostgreSQL 版本?
A:Barman 支持 PostgreSQL 9.3 及以上版本,建议使用最新版本以获得最佳性能和功能。
Q:如何优化 Barman 的恢复速度?
A:优化 Barman 恢复速度的方法:
- 使用并行恢复
- 使用快速存储设备
- 优化网络连接
- 使用本地恢复
- 调整
parallel_jobs参数
