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
kubectl -n expertflow scale deploy --replicas=0 -l app.kubernetes.io/instance=ef-cx
kubectl -n expertflow scale deploy --replicas=0 -l app.kubernetes.io/instance=cx-channels
kubectl -n expertflow scale deploy --replicas=0 -l app.kubernetes.io/instance=cx-agent-desk
Temporarily stop the Reporting scheduler cron
kubectl -n expertflow patch cronjobs cx-reporting-cron -p '{"spec" : {"suspend" : true }}'
Stop Surveys and Campaigns deployment objects
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
helm -n ef-external uninstall mongo
Delete the mongoDB PVCs using the following command:
kubectl delete pvc -n ef-external datadir-mongo-mongodb-0 datadir-mongo-mongodb-1
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
kubectl -n expertflow delete secret mongo-mongodb-ca
Recreate the secret from new deployment of MongoDB using
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
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
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
#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
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
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
kubectl -n expertflow rollout restart deploy
kubectl -n expertflow scale deploy --replicas=1 -l app.kubernetes.io/instance=cx-transflux
kubectl -n expertflow scale deploy --replicas=1 -l app.kubernetes.io/instance=cx-agent-desk
kubectl -n expertflow scale deploy --replicas=1 -l app.kubernetes.io/instance=cx-channels
Enable the Reporting scheduler cron
kubectl -n expertflow patch cronjobs cx-reporting-cron -p '{"spec" : {"suspend" : false }}'
Start Surveys and Campaigns deployment objects
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