Navigation
This version of the documentation is archived and no longer supported. To learn how to upgrade your version of MongoDB Ops Manager, refer to the upgrade documentation.
You were redirected from a different version of the documentation. Click here to go back.

Restore a Replica Set from a Backup

Overview

You can restore a replica set from the artifacts captured by Ops Manager Backup. You can restore either a stored snapshot or a point in time in the last 24 hours between snapshots.

If you restore from a point in time, Ops Manager Backup creates a custom snapshot for the selected point by applying the oplog to the previous regular snapshot. The point in time is an upper exclusive bound: if you select a timestamp of 12:00, then the last operation in the restore will be no later than 11:59:59. Point-in-time recovery takes longer than recovery from a stored snapshot.

When you select a snapshot to restore, Ops Manager creates a link to download the snapshot as a tar file. The link is available for one download only and times out after an hour. You can optionally have Ops Manager scp the tar file directly to your system. The scp delivery method requires you to generate a key pair ahead of time but provides faster delivery. Windows machines do not come with SCP and require additional setup outside the scope of this manual.

You can restore either to new hardware or existing hardware. If you restore to existing hardware, use a different data directory than used previously.

Sequence

The sequence used here to restore a replica set is to download the restore file and distribute it to each server, restore the primary, and then restore the secondaries. For additional approaches to restoring replica sets, see the procedure from the MongoDB Manual to Restore a Replica Set from a Backup.

Prerequisites

Oplog Size

To seed each replica set member, you will use the seedSecondary.sh script included in the backup restore file. When you run the script, you will provide the replica set’s oplog size, in gigabytes. If you do not have the size, see the section titled “Check the Size of the Oplog” on the Troubleshoot Replica Sets page of the MongoDB manual.

Client Requests

You must ensure that the MongoDB deployment does not receive client requests during restoration. You must either:

  • restore to new systems with new hostnames and reconfigure your application code once the new deployment is running, or
  • ensure that the MongoDB deployment will not receive client requests while you restore data.

Procedures

Select and Download the Snapshot

1

Select the Backup tab and then Overview page.

2

On the line listing the process, click the ellipsis icon and select Restore.

3

Select the restore point.

Select the restore point, enter information as needed, and then click Next:

Snapshot Restores from a stored snapshot. Select the snapshot from which to restore.
Point In Time

Creates a custom snapshot based on a replica set point in time. Ops Manager includes all operations up to but not including the point in time. For example, if you select 12:00, the last operation in the restore is 11:59:59 or earlier.

Select a Date and Time and click Next.

Oplog Timestamp

Creates a custom snapshot based on the timestamp of an entry in the oplog, as specified by the entry’s ts field. Ops Manager includes all operations up to and including the time of the timestamp. An entry’s ts field is a BSON timestamp and has two components: the timestamp and the increment.

Specify the following:

  • Timestamp: The value in seconds since the Unix epoch.
  • Increment: An incrementing ordinal for operations within a given second.
4

Select how to receive the restore files.

Select the restore method, format, and destination. Enter information as needed, and then click Finalize Request:

Pull Via Secure HTTP Create a one-time direct download link. If you select this, click Finalize Request and skip the rest of this procedure.
Push Via Secure Copy

Direct Ops Manager to copy the restore files to your server via SCP. To use this option you must have an existing key pair that Ops Manager can use to transmit the files. See Generate a Key Pair for SCP Restores.

Windows machines do not come with SCP and require additional setup outside the scope of this manual.

Format

Sets the format of the restore files:

  • Individual DB Files: Transmits MongoDB data files produced by Ops Manager Backup directly to the target directory. The data is compressed during transmission.
  • Archive (tar.gz): Delivers database files in a single tar.gz file that you must extract before reconstructing databases. With Archive (tar.gz) delivery, you need sufficient space on the destination server for the archive and the extracted files.
SCP Host The hostname of the server to receive the files.
SCP Port The port of the server to receive the files.
SCP User The username used to access to the server.
Auth Method Select whether to use a username and password or an SSH certificate to authenticate to the server.
Password The user password used to access to the server.
Passphrase The SSH passphrase used to access to the server.
Target Directory The absolute path to the directory on the server to which to copy the restore files.
5

