======Overview======
Switchover or Stepdown is a planned change of the primary. Unlike failover, which happens by accident, the switchover can be issued in controlled manner as follows:
====Check current primary====
testset:PRIMARY> rs.status()
{
"set" : "testset",
"date" : ISODate("2018-03-25T18:20:43Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "lparamongo:9005",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 16563,
"optime" : Timestamp(1522002040, 1),
"optimeDate" : ISODate("2018-03-25T18:20:40Z"),
"lastHeartbeat" : ISODate("2018-03-25T18:20:42Z"),
"lastHeartbeatRecv" : ISODate("2018-03-25T18:20:42Z"),
"pingMs" : 0,
"syncingTo" : "lparbmongo:9005"
},
{
"_id" : 1,
"name" : "lparbmongo:9005", <- CURRENT PRIMARY
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 16577,
"optime" : Timestamp(1522002040, 1),
"optimeDate" : ISODate("2018-03-25T18:20:40Z"),
"electionTime" : Timestamp(1521985532, 1),
"electionDate" : ISODate("2018-03-25T13:45:32Z"),
"self" : true
},
{
"_id" : 2,
"name" : "lparcmongo:9005",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 16306,
"optime" : Timestamp(1522002040, 1),
"optimeDate" : ISODate("2018-03-25T18:20:40Z"),
"lastHeartbeat" : ISODate("2018-03-25T18:20:43Z"),
"lastHeartbeatRecv" : ISODate("2018-03-25T18:20:43Z"),
"pingMs" : 0,
"syncingTo" : "lparbmongo:9005"
},
{
"_id" : 3,
"name" : "lpardmongo:9005",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 3,
"lastHeartbeat" : ISODate("2018-03-25T18:20:42Z"),
"lastHeartbeatRecv" : ISODate("2018-03-25T18:20:43Z"),
"pingMs" : 0
}
],
"ok" : 1
}
====Switchover====
testset:PRIMARY> rs.stepDown()
2018-03-25T20:26:34.397+0200 DBClientCursor::init call() failed
2018-03-25T20:26:34.398+0200 Error: error doing query: failed at src/mongo/shell/query.js:81
2018-03-25T20:26:34.399+0200 trying reconnect to 127.0.0.1:9005 (127.0.0.1) failed
2018-03-25T20:26:34.399+0200 reconnect 127.0.0.1:9005 (127.0.0.1) ok
testset:SECONDARY>
bye
[root@lparbmongo ~]# mongo --port 9005
MongoDB shell version: 2.6.12
connecting to: 127.0.0.1:9005/test
testset:SECONDARY>
testset:SECONDARY> rs.status()
{
"set" : "testset",
"date" : ISODate("2018-03-25T18:26:51Z"),
"myState" : 2,
"syncingTo" : "lparamongo:9005",
"members" : [
{
"_id" : 0,
"name" : "lparamongo:9005", <- NEW PRIMARY
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 16931,
"optime" : Timestamp(1522002040, 1),
"optimeDate" : ISODate("2018-03-25T18:20:40Z"),
"lastHeartbeat" : ISODate("2018-03-25T18:26:50Z"),
"lastHeartbeatRecv" : ISODate("2018-03-25T18:26:50Z"),
"pingMs" : 0,
"electionTime" : Timestamp(1522002400, 1),
"electionDate" : ISODate("2018-03-25T18:26:40Z")
},
{
"_id" : 1,
"name" : "lparbmongo:9005",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 16945,
"optime" : Timestamp(1522002040, 1),
"optimeDate" : ISODate("2018-03-25T18:20:40Z"),
"infoMessage" : "syncing to: lparamongo:9005",
"self" : true
},
{
"_id" : 2,
"name" : "lparcmongo:9005",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 16674,
"optime" : Timestamp(1522002040, 1),
"optimeDate" : ISODate("2018-03-25T18:20:40Z"),
"lastHeartbeat" : ISODate("2018-03-25T18:26:49Z"),
"lastHeartbeatRecv" : ISODate("2018-03-25T18:26:51Z"),
"pingMs" : 0,
"lastHeartbeatMessage" : "syncing to: lparbmongo:9005",
"syncingTo" : "lparbmongo:9005"
},
{
"_id" : 3,
"name" : "lpardmongo:9005",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 371,
"lastHeartbeat" : ISODate("2018-03-25T18:26:50Z"),
"lastHeartbeatRecv" : ISODate("2018-03-25T18:26:51Z"),
"pingMs" : 0
}
],
"ok" : 1
}