PostgreSQL高可用pgbackrest物理备份

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

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物理备份

1 pgbackrest简介pgBackRest旨在成为一个可靠、易于使用的备份和恢复解决方案,通过利用针对特定数据库要求优化的算法,可以无缝扩展到最...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息