Greenplum 备份方式

Greenplum 官方提供备份恢复工具:gpbackup、gprestore,可以对 Greenplum 集群进行逻辑备份恢复。同时可以使用pg物理备份工具pg_basebackup对master 以及所有 primary segment 分别单独备份恢复。

1. 测试环境

集群架构:

结构机器IP部署使用硬盘
1 Master + 2 Segment Host10.37.2.180(Master) 10.37.2.181(Seg) 10.37.2.182(Seg)12 segmentSSD

机器配置:

机器IPCPU(逻辑核数)内存(RAM)硬盘操作系统
10.37.2.18032C128GHDD+SSDCentOS7.3
10.37.2.18132C128GHDD+SSDCentOS7.3
10.37.2.18232C128GHDD+SSDCentOS7.3

测试库详情:

库大小表数量索引数量表数据大小
全量:672G41个90个317G
全量+增量:888G(增量:216G)41个90个369G(增量:52G)

2. 逻辑备份

2.1 全量备份

备份命令(备份详情请参考附录1):

gpbackup --leaf-partition-data --dbname 库名 --backup-dir 备份目录 --jobs 并发数

恢复命令:

gprestore -backup-dir 备份目录 --create-db --timestamp 备份时间戳

耗时信息:

源库大小备份文件大小备份(1并发)备份(2并发)恢复(1并发)恢复(2并发)
672G119G54m4s30m19s4h29m3s2h31m18s

注:2并发时已达测试环境千兆网络瓶颈,故不再增加。

2.2 增量备份

逻辑备份支持增量备份,只需在备份命令中指定 –incremental 参数即可,增量备份仅支持 append only 表,heap 表即使指定增量参数,也进行全量备份。

备份命令:

gpbackup --leaf-partition-data --dbname 库名 --backup-dir 备份目录 --jobs 并发数 --incremental

恢复命令同全量备份,时间戳指定增量备份的时间戳即可

备份文件大小备份时间恢复时间表数据恢复时间Index
119G+54G25m55s5h29m35s2h57m29s2h32m2s

2.3 全量增量性能对比

备份库大小备份时间备份速度
全量备份672G54m4s12G/m
增量备份(仅增量)216G25m55s8G/m
恢复库大小恢复时间恢复速度
全量672G4h29m3s149G/h
全量+增量888G(增量:216G)5h29m35s161G/h

全量备份与增量备份的备份恢复速度差距不大。

3. 物理备份

3.1 备份

备份命令:

pg_basebackup -p segment1端口号 -X f -c fast -D 备份目录/gpseg0 --target-gp-dbid segment1_DBID -h 127.0.0.1
......
pg_basebackup -p segment12端口号 -X f -c fast -D 备份目录/gpseg5 --target-gp-dbid segment12_DBID -h 127.0.0.1

备份耗时:

源库大小物理备份(串行)物理备份(并行)
672G25m47s11m33s

注:串行与并行是指单台 segment host 内的各个 segments 之间,segment host 之间均为并行。

3.2 恢复

物理备份并非 Greenplum 官方推荐的方式,恢复需要对每个 segment 进行单独恢复。

恢复步骤:

1、将每个 segment 的备份文件分别拷贝至 master 与 standby master、primary 与 mirror 对应的数据目录中

2、在 mirror 数据目录中生成 recovery.conf 文件,内容如下,其中 host 与 port 需要根据不同 segment 设置为不同值:

standby_mode = 'on'
primary_conninfo = 'user=gpadmin host=sdw1 port=6000 sslmode=prefer sslcompression=1 krbsrvname=postgres application_name=gp_walreceiver'
primary_slot_name = 'internal_wal_replication_slot'

3、在 master 上执行 gpstart -a 启动数据库(注:此时 master 与 standby master、primary 与 mirror 的复制关系尚不存在)

4、登陆到 master 与 每个 primary segment 创建复制槽,命令如下(segment 无法正常连接,需要使用 utility 模式):

PGOPTIONS='-c gp_session_role=utility' psql -p 6000

执行创建复制槽:

select pg_create_physical_replication_slot('internal_wal_replication_slot');

5、在 master 上执行 gpstate -s 查看主备之间复制状态是否正常

3.3 增量

在上述物理备份的基础上,拷贝增量 WAL 日志(或解压归档日志)到 segment 的 pg_xlog 目录中之后启动数据库。查询 WAL 日志增量数据是否可以正常应用:HEAP 表可以正常应用 WAL 日志中的增量数据,AO 表无法应用,并且查询报错

ERROR:  read beyond eof in table "t_col" file "base/16436/16396.1", read position 0 (small offset 10648), actual read length 0 (large read length 21296) (cdbbufferedread.c:211)  (seg0 slice1 10.243.145.205:6000 pid=1235) (cdbbufferedread.c:211)

4. 总结

根据如上的调查结果,对比两种备份方案,得出:

备份方案优点缺点
逻辑备份1、Greenplum 官方推荐
2、保证全局数据一致性
3、备份、恢复方案简单
4、可支持增量备份
1、恢复速度非常慢(10TB 恢复超过 3 天)
2、备份速度较慢
3、只能恢复到备份时间点
物理备份1、备份速度较快
2、恢复速度快
1、非 Greenplum 官方推荐备份方式
2、由于是逐节点备份,无法确保全局数据一致性
3、备份、恢复方案较复杂
4、只能恢复到备份时间点

由于 Greenplum 本身 master 与 segment 都自带高可用,segment 宕机 mirror 可以自动切换,master 宕机可以手动切换至 standby master,所以只有在主备都无法启动时需要使用备份进行恢复操作。无论物理备份还是逻辑备份,均只能恢复到备份时间点,若使用备份文件进行恢复,需要通过其他方式将备份点之后的数据补上。

附录1 逻辑备份详细

逻辑备份时,由 master 向每个 segment 发送类似如下命令 COPY 表数据:

COPY public.t_ao_co_zstd10 TO PROGRAM 'gzip -c -1 > /pgdata_test/gpback/gpadmin/gpseg<SEGID>/backups/20200727/2020072709201
2/gpbackup_<SEGID>_20200727092012_33282.gz' WITH CSV DELIMITER ',' ON SEGMENT IGNORE EXTERNAL PARTITIONS;

《Greenplum 备份方式》上有1条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据