Consensus Algorithms · Phase 9

Cloud-Native & Geo-Distributed Consensus

Article 9.6 of 6 — Phase 9 complete after this

Jul 26, 2026 · devops · 22 min read · 4700 words expert

Dynamic membership and reconfiguration.

devops distributed-systems reconfiguration series-consensus

This series has previewed the reconfiguration problem repeatedly without ever fully resolving it — article 3.3's FAQ flagged it, article 5.6's FAQ flagged it again, article 7.8 introduced Matchmaker Paxos's formal fix. This article closes Phase 9 by giving it the complete treatment it deserves: exactly why changing a cluster's membership while it's live is more dangerous than it looks, Raft's specific two-phase joint consensus solution, the simpler single-server-change alternative most production Raft implementations actually use, and how this connects concretely to the geo-distributed systems Phase 9 has covered — adding or removing an entire region is, underneath, exactly this same reconfiguration problem, just with higher stakes and longer physical distances involved.

Why reconfiguration is dangerous, precisely

Recall the exact hazard from article 1.2's split-brain mechanics, now applied specifically to a membership change rather than a network partition: suppose a 3-node cluster (majority = 2) is being reconfigured to a 5-node cluster (majority = 3). If this change isn't handled carefully, there's a dangerous window during the transition where some nodes believe the cluster is still the old 3-node configuration (majority = 2) while others already believe it's the new 5-node configuration (majority = 3). During that window, it becomes possible for two disjoint groups to each believe they hold a valid majority — one group of 2 old-configuration nodes, and a different group of 3 new-configuration nodes that doesn't overlap with it — reintroducing exactly the split-brain scenario article 1.2 spent its entire length warning about, purely as a side effect of a membership change, with no network partition or crash required to trigger it.

The naive reconfiguration hazard: two valid majorities, two different configurations Old config (3 nodes, majority=2) 2 of these still believe old config is authoritative New config (5 nodes, majority=3) 3 of these already believe new config is authoritative These two groups don't overlap — both can act as "the" majority simultaneously. Exactly the split-brain scenario article 1.2 warned about, from a membership change alone.

Fig 1 — Reconfiguration is dangerous specifically because it can create two non-overlapping "valid" majorities during the transition.

Raft's fix: joint consensus, a two-phase transition

Raft's original paper (article 5.5's primary source) addresses this with a technique called joint consensus, and it's worth walking through carefully because the mechanism is a direct, practical descendant of article 4.4's two-phase-commit pattern, repurposed here for a genuinely different (and, unlike plain 2PC, provably safe under partitions) purpose. Rather than switching directly from the old configuration to the new one, the cluster first transitions to an intermediate joint configuration — one in which any decision (an election, a log commit) requires a majority from both the old configuration and the new configuration simultaneously. Only once that joint configuration is itself safely committed (via the ordinary majority-overlap mechanism, article 3.3, just requiring double majorities during this phase) does the cluster transition a second time, fully into the new configuration alone, dropping the old configuration's requirement entirely.

The safety argument for why this two-phase approach closes the hazard described above is worth stating precisely: during the joint-configuration phase, any decision requires a majority of the old config and a majority of the new config — meaning it's structurally impossible for the old-config-only group and the new-config-only group from Fig 1 to each reach a valid decision independently, because neither one alone satisfies the joint requirement. There is no window, at any point during a correctly-implemented joint-consensus transition, where two disjoint groups can each believe they hold sufficient authority — the double-majority requirement during the joint phase is specifically what article 4.5's 3PC discussion showed was missing from naive reconfiguration approaches, now supplied correctly.

PhaseRequirement to commit a decisionWhy this closes the hazard
Stable, old configMajority of old config aloneOrdinary operation — no transition in progress
Joint config (transition)Majority of old config AND majority of new configNo group can act without approval spanning both configurations — closes the split-brain window
Stable, new configMajority of new config aloneTransition complete — old config's requirement fully dropped

The simpler alternative: one server at a time

Joint consensus is provably safe for arbitrary membership changes (adding or removing any number of servers at once), but it's genuinely more complex to implement correctly — a second configuration type, a second commit phase, more edge cases to test (exactly the kind of subtlety article 8.6's Jepsen coverage flagged as a fertile source of real implementation bugs). Many production Raft implementations instead adopt a simpler, more restrictive rule: only allow membership changes one server at a time — add one server, wait for that change to fully commit, then add or remove the next one, never overlapping two membership changes. The safety argument here is more elementary: for any single-server change, the old and new configurations' majority sets are guaranteed to overlap by simple counting (changing the cluster size by exactly one can never simultaneously produce two disjoint majorities, a fact worth verifying by trying small examples), so no joint-configuration phase is needed at all — every step is safe on its own, at the cost of larger reconfigurations (adding three new nodes at once, say) needing to be broken into three sequential single-server steps rather than one atomic operation.

This is a genuine, honest trade-off in the same spirit as every other one this series has surfaced: joint consensus is more general (handles arbitrary configuration changes in one transition) but more complex to implement correctly; single-server changes are simpler to implement and reason about, but force multi-server reconfigurations to happen as a sequence of smaller, individually-safe steps. Most production systems — including etcd (8.1) — default to the single-server-at-a-time approach specifically because of this implementation-simplicity argument, directly echoing article 5.5's understandability-first design philosophy carried through into an operational feature, not just the core algorithm.

Revisiting Matchmaker Paxos with the full picture

