It is derby night. Live bets spike. Your main region is hot. Then a write spike hits the wallet DB. Latency jumps. Cash-out hangs. Some slips time out. Support chat fills up. Your team flips to plan B. DNS starts to move traffic. But the standby is cold on promos, and one queue lags. You face refunds, bonus abuse, and a long night. This guide shows how to build a plan you can trust on days like this. By the end, you can sketch a DR and failover path that keeps bets safe, players calm, and regulators off your back.
Two goals rule the room: time to get back up (RTO) and data you can afford to lose (RPO). In iGaming, these touch money, odds, bet slips, jackpots, and promo states. A clean page view is nice, but wallet integrity wins. Your RPO for wallets should be near zero. For bet slip state, seconds. For non-core data like logs or BI, minutes can be fine.
Do not mix these with your SLOs. An SLO is what players feel (p95 latency, success rate). RTO/RPO are for the moment things break. Write them per domain: wallet, bet engine, KYC, payments, promos, content. Price the gap. Every minute of outage can cost revenue, churn, and fines. If bet history is not the same across regions, you face disputes and a loss of trust. For a shared frame on terms, see the NIST contingency planning guidance.
Pick a pattern per domain, not one size for all. Common paths are pilot-light, warm standby, active-passive, active-active, and some hybrids. Each has a price in cash and in ops work. In iGaming, the hard part is not CPUs. It is state. A promo counter here, a wallet ledger there, a bonus wallet in a side store, and a bet stream on Kafka. The wrong mix can cause drift. Drift becomes loss.
As you weigh choices, map target RTO/RPO to the wallet and bet engine first. Use caches to smooth reads. Use queues to buffer spikes. Use strict write paths for money. The AWS Well-Architected Reliability Pillar gives a clean check-list of trade-offs. If you are on Microsoft, look at Azure paired regions design for built-in cross-region options.
| Pilot-light | 1–4 hours | 5–60 min | Low | $ | Cheap. Easy to explain to auditors. | Warm-up time is long. Promo and cache staleness. | Low-traffic brands. Non-peak events. New markets in trial. |
| Warm standby | 15–45 min | ≤ 5 min | Medium | $$ | Faster cutover. Near-live data in key stores. | Config drift. Backup links can cap write flow during spikes. | Mid-size books with season peaks. Regional spikes. |
| Active-passive | 5–15 min | ≤ 1 min | Medium–High | $$–$$$ | Single-writer DB avoids split brain. Clear failover switch. | DNS/health check tuning is touchy. Cache poisoning risks. | High-value casino. Tight RPO on wallets and jackpots. |
| Active-active | Seconds | ~0–30 sec | High | $$$ | Instant failover. Spreads peak load. Great for global users. | Double-spend risk. Complex writes and reconcile plans. | Top-tier brands. 24/7 live sports. Cross-border traffic. |
| Hybrid (domain-based) | Varies | Varies | High | $$–$$$ | Pay only where you must. Wallets hot, BI cold. | Many moving parts. Testing needs rigor. | Mature stacks with clear domain SLAs. |
Global traffic tools can save you or sink you. DNS-based GSLB is simple and fast to set up. Health checks tell it where to send users. But TTLs lie during a hot failover. Some ISPs pin answers. Use short TTL and stale-if-error on caches. Anycast with BGP is fast but needs network skill. Provider-native traffic managers add region checks and stickiness. See Cloudflare load balancing and health checks for a clear model.
For deep geo control, you can also look at Akamai Global Traffic Management. No matter the tool, plan for brownouts, not just blackouts. Fail back is a plan too. Make it a runbook step, with guard rails and a go/no-go gate.
Most pain sits here. A bet is a set of writes: take stake, lock odds, store slip, send to engine, settle, credit wins, update bonus, move tags for AML. Across regions, strong consistency is hard. Latency kills lock-based writes. If you go multi-writer, you risk double credit. If you go single-writer, you need fast, safe replicas and clear cutover.
One pattern that works well: single-writer per domain, logical replication to other regions, and idempotent writes on all money flows. This keeps RPO near zero and RTO in minutes. Read replicas in each region serve reads. A message outbox ties events to commits. On failover, a reconcile job sweeps for gaps. If you use Postgres, read the docs on PostgreSQL logical replication as a base.
Some stacks prefer MySQL. Group Replication gives you a base for failover, but test write conflicts with care. See MySQL Group Replication. In all cases: use idempotency keys on payments, dedupe on queues, and a clear ledger for wallet moves that you can replay and prove.
Event streams help absorb spikes and let you replay. Many use Kafka for odds, slips, and settlements. Cross-region brings lag and ordering issues. Exactly-once is a promise with footnotes. Use it with care. Split topics by region. Make consumers able to reprocess messages. Store offsets in a way you can move with a cutover plan.
For deep dives, this post on Multi-region Kafka design is a strong start. Build a test to replay one hour of peak traffic into the standby region. Check that all balances, slips, and AML flags match at the end.
Do not forget your vault. Replicate secrets, tokens, and keys across regions. Avoid split brain for KMS roots. Protect HSMs. Back up OIDC and SAML configs. Rotate on failover if a key scope changes. Keep a sealed copy of env files with legal hold rules.
If you run HashiCorp Vault, read up on Vault DR replication. Practice an unseal in the dark. Time it. Log it. Store the proof.
They care about player funds, data location, and audit trails. Show where data sits. Prove who touched what and when. Wallet ledgers must match. KYC and AML logs must be intact. Payment flows must keep to PCI scope. Keep evidence packs: drill logs, configs, access lists, and change records.
Review the PCI DSS overview to frame card data scope. For wider EU guidance, check ENISA good practices on resilience. Map which data sets must stay in-region. If the law is gray, ask counsel. Document the call.
We ran a game-day once. At minute 7, a read cache masked a dead write path. Our play bets “worked,” but the wallet did not move. We stopped, fixed the health checks, and changed the SLO to include write success. Run safe chaos: kill a region, break DNS, freeze the primary DB, add packet loss. See core ideas in Chaos engineering principles.
Write SLOs by domain: wallet p99 write, slip create, settle time, KYC pass. Tie error budgets to promo burn and payment fails. Rehearse cutover in work hours first. Use the SRE workbook on SLOs/error budgets to shape tests that have clear pass/fail gates.
Runbooks win nights. Keep a short list for who calls whom, who has the DNS key, and what to post where. Have pre-written posts for status pages, partners, and a first note to the regulator. See sample Incident response runbooks and adapt them to your org chart.
Active-active is not “double the cost.” You may right-size each region and use spillover at peak. Your big costs are egress, storage, cross-region writes, and warm capacity. Drill time is time well spent, but it is a line item too. Track people time in your model.
Use FinOps to make this clear to the board. Tag all DR parts. Show unit cost per 1,000 bets at peak and off-peak. Turn off what does not need to be warm. See the FinOps Framework for a common language with finance.
A calm, clear note beats silence. Use a public status page. Share a plain summary first: what broke, what is safe, what is next, and when. Do not hide times. Tell users if they must do anything. Keep updates on a schedule. After fix, post a short, human RCA.
Tell your partners fast. That means PSPs, KYC, content feeds, and key affiliates. Include review sites in your contact list so facts spread, not rumors. For example, we keep an email group for top partners and a live sheet. A trusted review portal that covers tables and streams, like Live Dealer Spiele online, should be on that list. They can post clear notes to players and cut ticket load for you.
Day 0–30:
Day 31–60:
Day 61–90:
How do we reconcile unsettled bets after a failover?
Keep a ledger of state moves. Mark every bet with an idempotency key. On cutover, stop writes for a short, known window. Replay from the outbox to the new writer. Run a reconcile job that checks wallet deltas, bet states, and promo burns. Flag any gap for manual review.
What is the minimum to pass a regulator readiness check?
Show a clear RTO/RPO per domain, proof of a drill in the last 6 months, audit trails for access and change, data location maps, PCI scope for payments, and a contact tree. Have one game-day log with times and results. Have a status page plan and a draft incident note.
How often should we run game-days?
At least quarterly. Before known peaks, run a short drill (30–60 min). After any big change in infra, run a targeted drill (DB, DNS, PSP fail, or cache loss). Rotate who leads. Keep the same pass/fail bars, so you can track trend over time.
We once failed over a live sportsbook in under four minutes. Players did not notice. But the promo counter was stale by 11 minutes, so a small group got double spins. Fix: we moved promo writes to the same ledger pattern as wallets, added an outbox, and wrote a reconcile job that can claw back only the extra promo amount with a soft rule set. That change paid for itself on the next event night.
Want a second set of eyes on your DR map? Send your domain list and RTO/RPO targets. I will share a one-page pattern pick, a drill script, and a reconcile checklist you can run this week.
Alex M., iGaming platform engineer, 10+ years in EU and LatAm markets. Led 30+ game-days, PCI scope owner, ex-SRE lead for a tier-1 sportsbook. Last drill cut wallet RPO from 5 minutes to 30 seconds with logical replication and an outbox.