-
Type:
Question
-
Resolution: Done
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Replication
-
None
-
None
-
None
-
None
-
None
-
None
-
None
-
None
I'm not 100% clear on whether this is an arbiter bug or vote:0 node bug.
I created rs.conf()
[
{ _id: 0.0, host: "localhost:27017", priority: 2.0, votes: 0 },
{ _id: 1.0, host: "localhost:29017", votes: 0.0, priority: 0.0, hidden: true },
{ _id: 2.0, host: "localhost:33333", arbiterOnly: true }
]
So there is one vote only in the cluster and it belongs to the arbiter. I was under the impression that a non-voting node cannot call for an election (can only veto an election). Clearly arbiter, who is not eligible to be a primary cannot call for an election (right?).
And yet when I started up node _id:0 (only eligible for primary node) it got elected.
_id:0 node log:
2014-04-16T12:25:58.002-0400 [rsStart] replSet STARTUP2 2014-04-16T12:25:58.003-0400 [rsSync] replSet SECONDARY 2014-04-16T12:25:58.284-0400 [rsHealthPoll] replSet member localhost:33333 is up 2014-04-16T12:25:58.284-0400 [rsHealthPoll] replSet member localhost:33333 is now in state ARBITER 2014-04-16T12:25:58.285-0400 [rsHealthPoll] replSet member localhost:29017 is up 2014-04-16T12:25:58.285-0400 [rsHealthPoll] replSet member localhost:29017 is now in state SECONDARY 2014-04-16T12:25:58.302-0400 [rsMgr] not electing self, localhost:33333 would veto with 'I don't think localhost:27017 is electable' 2014-04-16T12:25:58.304-0400 [rsMgr] not electing self, localhost:33333 would veto with 'I don't think localhost:27017 is electable' 2014-04-16T12:25:58.452-0400 [conn1] end connection 127.0.0.1:63684 (1 connection now open) 2014-04-16T12:25:58.452-0400 [initandlisten] connection accepted from 127.0.0.1:63689 #4 (3 connections now open) 2014-04-16T12:26:04.288-0400 [rsMgr] replSet info electSelf 0 2014-04-16T12:26:04.458-0400 [conn4] end connection 127.0.0.1:63689 (1 connection now open) 2014-04-16T12:26:04.458-0400 [initandlisten] connection accepted from 127.0.0.1:63690 #5 (3 connections now open) 2014-04-16T12:26:05.011-0400 [rsMgr] replSet PRIMARY 2014-04-16T12:26:05.146-0400 [conn3] end connection 127.0.0.1:63686 (1 connection now open) 2014-04-16T12:26:05.147-0400 [initandlisten] connection accepted from 127.0.0.1:63693 #6 (2 connections now open)
arbiter log:
2014-04-16T12:25:57.065-0400 [conn1589] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
2014-04-16T12:25:57.065-0400 [conn1589] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
2014-04-16T12:25:57.065-0400 [conn1589] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 } ntoreturn:1 keyUpdates:0 numYields:0 reslen:149 0ms
2014-04-16T12:25:57.140-0400 [rsHealthPoll] replset info localhost:27017 thinks that we are down
2014-04-16T12:25:57.141-0400 [rsHealthPoll] replSet member localhost:27017 is up
2014-04-16T12:25:57.141-0400 [rsHealthPoll] replSet member localhost:27017 is now in state STARTUP
2014-04-16T12:25:58.284-0400 [conn1590] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
2014-04-16T12:25:58.284-0400 [conn1590] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
2014-04-16T12:25:58.284-0400 [conn1590] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 } ntoreturn:1 keyUpdates:0 numYields:0 reslen:149 0ms
2014-04-16T12:25:58.285-0400 [conn1590] run command admin.$cmd { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 }
2014-04-16T12:25:58.285-0400 [conn1590] command: { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 }
2014-04-16T12:25:58.286-0400 [conn1590] command admin.$cmd command: replSetFresh { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 } ntoreturn:1 keyUpdates:0 numYields:0 reslen:125 0ms
2014-04-16T12:25:58.303-0400 [conn1590] run command admin.$cmd { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 }
2014-04-16T12:25:58.303-0400 [conn1590] command: { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 }
2014-04-16T12:25:58.303-0400 [conn1590] command admin.$cmd command: replSetFresh { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 } ntoreturn:1 keyUpdates:0 numYields:0 reslen:125 0ms
2014-04-16T12:25:59.067-0400 [conn1589] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
2014-04-16T12:25:59.067-0400 [conn1589] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
2014-04-16T12:25:59.067-0400 [conn1589] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 } ntoreturn:1 keyUpdates:0 numYields:0 reslen:149 0ms
2014-04-16T12:25:59.142-0400 [rsHealthPoll] replSet member localhost:27017 is now in state SECONDARY
2014-04-16T12:26:00.286-0400 [conn1590] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
2014-04-16T12:26:00.286-0400 [conn1590] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
2014-04-16T12:26:00.286-0400 [conn1590] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 } ntoreturn:1 keyUpdates:0 numYields:0 reslen:149 0ms
2014-04-16T12:26:01.068-0400 [conn1589] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
2014-04-16T12:26:01.068-0400 [conn1589] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
2014-04-16T12:26:01.068-0400 [conn1589] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 } ntoreturn:1 keyUpdates:0 numYields:0 reslen:149 0ms
2014-04-16T12:26:02.288-0400 [conn1590] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
2014-04-16T12:26:02.288-0400 [conn1590] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
2014-04-16T12:26:02.288-0400 [conn1590] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 } ntoreturn:1 keyUpdates:0 numYields:0 reslen:149 0ms
2014-04-16T12:26:03.070-0400 [conn1589] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
2014-04-16T12:26:03.070-0400 [conn1589] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
2014-04-16T12:26:03.070-0400 [conn1589] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 } ntoreturn:1 keyUpdates:0 numYields:0 reslen:149 0ms
2014-04-16T12:26:04.287-0400 [conn1590] run command admin.$cmd { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 }
2014-04-16T12:26:04.287-0400 [conn1590] command: { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 }
2014-04-16T12:26:04.287-0400 [conn1590] command admin.$cmd command: replSetFresh { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 } ntoreturn:1 keyUpdates:0 numYields:0 reslen:70 0ms
2014-04-16T12:26:04.288-0400 [conn1590] run command admin.$cmd { replSetElect: 1, set: "asyaRS", who: "localhost:27017", whoid: 0, cfgver: 64513, round: ObjectId('534eaf1c89732754cb5d8646') }
2014-04-16T12:26:04.289-0400 [conn1590] command: { replSetElect: 1, set: "asyaRS", who: "localhost:27017", whoid: 0, cfgver: 64513, round: ObjectId('534eaf1c89732754cb5d8646') }
2014-04-16T12:26:04.289-0400 [conn1590] replSet received elect msg { replSetElect: 1, set: "asyaRS", who: "localhost:27017", whoid: 0, cfgver: 64513, round: ObjectId('534eaf1c89732754cb5d8646') }
2014-04-16T12:26:04.289-0400 [conn1590] replSet info voting yea for localhost:27017 (0)
2014-04-16T12:26:04.289-0400 [conn1590] command admin.$cmd command: replSetElect { replSetElect: 1, set: "asyaRS", who: "localhost:27017", whoid: 0, cfgver: 64513, round: ObjectId('534eaf1c89732754cb5d8646') } ntoreturn:1 keyUpdates:0 numYields:0 reslen:66 0ms
2014-04-16T12:26:04.289-0400 [conn1590] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
2014-04-16T12:26:04.290-0400 [conn1590] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
2014-04-16T12:26:04.290-0400 [conn1590] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 } ntoreturn:1 keyUpdates:0 numYields:0 reslen:149 0ms
2014-04-16T12:26:05.071-0400 [conn1589] Socket recv() conn closed? 127.0.0.1:63559
2014-04-16T12:26:05.072-0400 [conn1589] SocketException: remote: 127.0.0.1:63559 error: 9001 socket exception [CLOSED] server [127.0.0.1:63559]
2014-04-16T12:26:05.073-0400 [conn1591] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
2014-04-16T12:26:05.073-0400 [conn1591] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
2014-04-16T12:26:05.074-0400 [conn1591] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 } ntoreturn:1 keyUpdates:0 numYields:0 reslen:149 0ms
2014-04-16T12:26:05.148-0400 [rsHealthPoll] replSet member localhost:27017 is now in state PRIMARY
I think if votes:0 nodes can call for election and can become primaries it becomes really difficult to reason about majorities and various failure scenarios.