Migrate your data to Percona Server for MongoDB
If you use Percona Server for MongoDB, migrate your data to it from the MongoDB virtual machine in your Kubernetes cluster
Read time 2 minutesLast updated 11 hours ago
Migrate your data from the MongoDB virtual machine (VM) to Percona Server for MongoDB (PSMDB) in your Kubernetes cluster at your own pace with a staged approach.
The Terraform variable is for the deployment of the PSMDB operator and database in your Kubernetes cluster as a parallel setup. This variable is disabled by default. However, to ensure zero downtime, all services initially continue using your current MongoDB instance. The connection string logic follows this priority order:
enable_percona_mongo- The custom URI, if provided
- The existing MongoDB VM
- The new PSMDB cluster
To migrate your data to PSMDB, follow these steps:
-
Connect to your MongoDB instance through SSH, for example, using AWS Systems Manager Agent (SSM Agent).
-
To assign therole to the user who is to run the backup script, run this command:
backup# Connect to MongoDB and grant the backup rolemongo --username {admin_username} --password {admin_password} --authenticationDatabase admindb.grantRolesToUser("asset-manager", ['backup'])Use these values:- : the
admin_usernameuser if you're using our MongoDB VMasset-manager - : the password that is stored in the
admin_passwordsecret in Secret Managermongo_db_connection_string
-
Copy the backup script from the following location, and then run it:./aws/scripts/mongodb-backup.shTo provide the correct username and password, run this command:./mongodb-backup.sh asset-manager {password}
-
Retrieve the .tar file, for example, using the Secure Copy Protocol (SCP).
-
To validate which pod is the primary pod, run these commands:kubectl exec -it psmdb-db-rs0-x -c mongod -- bashmongo --username {admin_username} --password {admin_password} --authenticationDatabase adminrs.status()The password is stored in thesecret in Secret Manager.
psmdb_asset_manager_passwordThe primary pod is the pod that has these values:"state" : 1"stateStr" : "PRIMARY"
-
To retrieve .the tar file using SCP and copy it to the PSMDB primary pod, run this command:kubectl cp ~/tmp/mongo_data_backup_YYYY-MM-DD_HH-MM-SS.tar.gz psmdb-db-rs0-x:/tmp/mongo_backup_YYYY-MM-DD_HH-MM-SS.tar.gz -c mongod
-
Copy the restore script from the following location to the primary pod:./aws/scripts/mongodb-restore.shRun this command:kubectl cp ~/scripts/mongodb-restore.sh psmdb-db-rs0-x:/tmp/mongodb-restore.sh -c mongod
-
To connect to the primary pod and import the backup, run these commands:kubectl exec -it psmdb-db-rs0-x -c mongod -- bashcd /tmpchmod +x mongodb-restore.sh./mongodb-restore.sh asset-manager {password} mongo_backup_YYYY-MM-DD_HH-MM-SS.archive
-
To update theterraform variable to use the new PSMDB cluster, run this command:
mongo_connection_urimongo_connection_uri = "mongodb+srv://asset-manager:{password}@psmdb-db-rs0.{kubernetes_namespace}.svc.cluster.local?authSource=admin&replicaSet=rs0&ssl=false" -
Restart the Asset Manager services so that they use the new connection string.
-
When you're sure that the new PSMDB cluster is working, you can disable MongoDB VM instance by setting the Terraform variable.
enable_mongo=false