Problem Statement
Explain how replica set elections work in MongoDB. What factors determine which secondary becomes the new primary?
Explanation
Replica set elections occur when the current primary becomes unavailable or steps down. The remaining replica set members automatically start an election to choose a new primary. During the election, members cannot accept writes, but the process typically completes within seconds.
Each eligible voting member casts a vote for the member it believes should become primary. Members vote based on several factors in priority order. First, a member must have the most recent data. Members compare their oplog timestamps, and those with older data will not vote for themselves.
Second, member priority affects elections. You can configure each member with a priority value from 0 to 1000, with default being 1. Members with higher priority are more likely to be elected. A member with priority 0 can never become primary and is useful for special-purpose nodes like analytics servers.
Third, members must be able to reach a majority of voting members. In a three-member replica set, at least two members must be available to elect a new primary. This majority requirement prevents split-brain scenarios where multiple primaries could exist.
Once a member receives votes from the majority of voting members, it becomes the new primary. Applications using replica set connections automatically discover the new primary and route write operations to it.
Code Solution
SolutionRead Only
// Configure member priorities var cfg = rs.conf() // Member 0: high priority, preferred primary cfg.members[0].priority = 2 // Member 1: normal priority cfg.members[1].priority = 1 // Member 2: priority 0, never becomes primary cfg.members[2].priority = 0 rs.reconfig(cfg) // During election: // 1. Primary becomes unavailable // 2. Secondaries detect loss of primary (heartbeat timeout) // 3. Eligible members call for election // 4. Members vote based on priority and data recency // 5. Member with majority votes becomes new primary
