PostgreSQL高可用pgbackrest物理备份
1 pgbackrest简介
pgBackRest旨在成为一个可靠、易于使用的备份和恢复解决方案,通过利用针对特定数据库要求优化的算法,可以无缝扩展到最大的数据库和工作负载。
主要的功能
并行备份和恢复
本地或远程备份
完整、增量和差异备份
备份轮换和存档过期策略
支持压缩和完整性校验
2 PAF简介
苍穹标准采用的postgreSQL数据库的高可用方式是pg_auto_failover,pg_auto_failover是PostgreSQL的一个扩展,用于监控和管理Postgres集群,自动触发故障转移,pg_auto_failover相比于Patroni、repmgr、Stolon和pgPool-II配置更简单,运维更方便。
3 环境信息
下文以此环境信息为例
地址 | 主机名 | 描述 |
172.18.11.63 | kd-app-01 | PG高可用计算节点 |
172.18.11.64 | kd-app-02 | PG高可用计算节点 |
172.18.11.65 | kd-app-03 | 备份节点(也是pgmonitor节点),需要注意磁盘空间 |
4 创建必要目录
4.1 创建日志目录(所有节点执行)
sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown postgres.postgres /var/log/pgbackrest/
4.2 创建配置目录(所有节点执行)
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown postgres.postgres -R /etc/pgbackrest/
4.3创建命令和主目录(所有节点执行)
sudo mkdir /usr/bin/pgbackrest
sudo chown postgres.postgres /usr/bin/pgbackrest/
sudo chmod 755 /usr/bin/pgbackrest/
sudo mkdir -p /var/postgresql/pgbackrest/repos
sudo chmod 750 /var/postgresql/pgbackrest/ -R
sudo chown postgres.postgres /var/postgresql/pgbackrest/ -R
5 安装
工具已经安装好,在$PGHOME的直接确认配置就可以,无需安装
$PGHOME/bin/pgbackrest version
Tips:如果缺少libxxx.so文件,可以从$PGHOME/lib 下找到对应的libxxx.so.x文件,将其拷贝到 /usr/lib64目录下。 如缺少 libpq.so.5 文件,就将 $PGHOME/lib/libpq.so.5.12 拷贝并重命名为 /usr/lib64/libpq.so.5
6 配置ssh互信
6.1 创建身份验证密钥(所有节点执行)
设置postgres用户的密码,用于传输公钥文件
# echo "Cosmic@2023"|passwd postgres --stdin
# su - postgres
$ ssh-keygen -f /home/postgres/.ssh/id_rsa -t rsa -b 4096 -N ""
6.2 交换公钥
PG节点1执行: $ cat /home/postgres/.ssh/id_rsa.pub | ssh postgres@172.18.11.65 "cat >> /home/postgres/.ssh/authorized_keys"
PG节点2执行: $ cat /home/postgres/.ssh/id_rsa.pub | ssh postgres@172.18.11.65 "cat >> /home/postgres/.ssh/authorized_keys"
备份节点执行: $ cat /home/postgres/.ssh/id_rsa.pub | ssh postgres@172.18.11.63 "cat >> /home/postgres/.ssh/authorized_keys"
备份节点执行: $ cat /home/postgres/.ssh/id_rsa.pub | ssh postgres@172.18.11.64 "cat >> /home/postgres/.ssh/authorized_keys"
所有节点执行: # chmod 600 /home/postgres/.ssh/authorized_keys
验证是否能免密ssh远程postgres用户登录
# su - postgres
$ ssh postgres@主机地址
7 配置文件
7.1 编辑配置文件
PG节点1和PG节点2执行:
# su - postgres
$ cat > /etc/pgbackrest/pgbackrest.conf <<EOF
[paf]
pg1-path=/var/kingdee/cosmic/postgres/pg_data
[global]
log-level-file=detail
repo1-host=172.18.11.65
repo1-host-user=postgres
log-path=/var/log/pgbackrest
EOF
备份节点:
$ cat >/etc/pgbackrest/pgbackrest.conf <<EOF
[paf]
#pg节点1的地址
pg1-host=172.18.11.63
#pg节点1的数据路径
pg1-path=/var/kingdee/cosmic/postgres/pg_data
pg1-port=5432
pg1-user=postgres
#pg节点2的地址
pg2-host=172.18.11.64
#pg节点2的数据路径
pg2-path=/var/kingdee/cosmic/postgres/pg_data
pg2-port=5432
pg2-user=postgres
[global]
repo1-path=/var/postgresql/pgbackrest/repos
log-path=/var/log/pgbackrest
start-fast=y
repo1-retention-full=2
EOF
注意修改pg的地址、数据路径
7.2 修改归档命令
修改归档参数,利用pgbackrest管理和归档wal日志
# su - postgres
$ vi $PGDATA/postgresql.conf
archive_command = '/var/postgresql/soft/pg12.8/bin/pgbackrest --stanza=paf archive-push %p'
归档命令生效方式:$ pg_ctl reload
检查生效: $ psql -c "select name,setting from pg_settings where name='archive_command';"
8 初始化和备份
8.1 初始化(实例名paf)
备份节点: $ pgbackrest --stanza=paf --log-level-console=info stanza-create
8.2 检测
备份节点: $ pgbackrest --stanza=paf --log-level-console=info check
8.3 全量备份
备份节点: pgbackrest --stanza=paf --log-level-console=info --type=full backup --exclude=log/ --process-max=16
注:--exclude 排除某个目录或文件,此处排除了log日志目录
8.4 增量备份
备份节点: pgbackrest --stanza=paf --log-level-console=info --type=incr backup --exclude=log/ --process-max=16
8.5 恢复
Tips:恢复备份只能在具体pg节点进行恢复,需要将备份文件从备份机拷贝到需要恢复的节点上
需要恢复节点: pgbackrest --stanza=paf --log-level-console=info restore --pg1-path=PG数据库数据路径 --process-max=16
9 备份恢复测试
9.1 全量备份
91.1 全量备份
$ pgbackrest --stanza=paf --log-level-console=info backup --process-max=16
9.1.2 查看备份状态
$ pgbackrest --stanza=paf info
9.2 增量备份
9.2.1 增量备份
$ pgbackrest --stanza=paf --log-level-console=info --type=incr backup --exclude=log/ --process-max=16
9.2.2 查看备份状态
$ pgbackrest --stanza=paf info
9.3 恢复测试
9.3.1 恢复机的环境准备
(1)需要提前安装PostgreSQL数据库
(2)需要提前安装好pgbackrest命令,并配置好目录和配置文件,pgbackrest.conf配置文件参考postgres数据库的配置文件即可
注:下面以其中从库为例进行恢复数据。paf高可用的修复方式本身能够自动修复,无需用pgbackrest恢复。此处是取消了paf高可用,以从库为例来测试恢复数据。
9.3.2 备份文件拷贝
由于还原备份时不能通过远程方式,所以需要将备份文件拷贝到目标还原机上进行还原
# 打包备份文件,传到还原目标服务器上
$ cd /var/postgresql/pgbackrest/
$ tar -czf pgbackrest-202302151240.tar.gz *
$ scp pgbackrest-202302151240.tar.gz postgres@目标还原机: /var/postgresql/pgbackrest/
检查备份文件状态:
9.3.3 开始恢复
$ pgbackrest --stanza=paf --log-level-console=info restore --pg1-path=/var/kingdee/cosmic/postgres/pg_data --process-max=16
9.3.4 结果检查
启动数据库,并登录数据库检查数据
$ pg_ctl -D $PGDATA start
$ psql
9.4 基于时间点恢复(Point-in-Time Recovery)
9.4.1 选择指定恢复的时间点
查看时间戳: $ psql -Atc "select current_timestamp"
9.4.2 指定恢复
$ pgbackrest --stanza=paf --log-level-console=info --type=time "--target=2023-02-17 10:28:11.286883+08" --target-action=promote restore --pg1-path=/var/kingdee/cosmic/postgres/pg_data --process-max=16
10 定时备份任务
在备份机上创建备份脚本,脚本路径以实际为准:
# su - postgres
$ mkdir -p /data/pgbackup/
创建全备脚本:
$ cat > /data/pgbackup/pgbak-full.sh <<EOF
source ~/.bashrc
/var/postgresql/soft/pg12.8/bin/pgbackrest --stanza=paf --log-level-console=info --type=full --exclude=log/ backup --process-max=8
EOF
创建增量备份脚本:
$ cat > /data/pgbackup/pgbak-incr.sh <<EOF
source ~/.bashrc
/var/postgresql/soft/pg12.8/bin/pgbackrest --stanza=paf --log-level-console=info --type=incr --exclude=log/ backup --process-max=8
EOF
创建定时任务:
$ crontab -e
# 每周六做一次全备 0 1 * * 6 sh /data/pgbackup/pgbak-full.sh >> /var/postgresql/pgbackrest/log/pgbak-full.log # 每天做增量备份(增量备份频率以实际情况为准) 0 3 * * * sh /data/pgbackup/pgbak-incr.sh >> /var/postgresql/pgbackrest/log/pgbak-incr.log
PostgreSQL高可用pgbackrest物理备份
本文2024-09-23 01:13:32发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144574.html