PgBackRest 并不一定需要与 PostgreSQL 服务器在同一台机器上运行。实际上,将 PgBackRest 与 PostgreSQL 服务器分离是一种常见的做法,可以提高备份的可靠性和安全性。以下是如何在不同的服务器上配置 PgBackRest,以实现数据备份到另一台服务器的详细步骤。 下面以ubuntu服务器配置为例。

环境准备

假设你有以下两台服务器:

  • PostgreSQL 服务器:IP 地址 192.168.1.100,数据目录 /var/lib/postgresql/data
  • PgBackRest 服务器:IP 地址 192.168.1.101,备份目录 /home/pgbackrest/backup
  • pgbackrest 账号为 pgbackrest
  • postgresql 账号为 postgres

总体要求

在2台服务器上都需要安装PgBackRest,并且两台服务器可以相互ssh免密登录。

1. 在 PostgreSQL 服务器上配置

1.1 配置 PostgreSQL

编辑 PostgreSQL 配置文件 postgresql.conf,启用 WAL 归档:

wal_level = replica
archive_mode = on
archive_command = 'pgbackrest --stanza=pg1-data archive-push %p'

重启 PostgreSQL 服务以应用更改:

sudo systemctl restart postgresql
1.2 配置 SSH 密钥

在 PostgreSQL 服务器上生成 SSH 密钥,并将其添加到 PgBackRest 服务器的 ~/.ssh/authorized_keys 文件中:

# 在 PostgreSQL 服务器上生成 SSH 密钥
ssh-keygen -t rsa -b 4096 -C "postgres@192.168.1.100"

# 将公钥复制到 PgBackRest 服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub pgbackrest@192.168.1.101

# 必须运行ssh, 以确认生成know_hosts
ssh -p 22 pgbackrest@192.168.1.101
1.4 安装PgBackRest
1.4.1 使用源码编译

在 PgBackRest 服务器上安装 PgBackRest。首先,更新包列表并安装依赖:

sudo apt-get update
sudo apt-get install python3-distutils meson gcc libpq-dev libssl-dev libxml2-dev \
       pkg-config liblz4-dev libzstd-dev libbz2-dev libz-dev libyaml-dev libssh2-1-dev

然后,下载并安装 PgBackRest:

wgethttps://github.com/pgbackrest/pgbackrest/archive/refs/tags/release/2.54.0.tar.gz
tar -xzf /2.54.0.tar.gz
cd pgbackrest-release-2.54.0/src
./configure
make
sudo make install
1.4.2 直接安装

安装postgresql依赖:
sudo apt-get install postgresql-client libxml2 libssh2-1

安装pgbackrest
sudo apt-get install pgbackrest

配置文件

vim /etc/pgbackrest/pgbackrest.conf

[test]
pg1-path=/var/lib/postgresql/data/pgdata
pg1-socket-path=/var/run/postgresql
pg1-user=odoo

[global]
repo1-host=192.168.1.101
repo1-host-user=pgbackrest
repo1-host-port=22
log-level-file=info
log-path=/var/log/pgbackrest

2. 在 PgBackRest 服务器安装PgBackRest

2.1 安装 PgBackRest

和PostgreSQL 服务器上一样安装。

2.2 创建必要的目录
sudo mkdir -p /etc/pgbackrest /var/log/pgbackrest /home/pgbackrest/backup
sudo chown -R postgres:postgres /etc/pgbackrest /var/log/pgbackrest /home/pgbackrest/backup
2.3 编辑配置文件

编辑 /etc/pgbackrest/pgbackrest.conf 文件,添加以下内容:

[test]
pg1-path=/var/lib/postgresql/data/pgdata
pg1-port=5432
pg1-socket-path=/var/run/postgresql
pg1-host=192.168.1.77
pg1-user=odoo
pg1-host-port=22
pg1-host-user=postgres

[global]
repo1-path=/pgbackrest/backup
repo1-retention-full=2
repo1-retention-diff=10
log-level-console=info
log-level-file=info
buffer-size=16MiB
compress-type=gz
process-max=3
start-fast=y

[global:archive-push]
compress-level=3

参数解释:
[test] 部分
这个 test 是备份集群的名字,多个备份集群可以添加 比如:[test-1],[test-2] 等等
pg1-path=/var/lib/postgresql/data: 指定 PostgreSQL 数据库实例的数据目录路径。这是 pgBackRest 需要备份的主要内容所在的位置。
pg1-socket-path=/var/run/postgresql: 指定 PostgreSQL 服务器的套接字文件(socket file)路径。pgBackRest 使用这个路径来通过 UNIX 套接字连接到数据库。
pg1-user=postgres: 定义 pgBackRest 连接到 PostgreSQL 实例时应该使用的用户名。这个用户需要有足够的权限来读取数据库文件和执行备份相关的操作。

