Add, Edit or Remove Host from MongoDB ReplicaSet
There are 2 ways to add or remove host from mongodb running replica set
- without downtime
- with downtime
If your application is not yet live, or you can afford downtime, you should go with downtime approach, as it occurs less risk and is more easy to achieve
In this tutorial we will see how to add/edit host using downtime method, which is faster to complete
- to add host using downtime method
Add, Edit or Remove Host from Replica Set
1. Stop all replica-set instances
- Login to all instances and stop mongodb
sudo systemctl restart mongod
sudo systemctl status mongod
2. Start MongoDB temporarily
- You need to start MongoDB again without a replica set option, so it should run as standalone application
- While doing this, you can also change MongoDB’s port number so accidentally any client doesn’t connect to mongo and write some data which can’t be replicated
- Here, make sure mongodb that you are connecting with is taking exact directory path as replica set’s data path. If default path is not set, while running mentioned command add
--db-path /path/to/directory
as well
sudo mongod --port 37017
sudo systemctl status mongod
3. Add instance
- If you are adding any instance in the replica set, follow these steps to launch an instance, install MongoDB and add replica set configuration as required
- For edit in hostname, Do changes to pointing of IP or hostname and keep it handy with you for next steps
4. Log into MongoDB and change replication configuration
- Connect to each mongodb using mongosh or mongo client and perform below mentioned operations
Here, I’m editing one of the hostname from my current configuration and applying those changes for whole replica set.
You need to perform this operation in each replica set machine
mongo --port 37017
# change to mongosh
use local
cfg = db.system.replset.findOne( { "_id": "poc-ic" } )
cfg.members[0].host = "mongo-replicaset-01-poc.identicalcloud.com:27017"
cfg.members[1].host = "mongo-replicaset-02-poc.identicalcloud.com:27017"
cfg.members[2].host = "mongo-replicaset-04-poc.identicalcloud.com:27017"
db.system.replset.update( { "_id": "poc-ic" } , cfg )
# here command is changed with new mongo update, add it from notes
5. Start MongoDB with Changes
After getting success, in updating changes in all machines of replica set, now we need to stop mongo db again and restart it with correct port and replica set configuration
sudo systemctl stop mongod
sudo systemctl start mongod
sudo systemctl status mongod
6. Verify your changes
- Connect to any machine of mongodb replica and verify replication status
sudo mongod -u -p
#complete the command
rs.conf()
References:
https://docs.huihoo.com/mongodb/3.4/tutorial/change-hostnames-in-a-replica-set/index.html