Article 7.8 introduced Matchmaker Paxos's dedicated "matchmaker" role, which mediates configuration changes by explicitly reconciling old and new configurations' quorums before considering a reconfiguration complete — described there without the full joint-consensus mechanics this article has now built up. Reading it again with this article's vocabulary in hand: Matchmaker Paxos's matchmaker is, in effect, playing a role structurally similar to Raft's joint configuration, just implemented as a dedicated coordinating party rather than a special dual-majority log-entry type — different mechanism, same underlying safety requirement (no decision should be reachable by a group that isn't a genuine majority of a single, unambiguous, current configuration), confirming once more this series' recurring finding that different algorithms solving the same hard sub-problem tend to converge on structurally similar answers.

Adding and removing regions: reconfiguration at Phase 9's scale

This article's material connects directly and concretely back to the systems covered throughout Phase 9. When a geo-distributed system like CockroachDB (9.2), TiDB (9.4), or Spanner (9.1) adds a new region to a deployment — a common, expected operational event as an application's user base grows into a new geography — every Raft or Multi-Paxos group whose replica set should include the new region has to go through exactly the reconfiguration process this article describes, potentially thousands of times over for a system sharded into many ranges or Regions, each running its own independent membership change. This is precisely why article 9.2 flagged Multi-Raft's fan-out cost as a real operational concern, and why article 7.8's PigPaxos-style batching optimizations matter in practice: a region-addition event isn't one reconfiguration, it's potentially millions of small, individually-safe reconfigurations, each one needing to preserve the exact safety property this article has spent its length proving — and doing that reliably, at that scale, is a genuine engineering achievement most users of these systems never see or think about.

Closing Phase 9

Phase 9 took consensus from single-datacenter deployment (Phase 8) to planet scale: Spanner's hardware-backed TrueTime (9.1), CockroachDB's software-only Hybrid Logical Clock alternative (9.2), FoundationDB's radically layered architecture (9.3), TiDB and YugabyteDB's wire-compatibility bet (9.4), the physical latency floor and the read/write optimizations that work around it (9.5), and now the reconfiguration machinery that lets any of these systems safely grow, shrink, and rebalance across regions without ever risking the split-brain scenario this entire series opened with in article 1.2. Every mechanism in this phase, without exception, ultimately rests on article 3.3's majority-overlap safety argument — geography changes the economics (latency, hardware investment, operational complexity) but never the underlying mathematics.

Phase 10 now turns to the research frontier directly: a dedicated approach to reading consensus papers efficiently, followed by QuePaxa and Meerkat — the two papers this entire series has been building toward since its very first article — plus a master comparison table across the whole Paxos family and an honest look at the open problems the field hasn't yet solved.

FAQ

Can a cluster survive a failure during the joint-configuration phase itself?

Yes — this is a critical part of what makes joint consensus actually safe rather than just theoretically elegant. The joint configuration is itself replicated and committed via the ordinary log-replication and leader-election machinery (articles 5.5-5.6), so a leader failure or node crash during the transition is handled exactly like any other failure during normal operation — a new leader is elected (itself requiring the joint double-majority while the transition is in progress), and the transition simply resumes or is safely aborted back to the prior stable configuration.

Does removing a node ever risk losing committed data?

Not if the reconfiguration process itself is followed correctly — a node being removed has, by definition, already had its committed entries replicated to the remaining majority (that's what "committed" means, per article 3.2), so removing it doesn't remove any data the rest of the cluster doesn't already durably hold. The risk this article addresses is entirely about the transient majority-computation hazard during the transition, not about data loss from the removed node specifically.

Is single-server reconfiguration slower than joint consensus for large membership changes?

Yes, in wall-clock terms for a large change — N sequential single-server steps take longer than one joint-consensus transition handling all N changes at once, each single step needing to fully commit before the next begins. For the comparatively rare, non-latency-critical event of adding a new region or rebalancing a cluster, most operators judge this wall-clock cost acceptable given the corresponding reduction in implementation complexity and testing surface, echoing article 7.7's OmniPaxos discussion of engineering-discipline trade-offs mattering as much as algorithmic elegance.

Takeaways

  • Reconfiguration is dangerous because a naive, non-atomic transition can create two disjoint majorities — one still trusting the old configuration, one already trusting the new one — reintroducing article 1.2's split-brain hazard purely from a membership change.
  • Raft's joint consensus closes this with a two-phase transition requiring a double majority (old config AND new config) during the intermediate phase, directly recalling article 4.4's two-phase-commit pattern, made provably safe under partitions.
  • The simpler single-server-at-a-time alternative avoids needing joint configuration entirely, by relying on simple counting to guarantee any one-node change's old and new majorities always overlap — most production systems (including etcd, 8.1) default to this for implementation simplicity.
  • Matchmaker Paxos (7.8), revisited, solves the identical underlying problem via a dedicated coordinating role rather than a dual-majority log-entry type — a different mechanism, the same safety requirement.
  • Adding or removing an entire region in a Phase 9 geo-distributed system is this exact reconfiguration problem, potentially repeated millions of times across every independent Raft/Paxos group a sharded system maintains.
  • Phase 9 closes having shown that geography changes the economics of consensus (latency, hardware, operational complexity) at every turn — but never the underlying majority-overlap mathematics (article 3.3) that every single mechanism in this phase ultimately rests on.

References & further reading

← 9.5 WAN Consensus and Read Optimization Phase 9 complete — back to series hub →
© cvam — written in plaintext, served warm