Skip to main content
Skip table of contents

Conversion of Single Node MongoDB to ReplicaSet

WARNING

This procedure requires downtime for the Expertflow CX solution, please plan accordingly.

Steps involved in converting the single node MonogDB to ReplicaSet

Shutdown all the ef-cx deployments in expertflow namespace

CODE
kubectl -n expertflow scale deploy --replicas=0 -l app.kubernetes.io/name=ef-cx

Temporarily stop the Reporting scheduler cron

CODE
kubectl -n expertflow patch cronjobs cx-reporting-cron -p '{"spec" : {"suspend" : true }}'

Stop Surveys and Campaigns deployment objects

CODE
kubectl -n expertflow scale deploy -l app.kubernetes.io/instance=cx-campaigns  --replicas=0 
kubectl -n expertflow scale deploy -l app.kubernetes.io/instance=cx-surveys  --replicas=0

Backup the mongoDB

Please take back up the existing single node MongoDB using Mongo, PostgreSQL Backup/Restore Procedure for EF-CX on Kubernetes ( manual procedure ) to secure location

Uninstall the existing MongoDB solution using

CODE
helm -n ef-external uninstall mongo

Deploy MongoDB in ReplicaSet using Deployment of Mongo using ReplicaSet

Restore the backup taken using Mongo, PostgreSQL Backup/Restore Procedure for EF-CX on Kubernetes ( manual procedure ) to the new MongoDB in HA/ReplicaSet

Delete the secret object in expertflow namespace using

CODE
kubectl -n expertflow delete secret mongo-mongodb-ca

Recreate the secret from new deployment of MongoDB using

CODE
kubectl get secret mongo-mongodb-ca -n ef-external  -o yaml | sed 's/namespace: ef-external/namespace: expertflow/' | kubectl create -f -

Edit/update the ef-connections variable responsible for connecting to the MongoDB Host string by editing the helm-values/ef-cx-custom-values.yaml

  • Comment/diable the existing the MONGODB_HOST

  • Add/update a new variable MONGODB_HOST: mongo-mongodb-0.mongo-mongodb-headless.ef-external.svc.cluster.local:27017,mongo-mongodb-1.mongo-mongodb-headless.ef-external.svc.cluster.local:27017

  • Add/update a new variable MONGODB_READ_PREFERENCE: "secondaryPreferred"

  • Add/update a new variable MONGODB_REPLICASET: "expertflow"

  • Add/update a new variable MONGODB_REPLICASET_ENABLED: "true"

Start all the deployments in expertflow namespace by executing

CODE
helm upgrade --install --namespace expertflow --create-namespace  ef-cx  --debug --values helm-values/ef-cx-custom-values.yaml expertflow/cx

Delete the config-map responsible for reportingConnector’s MongoDB connection string

CODE
kubectl -n expertflow delete configmap ef-reporting-connector-conf-cm 

Edit the pre-deployment/reportingConnector/reporting-connector.conf and enable below given parameters and commenting the existing entries by putting # at the start

CODE
#UNCOMMENT BELOW LINES IF YOU WANT TO USE MONGO replicaset
mongo_host1=mongo-mongodb-0.mongo-mongodb-headless.ef-external.svc.cluster.local
mongo_port1=27017
mongo_host2=mongo-mongodb-1.mongo-mongodb-headless.ef-external.svc.cluster.local
mongo_port2=27017
mongo_host3=mongo-mongodb-0.mongo-mongodb-headless.ef-external.svc.cluster.local
mongo_port3=27017
mongo_host4=mongo-mongodb-0.mongo-mongodb-headless.ef-external.svc.cluster.local
mongo_port4=27017
mongo_host5=mongo-mongodb-0.mongo-mongodb-headless.ef-external.svc.cluster.local
mongo_port5=27017
mongo_host6=mongo-mongodb-0.mongo-mongodb-headless.ef-external.svc.cluster.local
mongo_port6=27017

Create the config-map with updated connection string

CODE
kubectl -n expertflow create configmap ef-reporting-connector-conf-cm --from-file=pre-deployment/reportingConnector/reporting-connector.conf

Run helm upgrade to restart the deployment of reportingConnector

CODE
helm upgrade --install --namespace expertflow --set global.efCxReleaseName="ef-cx"   cx-reporting --debug --values helm-values/cx-reporting-scheduler-custom-values.yaml  expertflow/reporting 

Rollout a restart of all other deployments to take effect of the new MongoDB connection string

CODE
kubectl -n expertflow rollout restart deploy 

Enable the Reporting scheduler cron

CODE
kubectl -n expertflow patch cronjobs cx-reporting-cron -p '{"spec" : {"suspend" : false }}'

Start Surveys and Campaigns deployment objects

CODE
kubectl -n expertflow scale deploy -l app.kubernetes.io/instance=cx-campaigns  --replicas=1
kubectl -n expertflow scale deploy -l app.kubernetes.io/instance=cx-surveys  --replicas=1
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.