blog
An Overview of Percona Backup for MongoDB
The known and popular backup method for MongoDB is mongodump. It is a logical backup method, similar to mysqldump in MySQL or pg_dump in PostgreSQL database. There is another backup tool called Percona Backup for MongoDB. It has support for replica sets and shard clusters, as well as more advanced features like point in time recovery.
It is important to note that it performs a consistent backup for your mongodb sharded cluster, and also supports S3 compatible object storage to store the backups. In this blog, we will discuss architecture, installation and usage of Percona Backup for MongoDB.
Architecture
Percona Backup for MongoDB consists of two components, the first one is a process utility that needs to be installed on each MongoDB node, called pbm-agent. The pbm-agent acts to coordinate between the database nodes, running the backup and restore process. It also checks if the node is the correct node to take the backup. The pbm-agent requires a specific user with some role privileges; eg: readWrite, backup, clusterMonitor, and restore. It also needs to create a new role for pbm with action type anyAction and resource type anyResource. The user must exist on each node in the replica set and also in the config server if you use sharded cluster architecture. Percona Backup for MongoDB uses a MongoDB URI connection string method to connect to the database, which is why it requires credential access at the first time.
The other component is the command line interface called pbm. pbm utility triggers the backup-related actions, e.g., execute backup, restore, list backup, delete, and so on. Before you work with pbm, you would need to configure backup options, restore options, and point in time recovery options.
The config file itself is stored in a YAML file, and pbm config command is used to load the configuration file. Some of commands for the pbm utility are shown below:
- pbm config, the command used to configure the backup option before executed.
- pbm backup, used to take a backup of MongoDB. It supports some compression methods such as gzip, pgzip, lz4, snappy.
- pbm restore, the command used for restoring a backup to a node.
- pbm list, listing of the current backup files.
- pbm cancel-backup, used to cancel the running backup process.
- pbm delete-backup, used to delete backup files. There are two options; you can specify the file name of backup to delete or delete backup files that are older than a certain age.
Installation of Percona Backup for MongoDB
There are two ways you can install Percona Backup for MongoDB, you can use the package manager from the operating system and use the official Percona Repository for installing the software, or you can build from source code.
As prerequisites before installing the pbm through the yum/apt install, you need to configure the Percona Repository, and then after that, enable pbm repository:
[root@n8 ~]# percona-release enable pbm release
* Enabling the Percona Backup MongoDB repository
<*> All done!
Then, install Percona Backup for MongoDB. In this case, I am using the CentOS based operating system so we’ll do yum install:
[root@n8 ~]# yum install percona-backup-mongodb
Loaded plugins: fastestmirror
Repository percona-release-noarch is listed more than once in the configuration
Repository percona-release is listed more than once in the configuration
Repository percona-release-noarch is listed more than once in the configuration
Repository percona-release-source is listed more than once in the configuration
(1/10): extras/7/x86_64/primary_db | 222 kB 00:00:00
(2/10): pbm-release-x86_64/7/primary_db | 4.2 kB 00:00:02
(3/10): percona-tools-release/7/x86_64/primary_db | 84 kB 00:00:00
(4/10): tools-release-x86_64/7/primary_db | 84 kB 00:00:00
(5/10): percona-release-x86_64/7/primary_db | 1.1 MB 00:00:06
(6/10): percona-release/7/x86_64/primary_db | 1.1 MB 00:00:08
(7/10): base/7/x86_64/primary_db | 6.1 MB 00:00:11
(8/10): updates/7/x86_64/primary_db | 2.5 MB 00:00:08
(9/10): epel/x86_64/updateinfo | 1.0 MB 00:00:13
(10/10): epel/x86_64/primary_db | 6.9 MB 00:00:07
Loading mirror speeds from cached hostfile
* base: mirror.telkomuniversity.ac.id
* epel: ftp.jaist.ac.jp
* extras: mirror.telkomuniversity.ac.id
* updates: mirror.telkomuniversity.ac.id
Resolving Dependencies
--> Running transaction check
---> Package percona-backup-mongodb.x86_64 0:1.3.3-1.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==================================================================================================================================================================
Package Arch Version Repository Size
==================================================================================================================================================================
Installing:
percona-backup-mongodb x86_64 1.3.3-1.el7 pbm-release-x86_64 16 M
Transaction Summary
==================================================================================================================================================================
Install 1 Package
Total download size: 16 M
Installed size: 61 M
Is this ok [y/d/N]: y
Downloading packages:
percona-backup-mongodb-1.3.3-1.el7.x86_64.rpm | 16 MB 00:00:55
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : percona-backup-mongodb-1.3.3-1.el7.x86_64 1/1
Verifying : percona-backup-mongodb-1.3.3-1.el7.x86_64 1/1
Installed:
percona-backup-mongodb.x86_64 0:1.3.3-1.el7
Complete!
After it is complete, you can configure the pbm-agent as a background process and play around with the pbm command line interface:
[root@n7 ~]# pbm
usage: pbm [] [ ...]
Percona Backup for MongoDB
Flags:
--help Show context-sensitive help (also try
--help-long and --help-man).
--mongodb-uri=MONGODB-URI MongoDB connection string (Default =
PBM_MONGODB_URI environment variable)
--compression=s2 Compression type
/////
Commands:
help [...]
Show help.
config [] []
Set, change or list the config
backup
Make backup
restore [] []
Restore backup
cancel-backup
Restore backup
list []
Backup list
delete-backup [] []
Delete a backup
version []
PBM version info
Backup in Action
Before taking a backup of MongoDB, ensure the pbm-agent is running on each node and the backup config has been set as shown below, set the path of the backup:
[root@n8 ~]# pbm config --file=/root/config.yaml --mongodb-uri "mongodb://pbmuser:***@localhost:27017/"
[Config set]
------
pitr:
enabled: false
storage:
type: filesystem
filesystem:
path: /data/backups
And test run the backup on one of the secondary nodes:
[root@n8 ~]# pbm backup --mongodb-uri "mongodb://pbmuser:*****@localhost:27017/" --compression=pgzip
Starting backup '2020-11-13T15:28:49Z'...................
Backup '2020-11-13T15:28:49Z' to remote store '/data/backups' has started
That’s all for now. Coming soon, ClusterControl 1.8.1 will allow you to schedule and manage your MongoDB clusters using Percona Backup for MongoDB.