Retrieve the snapshot.

If you selected Pull Via Secure HTTP, Ops Manager creates a link to the snapshot that by default is available for an hour and can be used just once. To download the snapshot, select the Backup tab and then Restore History page. When the restore job completes, select the download link next to the snapshot.

If you selected Push Via Secure Copy, the files are copied to the server directory you specfied. To verify that the files are complete, see the section on how to validate an SCP restore.

6

Copy the snapshot to each server to restore.

Restore the Primary

You must have a copy of the snapshot on the server that provides the primary:

1

Shut down the entire replica set.

Shut down the replica set’s mongod processes using one of the following methods, depending on your configuration:

  • Automated Deployment:

    If you use Ops Manager Automation to manage the replica set, you must shut down through the Ops Manager console. See Shut Down a MongoDB Process.

  • Non-Automated Deployment on MongoDB 2.6 or Later:

    Connect to each member of the set and issue the following:

    use admin
    db.shutdownServer()
    
  • Non-Automated Deployment on MongoDB 2.4 or earlier:

    Connect to each member of the set and issue the following:

    use admin
    db.shutdownServer( { force: true } )
    
2

Restore the snapshot data files to the primary.

Extract the data files to the location where the mongod instance will access them through the dbpath setting. If you are restoring to existing hardware, use a different data directory than used previously. The following are example commands:

tar -xvf <backup-restore-name>.tar.gz
mv <backup-restore-name> /data
3

Start the primary with the new dbpath.

For example:

mongod --dbpath /<path-to-data> --replSet <replica-set-name> --logpath /<path-to-data>/mongodb.log --fork
4

Connect to the primary and initiate the replica set.

For example, first issue the following to connect:

mongo

And then issue rs.initiate():

rs.initiate()
5

Restart the primary as a standalone, without the --replSet option.

Use the following sequence:

  1. Shut down the process using one of the following methods:

    • Automated Deployment:

      Shut down through the Ops Manager console. See Shut Down a MongoDB Process.

    • Non-Automated Deployment on MongoDB 2.6 or Later:

      use admin
      db.shutdownServer()
      
    • Non-Automated Deployment on MongoDB 2.4 or earlier:

      use admin
      db.shutdownServer( { force: true } )
      
  2. Restart the process as a standalone:

    mongod --dbpath /<path-to-data> --logpath /<path-to-data>/mongodb.log --fork
    
6

Connect to the primary and drop the oplog.

For example, first issue the following to connect:

mongo

And then issue rs.drop() to drop the oplog.

use local
db.oplog.rs.drop()
7

Run the seedSecondary.sh script on the primary.

The seedSecondary.sh script re-creates the oplog collection and seeds it with the timestamp of the snapshot’s creation. This will allow the secondary to come back up to time without requiring a full initial sync. This script is customized by Ops Manager for this particular snapshot and is included in the backup restore file.

Use the appropriate script for your operating system:

UNIX-based seedSecondary.sh
Windows seedSecondary.bat

This script recreates the oplog collection and seeds it with the timestamp of the snapshot’s creation. This allows the secondary to come back up to time without requiring a full initial sync. Ops Manager customizes this script for this particular snapshot and is included in the backup restore file.

To run the script, issue the following command, where:

<mongodPort> The port of the mongod process
<oplogSizeInGigabytes> The size of the replica set’s oplog
<replicaSetName> The name of the replica set
<primaryHost:primaryPort> The hostname:port combination for the replica set’s primary
  • For UNIX-based systems:

    ./seedSecondary.sh <mongodPort> <oplogSizeInGigabytes> <replicaSetName> <primaryHost:primaryPort>
    ./seedSecondary.sh 27018 2 rs-1 primaryHost.example.com:27017
    
  • For Windows-based systems:

    .\seedSecondary.bat <mongodPort> <oplogSizeInGigabytes> <replicaSetName> <primaryHost:primaryPort>
    .\seedSecondary.bat 27018 2 rs-1 primaryHost.example.com:27017
    
