MongoDB: Remove an Arbiter From a Replica Set
Removing an arbiter from MongoDB Replica Set can be quite tricky, and official MongoDB documentation does not say it directly how to do it.
I assume that you have auth enabled (just like I have), so lets start with connecting to your ReplicaSet "repl" master as an administrator:
mongo mongo.domain.com/admin -u admin -p pass
You will see the following prompt:
repl:PRIMARY>
Type in conf=rs.conf()
repl:PRIMARY> conf = rs.conf()
{
"_id" : "repl",
"version" : 8,
"members" : [
{
"_id" : 0,
"host" : "mongo.server.com:27017",
"priority" : 2
},
{
"_id" : 1,
"host" : "mongo1.server.com:27017"
},
{
"_id" : 2,
"host" : "arbiter.server.com:27017",
"arbiterOnly" : true
},
{
"_id" : 3,
"host" : "mongo2.server.com:27017"
}
]
}
Now lets adjust the configuration by removing member from 3rd position using JS splice() method:
repl:PRIMARY> conf.members.splice(2,1)
repl:PRIMARY> conf
{
"_id" : "repl",
"version" : 8,
"members" : [
{
"_id" : 0,
"host" : "mongo.server.com:27017",
"priority" : 2
},
{
"_id" : 1,
"host" : "mongo1.server.com:27017"
},
{
"_id" : 3,
"host" : "mongo2.server.com:27017"
}
]
}
Finally, lets ask MongoDB to reconfigure the replica set
repl:PRIMARY> rs.reconfig(conf) Tue Jul 16 01:14:32.165 DBClientCursor::init call() failed Tue Jul 16 01:14:32.165 trying reconnect to localhost:27017 Tue Jul 16 01:14:32.165 reconnect localhost:27017 ok reconnected to server after rs command (which is normal)
repl:PRIMARY>
repl:PRIMARY> rs.conf()
{
"_id" : "repl",
"version" : 9,
"members" : [
{
"_id" : 0,
"host" : "mongo.server.com:27017",
"priority" : 2
},
{
"_id" : 1,
"host" : "mongo1.server.com:27017"
},
{
"_id" : 3,
"host" : "mongo2.server.com:27017"
}
]
}
Type in rs.status() to verify that arbiter was removed from ReplicaSet, and by our example we have 1 primary and 2 secondaries.
repl:PRIMARY> rs.status()
Congratulations, you have updated your MongoDB ReplicaSet (notice, there is new version number 9 in rs.conf() - MongoDB automatically updates it to newer version when you call rs.reconfig())
More reading: 10Gen Announces MongoDB Backup Service

Comments
Post a Comment