[global] 部分
这部分的配置适用于 pgBackRest 的全局设置,影响所有备份和恢复操作。
repo1-host=192.168.1.101: 指定远程备份仓库的主机地址。这表明备份数据将被存储在指定 IP 地址的服务器上。pgBackRest 支持多个备份仓库,这里的 repo1 表示第一个仓库。
repo1-host-user=pgbackrest: 定义访问远程备份仓库主机时使用的用户名。pgBackRest 将以这个用户的身份在远程主机上执行操作。
log-level-file=detail: 设置文件日志记录的详细级别。detail 级别会记录更详细的操作信息,有助于故障排查和监控备份过程。
log-path=/var/log/pgbackrest: 指定日志文件的存储路径。pgBackRest 会将运行日志写入这个目录下,便于后续的日志分析和问题定位。

2.4 配置 SSH 密钥

同样配置和PostGresql服务器的免密登录。并且运行:
ssh postgresql@192.168.1.100
生成known_hosts。
或者直接运行:ssh -o StrictHostKeyChecking=no -p 22778 postgresql@192.168.1.100

2.4 初始化 Stanza

初始化名为 test 的 stanza:
现在PgBackRest 服务器上初始化,然后再再PostGresql服务器上初始化

sudo -u postgres pgbackrest --stanza=test stanza-create

3. 设置定时任务

3.1 全量备份(每天凌晨)

编辑 crontab 文件,添加全量备份任务:

sudo crontab -e

添加以下行:

0 0 * * * /usr/local/pgbackrest/bin/pgbackrest --stanza=crm --log-level-console=info backup --type=full
3.2 增量备份(每小时)

编辑 crontab 文件,添加增量备份任务:

sudo crontab -e

添加以下行:
1点至23点增量备份,0点的时候是全量备份,不需要增量备份了

0 1-23 * * * /usr/local/pgbackrest/bin/pgbackrest --stanza=crm --log-level-console=info backup --type=incr

4. 查看备份状态

查看备份状态的命令:

sudo -u postgres pgbackrest --stanza=crm info

5. 手动备份数据

5.1 全量备份
sudo -u postgres pgbackrest --stanza=crm --log-level-console=info backup --type=full
5.2 增量备份
sudo -u postgres pgbackrest --stanza=crm --log-level-console=info backup --type=incr

6. 恢复数据

6.1 恢复到最新状态
#  先停止数据库
pg_ctl stop
sudo -u postgres pgbackrest --stanza=crm --log-level-console=info restore
6.2 恢复到特定时间点
#  先停止数据库
pg_ctl stop
sudo -u postgres pgbackrest --stanza=crm --log-level-console=info restore --target-time="2023-10-10 12:00:00"

7. 增加PostGresql数据库

如果有多个数据库需要备份到PgBackRest服务器,可以在PostgreSQL数据库服务器同样安装:

  • PgBackRest
  • 打通和PgBackRest的ssh免密登录
  • 配置 postgresql.conf
7.1 生成配置文件

vim /etc/pgbackrest/pgbackrest.conf

[test-2]
pg1-path=/var/lib/postgresql/data/pgdata
pg1-socket-path=/var/run/postgresql
pg1-user=odoo

[global]
repo1-host=192.168.1.101
repo1-host-user=pgbackrest
repo1-host-port=22
log-level-file=info
log-path=/var/log/pgbackrest

7.2 初始化 Stanza

先在 PgBackRest 服务器服务器上运行

sudo -u postgres pgbackrest --stanza=test-2 stanza-create

再在数据库服务器运行同样的命令,就可以了。

注意

  1. PgBackRest 服务器PostgreSQL 服务器上的 pgbackrest版本要一致
  2. 相互免密登录,并确认生成know_hosts
  3. 先在PgBackRest 服务器 上运行 sudo -u postgres pgbackrest --stanza=test stanza-create,在区数据库端运行

通过以上步骤,你可以在不同的服务器上配置 PgBackRest,实现数据备份到另一台服务器。这样可以提高备份的可靠性和安全性。

参考文档

https://pgbackrest.org/user-guide.html

Logo

一站式 AI 云服务平台

更多推荐