8

Restart the primary as part of a replica set.

Use the following sequence:

  1. Shut down the process using one of the following methods:

    • Automated Deployment:

      Shut down through the Ops Manager console. See Shut Down a MongoDB Process.

    • Non-Automated Deployment on MongoDB 2.6 or Later:

      use admin
      db.shutdownServer()
      
    • Non-Automated Deployment on MongoDB 2.4 or earlier:

      use admin
      db.shutdownServer( { force: true } )
      
  2. Restart the process as part of a replica set:

    mongod --dbpath /<path-to-data> --replSet <replica-set-name>
    

Restore Each Secondary

After you have restored the primary you can restore all secondaries. You must have a copy of the snapshot on all servers that provide the secondaries:

1

Connect to the server where you will create the new secondary.

2

Restore the snapshot data files to the secondary.

Extract the data files to the location where the mongod instance will access them through the dbpath setting. If you are restoring to existing hardware, use a different data directory than used previously. The following are example commands:

tar -xvf <backup-restore-name>.tar.gz
mv <backup-restore-name> /data
3

Start the secondary as a standalone, without the --replSet option.

Use the following sequence:

  1. Shut down the process using one of the following methods:

    • Automated Deployment:

      Shut down through the Ops Manager console. See Shut Down a MongoDB Process.

    • Non-Automated Deployment on MongoDB 2.6 or Later:

      use admin
      db.shutdownServer()
      
    • Non-Automated Deployment on MongoDB 2.4 or earlier:

      use admin
      db.shutdownServer( { force: true } )
      
  2. Restart the process as a standalone:

    mongod --dbpath /<path-to-data> --logpath /<path-to-data>/mongodb.log --fork
    
4

Run the seedSecondary.sh script on the secondary.

The seedSecondary.sh script re-creates the oplog collection and seeds it with the timestamp of the snapshot’s creation. This will allow the secondary to come back up to time without requiring a full initial sync. This script is customized by Ops Manager for this particular snapshot and is included in the backup restore file.

Use the appropriate script for your operating system:

UNIX-based seedSecondary.sh
Windows seedSecondary.bat

This script recreates the oplog collection and seeds it with the timestamp of the snapshot’s creation. This allows the secondary to come back up to time without requiring a full initial sync. Ops Manager customizes this script for this particular snapshot and is included in the backup restore file.

To run the script, issue the following command, where:

<mongodPort> The port of the mongod process
<oplogSizeInGigabytes> The size of the replica set’s oplog
<replicaSetName> The name of the replica set
<primaryHost:primaryPort> The hostname:port combination for the replica set’s primary
  • For UNIX-based systems:

    ./seedSecondary.sh <mongodPort> <oplogSizeInGigabytes> <replicaSetName> <primaryHost:primaryPort>
    ./seedSecondary.sh 27018 2 rs-1 primaryHost.example.com:27017
    
  • For Windows-based systems:

    .\seedSecondary.bat <mongodPort> <oplogSizeInGigabytes> <replicaSetName> <primaryHost:primaryPort>
    .\seedSecondary.bat 27018 2 rs-1 primaryHost.example.com:27017
    
5

Restart the secondary as part of the replica set.

Use the following sequence:

  1. Shut down the process using one of the following methods:

    • Automated Deployment:

      Shut down through the Ops Manager console. See Shut Down a MongoDB Process.

    • Non-Automated Deployment on MongoDB 2.6 or Later:

      use admin
      db.shutdownServer()
      
    • Non-Automated Deployment on MongoDB 2.4 or earlier:

      use admin
      db.shutdownServer( { force: true } )
      
  2. Restart the process as part of a replica set:

    mongod --dbpath /<path-to-data> --replSet <replica-set-name>
    
6

Connect to the primary and add the secondary to the replica set.

Connect to the primary and use rs.add() to add the secondary to the replica set.

rs.add("<host>:<port>")

Repeat this operation for each member of the set.