How to migrate a cluster

Cluster migration via restore is a method of restoring a bacup from a different cluster.

The following terms will be used throughout this guide:

new cluster

the backed-up cluster that we will migrate data from

old cluster

the currently active cluster that will be restored to the state of the new cluster

Prerequisites

  • Configured settings for S3 storage

  • Backups from the new cluster in your S3 storage

  • Password from your new cluster

  • For bare replica sets: The new cluster must have a number of replicas equal to or greater than the old cluster.

    • E.g. Your old cluster had 2 replicas, so your new cluster must have 2 or more replicas

  • For sharded clusters: The new cluster has a number of shards and replicas equal to or greater than those in the old cluster.

    • E.g. Your old cluster had 2 shards, so your new cluster must have 2 or more shards.

    • E.g. Your old shard had 4 replicas, so your new shard must have 4 or more replicas.

Change old cluster’s password

The migration process will restore the password from the new cluster to your old cluster.

For all four internal users, set the password of your old cluster to the new cluster’s password:

juju run <app>/leader set-password username=<username> password=<new password>

Where <username> is operator, backup, monitor, and logrotate.

List all backups

To view all available backups, use the list-backups action:

juju run <replica-set name | config-server name>/leader list-backups

This shows a list of the available backups similar to the output below. Identify which backup-id corresponds to the new cluster:

backup-id             | backup-type  | backup-status
----------------------------------------------------
YYYY-MM-DDTHH:MM:SSZ  | logical      | finished 

Define remap pattern (sharded cluster)

If you are running Charmed MongoDB as a sharded cluster and you wish to migrate to a cluster with new names, you must generate a remap pattern. If you are running Charmed MongoDB as a replica set, you can skip this step.

A remap pattern is a pattern that specifies which old components should be migrated to which new components. They are used when we are migrating to a cluster with new names.

The following example shows how to create a remap pattern for a sample cluster migration.

Example old cluster:

Model    Controller  Cloud/Region         Version  SLA          Timestamp
old-mod  overlord    localhost/localhost  3.1.6    unsupported  17:27:22Z

App            Version  Status   Scale  Charm       Channel  Rev  Exposed  Message
application             active       1  application            0  no
config-server           active       1  mongodb                0  no
shard1               active       1  mongodb                1  no
shard2               active       1  mongodb                2  no

Unit                         Workload  Agent  Machine  Public address  Ports            Message
application/0*               active    idle   4        10.130.84.77
config-server/0*             active    idle   0        10.130.84.120   27017-27018/tcp
self-signed-certificates/0*  active    idle   3        10.130.84.32
shard1/0*                 active    idle   1        10.130.84.78    27017/tcp
shard2/0*                 active    idle   2        10.130.84.68    27017/tcp

Example new cluster:

Model    Controller  Cloud/Region         Version  SLA          Timestamp
new-mod  overlord    localhost/localhost  3.1.6    unsupported  17:27:22Z

App               Version  Status   Scale  Charm        Channel  Rev  Exposed  Message
application                active       1  application             0  no
config-server-new          active       1  mongodb                 0  no
shard1-new              active       1  mongodb                 1  no
shard2-new              active       1  mongodb                 2  no

Unit                         Workload  Agent  Machine  Public address  Ports            Message
application/0*               active    idle   4        10.130.84.77
config-server-new/0*         active    idle   0        10.130.84.120   27017-27018/tcp
self-signed-certificates/0*  active    idle   3        10.130.84.32
shard1-new/0*             active    idle   1        10.130.84.78    27017/tcp
shard2-new/0*             active    idle   2        10.130.84.68    27017/tcp

The following would be a valid remap pattern:

config-server-new=config-server,shard1-new=shard1,shard2-new=shard2

Restore the backup

To restore your current cluster to the state of the previous cluster, run the restore command and pass the correct backup-id to the command:

juju run <replica-set-name | config-server-name>/leader restore backup-id=YYYY-MM-DDTHH:MM:SSZ [remap-pattern=<remap-pattern>]

Your restore will then be in progress. Once it is complete, your old cluster will represent the state of the new cluster.