Weird thing happen today when I came to work my MongoDB replicaset was not working anymore after a system update
There was a mongodb instance running but when I checked for the replicaset status I had this error message :
> rs.status() { "startupStatus" : 1, "ok" : 0, "errmsg" : "loading local.system.replset config (LOADINGCONFIG)" }
Now I have no idea what caused the problem but I could see (from the error message) that it was related to the replicaset configuration
The problem was actually pretty weird since when I printed the replicaset config it showed an old configuration
> rs.config() { "_id" : "rps", "version" : 2, "members" : [ { "_id" : 0, "host" : "192.168.13.200:27017" }, { "_id" : 1, "host" : "192.168.13.201:27017" } ] }
Since this is a development environment I didn't have a database backup so I really needed the replicaset to start running again
Thankfully MongoDB (since version 2.0) offers a relatively easy way to reconfigure a replicaset that is the rs.reconfig() command
In my case what I had to to was to reconfigure my replicaset with the only surviving member (itself) since the second one was under heavy maintenance.
This operation can be done in 6 steps :
1. Get the current replicaset configuration into a variable
> var cfg = rs.config()
2. Overwrite the members property with the remaining replicaset nodes
> cfg.members = [{"_id" : 3, "host" : "192.168.1.100"}] [ { "_id" : 3, "host" : "192.168.1.100" } ]
3. Reconfigure the replicaset with the new configuration
> rs.reconfig(cfg , {force : true}) { "msg" : "will try this config momentarily, try running rs.conf() again in a few seconds", "ok" : 1 }
4. Wait for the configuration to be applied
Give it a few seconds and run again the conf command to see if the new configuration is properly applied
> rs.conf() { "_id" : "rps", "version" : 77682, "members" : [ { "_id" : 3, "host" : "192.168.1.100:27017" } ] }
5. Restart your mondod instance
/etc/init.d/mongod restart
6. Check that everything is running properly
rps:PRIMARY> rs.status() { "set" : "rps", "date" : ISODate("2013-05-23T07:54:47Z"), "myState" : 1, "members" : [ { "_id" : 3, "name" : "192.168.1.100:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 8, "optime" : { "t" : 1352365425, "i" : 1 }, "optimeDate" : ISODate("2012-11-08T09:03:45Z"), "self" : true } ], "ok" : 1 }
This is really helpful..
ReplyDeletethanks!!. glad it was helpful tu you
Delete