Skip to content

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 barman

Barman 主配置

主配置文件(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 DAYS

Barman 基本使用

检查主库状态

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/main

Barman 高级管理

备份保留与清理

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 main

2. 使用 Prometheus 监控

bash
# 启用 Barman Prometheus 导出器
barman-exporter --help

# 配置 Prometheus 抓取
# 在 prometheus.yml 中添加
- job_name: 'barman'
  static_configs:
    - targets: ['barman-server:9780']
  metrics_path: /metrics
  scrape_interval: 15s

Barman 复制槽管理

bash
# 查看复制槽状态
barman replication-status main

# 创建复制槽
barman receive-wal --create-slot main

# 删除复制槽
barman receive-wal --drop-slot main

Barman 最佳实践

性能优化

  • 使用并行备份:根据 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 备份失败的方法:

  1. 检查 Barman 日志:/var/log/barman/barman.log
  2. 检查主库连接状态:barman check main
  3. 检查网络连接:确保 Barman 服务器可以连接到主库
  4. 检查磁盘空间:确保 Barman 服务器有足够的磁盘空间
  5. 检查权限:确保 Barman 用户有足够的权限

Q:Barman 如何实现增量备份?

A:Barman 实现增量备份的方法:

  1. 基于 WAL 日志的增量备份
  2. 基于文件系统级别的增量备份
  3. 使用 rsync 实现增量传输
  4. 支持 pg_basebackup 的增量备份功能

Q:如何迁移 Barman 到新服务器?

A:迁移 Barman 到新服务器的步骤:

  1. 在新服务器上安装 Barman
  2. 复制 Barman 配置文件
  3. 复制备份数据目录
  4. 更新主库的 archive_command
  5. 测试 Barman 功能
  6. 切换到新服务器

Q:Barman 如何处理 WAL 归档延迟?

A:处理 WAL 归档延迟的方法:

  1. 检查网络连接和带宽
  2. 调整 archive_timeout 参数
  3. 启用流复制归档
  4. 增加 WAL 保留空间
  5. 监控 WAL 归档状态

Q:如何配置 Barman 发送告警?

A:配置 Barman 发送告警的方法:

  1. 使用 barman-cli 工具编写监控脚本
  2. 集成到监控系统(如 Prometheus + Alertmanager)
  3. 使用第三方工具(如 Nagios、Zabbix)
  4. 配置邮件告警:使用 barman--mail-info 选项

Q:Barman 支持哪些 PostgreSQL 版本?

A:Barman 支持 PostgreSQL 9.3 及以上版本,建议使用最新版本以获得最佳性能和功能。

Q:如何优化 Barman 的恢复速度?

A:优化 Barman 恢复速度的方法:

  • 使用并行恢复
  • 使用快速存储设备
  • 优化网络连接
  • 使用本地恢复
  • 调整 parallel_jobs 参数