mariadb-demo/README.md
administrator c4c7dd3f05 chore: initial release — MariaDB HA Demo
- 6-node MariaDB cluster with GTID replication
- MaxScale 24.02 proxy with automatic failover
- Flask dashboard with SSE transaction monitor
- Per-server toggle controls + mode selector
- Systemd services for auto-start on boot
- One-command deploy.sh
2026-06-24 11:16:16 +00:00

4.1 KiB
Raw Blame History

MariaDB HA Demo

Real-time high availability demonstration with a 6-node MariaDB cluster, MaxScale proxy, and live dashboard.


Quick Start

git clone https://git.sechpoint.app/customer-engineering/mariadb-demo.git
cd mariadb-demo
bash deploy.sh

Open http://{host}:5000 in your browser.


Architecture

┌─ Cluster 1 ─────────────┐    ┌─ Cluster 2 ─────────────┐
│ mariadb1  PRIMARY       │    │ mariadb4  SECONDARY      │
│ mariadb2  SECONDARY     │    │ mariadb5  SECONDARY      │
│ mariadb3  SECONDARY     │    │ mariadb6  SECONDARY      │
└─────────────────────────┘    └──────────────────────────┘
              │                           │
              └─────── MaxScale ──────────┘
                     (port 4000)
                          │
                   ┌──────┴──────┐
                   │  Dashboard  │
                   │  (port 5000)│
                   └─────────────┘
  • 6 MariaDB nodes: 2 clusters with GTID-based async replication
  • MaxScale 24.02: read-write splitting, automatic failover
  • Dashboard: real-time SSE transaction monitor with per-server toggle controls

Dashboard Controls

Action How
Start transactions Click Initialize DB then ▶ Start Demo
Kill a server Click the green/red circle on any server card
Kill entire cluster Toggle all 3 servers in a cluster OFF
Recover Click the circle again (red → green)
Switch mode Use dropdown: Primary + DR or 2 Independent Clusters

What Visitors See

  • Terminal feed: live INSERT→SELECT→DELETE transactions
  • Status circle: green = healthy, red = transaction lost
  • Server cards: PRIMARY (green), SECONDARY (blue), DOWN (red)
  • Availability %: drops during failover, recovers automatically

Demo Scenarios

1. Standard Failover

Kill the PRIMARY server — MaxScale promotes a SECONDARY. Availability drops briefly, then recovers.

2. Cross-Cluster Failover (DR Mode)

Switch to Primary + DR mode. Kill all 3 servers in Cluster 1 — Cluster 2 takes over as PRIMARY.

3. Independent Clusters

Switch to 2 Independent Clusters. Each cluster has its own PRIMARY — kill one without affecting the other.

4. MaxScale GUI

Open http://{host}:5000/maxscale — full MaxScale admin interface. Login: admin / mariadb


Systemd Services

sudo systemctl start mariadb-cluster    # Start cluster
sudo systemctl stop mariadb-cluster     # Stop everything
sudo systemctl start mariadb-monitor    # Start dashboard
bash scripts/cluster.sh status          # Health check

Services auto-start on boot when installed via deploy.sh.


Requirements

  • Ubuntu 24.04+ / Debian 12+
  • 8 GB RAM, 4 CPU cores
  • Docker installed (deploy.sh handles this automatically)
  • Ports: 5000 (dashboard), 4000 (MaxScale), 8989 (MaxScale API), 33073312 (MariaDB)

Manual Deployment (without deploy.sh)

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# Start cluster
bash scripts/cluster.sh start

# Start dashboard
python3 app.py

Files

File Purpose
engine.py Transaction engine (INSERT→SELECT→DELETE every 1s)
app.py Flask app: routes, SSE endpoint, MaxScale proxy
scripts/cluster.sh Docker cluster control (start/stop/status)
scripts/mariadb-cluster.service Systemd unit for cluster
scripts/mariadb-monitor.service Systemd unit for dashboard
cluster-config/ MariaDB config files (server1-6.cnf)
templates/dashboard.html Single-page dashboard
static/dashboard.js Dashboard logic + SSE consumer
static/dashboard.css Dark theme styles
deploy.sh One-command deployment
requirements.txt Python dependencies