Skip to content
Graphviz (DOT) templates

Regional failover with shared control plane

Separates health evidence, traffic routing and data-store promotion; replication and failover assumptions remain explicit. Original worked design example; adapt responsibilities, thresholds and assumptions to your system.

Template previewGraphviz (DOT)
G dns Global routing a Region A ingress dns->a normal traffic b Region B ingress dns->b failover traffic health Health evaluator health->dns routing decision audit Promotion audit health->audit record decision quorum Quorum authority health->quorum request failover appA Region A service a->appA request appB Region B service b->appB request dbA Primary data store appA->dbA read/write dbB Replica data store appB->dbB read after promotion dbA->dbB replication dbB->audit promotion receipt fence Fence old primary quorum->fence revoke old write lease fence->dbB promote after fencing confirmed

What this template contains

Graph
Directed
Edges
13
Source
29 lines

Make it your own.

digraph G {
 graph [rankdir=LR, bgcolor="transparent", pad="0.3", nodesep="0.45", ranksep="0.8"];
 node [shape=box, style="rounded,filled", fillcolor="#edf4fa", color="#47728d", fontname="Arial", fontsize=12, margin="0.14"];
 edge [color="#64748b", fontname="Arial", fontsize=10];
 dns [label="Global routing"];
 health [label="Health evaluator"];
 a [label="Region A ingress"];
 b [label="Region B ingress"];
 appA [label="Region A service"];
 appB [label="Region B service"];
 dbA [label="Primary data store"];
 dbB [label="Replica data store"];
 audit [label="Promotion audit"];
 quorum [label="Quorum authority"];
 fence [label="Fence old primary"];
 health -> dns [label="routing decision"];
 dns -> a [label="normal traffic"];
 dns -> b [label="failover traffic"];
 a -> appA [label="request"];
 b -> appB [label="request"];
 appA -> dbA [label="read/write"];
 dbA -> dbB [label="replication"];
 appB -> dbB [label="read after promotion"];
 health -> audit [label="record decision"];
 health -> quorum [label="request failover"];
 quorum -> fence [label="revoke old write lease"];
 fence -> dbB [label="promote after fencing confirmed"];
 dbB -> audit [label="promotion receipt"];
}