Percona Backup for MongoDB(PBM)备份恢复简介

0    83    1

Tags:

👉 本文共约4938个字,系统预计阅读时间或需19分钟。

概述

Percona Backup for MongoDB(PBM)是一个针对MongoDB副本集和分片的一致性备份开源工具,它支持逻辑备份、物理备份、增量备份以及选择性备份和恢复等特性,并且支持Point-in-Time恢复到指定时间点。

但非常可惜的是物理备份相关功能目前仅适用于Percona Server for MongoDB的分支,因此下面主要围绕逻辑备份与Point-in-Time来展开,MongoDB Community版本要求4.0及以上。

已知限制

  1. 只支持逻辑备份恢复

  2. 不支持分片集合

  3. 不支持批量指定namespace

  4. 不支持Multi-collection事务

  5. 不能备份恢复本地数据库中的系统集合

  6. 时间点恢复需要通过完全备份来作为基础

架构

Percona Backup for MongoDB(PBM)备份恢复简介

pbm-agent

tpbm-agent是用于执行备份、恢复,删除和其它操作的进程,它必须运行在集群的每个mongod实例上。包括副本集中的secondary节点以及分片集群中的config副本集。

所有pbm-agent都会监视PBM Control集合的更新,当PBM CLI对PBM Control集合产生更新时,将会在每个副本集上选择一个secondary上的pbm-agent执行操作,如果没有响应则会选择Primary上的pbm-agent执行操作。

被选中的pbm-agent将会加锁,避免同时触发备份和恢复等互斥操作。操作完成后将会释放锁,并更新PBM Control集合

PBM CLI

PBM CLI是一个操作PBM的命令行工具,它使用PBM Control集合与pbm-agent进程通信。通过更新和读取操作、日志等相应的PBM Control集合来启动和监视备份和恢复操作。同时,它也将PBM配置信息保存在PBM Control集合中。

PBM Control collections

PBM Control collections是存储配置数据和备份状态的特殊集合,分片环境存放在config副本集的admin数据库中,副本集则保存在自身的admin数据库中。主要包含以下集合:

  • admin.pbmBackups:备份的日志和状态

  • admin.pbmAgents:pbm-agent的运行状态

  • admin.pbmConfig:PBM的配置信息

  • admin.pbmCmd:用于定义和触发操作

  • admin.pbmLock:pbm-agent同步锁

  • admin.pbmLockOp:用于协调不互斥的操作,如执行备份、删除备份等

  • admin.pbmLog:存储pbm-agent的日志信息

  • admin.pbmOpLog:存储操作ID

  • admin.pbmPITRChunks:存储point-in-time恢复的oplog块

  • admin.pbmPITRState:存储point-in-time恢复增量备份的状态

  • admin.pbmRestores:存储还原历史记录和状态

  • admin.pbmStatus:记录PBM备份状态

remote backup storge远程备份存储是保存备份文件的位置,可以是S3存储,也可以是Filesystem。通过pbm list命令可以查看备份集。备份文件名称都是以UTC备份开始时间作为前缀,每个备份都有一个元数据文件。对于备份中的每个副本集:

  • 有一个mongodump格式的压缩归档文件,它是集合的转储

  • 覆盖备份时间的oplog的BSON文件转储

安装配置

下载PBM

解压PBM

配置环境变量

在副本集上创建PBM用户,如果是分片环境,则每个shard以及config都需要创建

配置remote backup storge,除mongos外,每个节点都需要存在对应的备份目录

将配置写入到数据库中,分片集群需要填写config的地址

启动每个节点对应的pbm-agent

为了后续方便,不用每次输入--mongodb-uri,可以把PBM_MONGODB_URI设置到环境变量中

全量备份

Percona Backup for MongoDB(PBM)备份恢复简介

全备支持物理备份和逻辑备份,通过--type指定,可选项有physical和logical两种。因MongoDB社区版不支持物理备份,就只围绕逻辑备份来展开。

全量备份即对整个集群除mongos以外进行完整的备份,只需要执行一次,就能完成整个集群的备份。备份命令如下:

备份压缩

pbm支持备份压缩,目前的算法有gzip、zstd、snappy、lz4,通过--compression选项指定。同时能指定对应的压缩级别,通过--compression-level选项指定。不同算法的压缩级别如下所示:

压缩算法压缩级别默认
ztsd1-42
snappyNULLNULL
lz41-161
gzip or pgzip-1,0,1,9-1

优先级

负责备份的pbm-agent默认会在从节点中随机选出,规定时间内从节点没有响应,则在主节点进行备份。现在可以通过指定每个节点的备份优先级来控制备份节点选择,避免在一个机器承载多个实例的情况下备份集中在同一台服务器导致IO性能不足。在配置文件中加入下列配置

不在配置文件中的节点优先级默认为1,如果没有设置任何优先级,下列类型的节点则优先被选中

  • 隐藏节点:优先级为2

  • secondary节点:优先级为1

  • Primary节点:优先级为0.5

备份管理

查看pbm状态

备份完成后,可以通过pbm list查看所有备份集,也可以通过pbm describe-backup查看备份的具体信息

查看备份日志可以使用pbm logs进行查看,有下列选项可选:

  • -t:查看最后N行记录

  • -e:查看所有备份或指定备份

  • -n:指定节点或副本集

  • -s:按日志级别进行过滤,从低到高依次是D(debug)、I(Info)、W(Warning)、E(Error)、F(Fatal)

  • -o:以文本或JSON格式显示日志信息

  • -i:指定操作ID

如果正在运行任务想要终止,可以使用pbm canal-backup取消

删除快照备份可以使用pbm delete-backup,默认删除前会进行二次确认,指定--force选项可以直接删除。删除oplog chunk可以执行pbm delete-pitr

如果想要删除指定时间之前的备份,可以设置--older-than参数,传递下列格式的时间戳

  • %Y-%M-%DT%H:%M:%S (e.g. 2020-04-20T13:13:20)

  • %Y-%M-%D (e.g. 2020-04-20)

增量备份

Point-in-Time Recovery可以将数据还原到指定时间点,期间会从备份快照中恢复数据库,并重放oplog到指定时间点。Point-in-Time Recovery是v1.3.0加入的,需要手动启用pitr.enabled参数

在启用Point-in-Time Recovery之后,pbm-agent会定期保存oplog chunk,一个chunk包含10分钟跨度的oplog事件,如果禁用时间点恢复或因备份快照操作的开始而中断,则时间可能会更短。oplog保存在远程存储的pbmPitr子目录中,chunk的名称反映了开始时间和结束时间

如果想要调整时间跨度,可以配置pitr.oplogSpanMin

oplog备份也支持压缩,可以配置pitr.compression

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
Percona Backup for MongoDB(PBM)备份恢复简介后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章
验证码:
请关注本站微信公众号,回复“小麦苗博客”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部