Autor: Leonardo
Objetivo del proyecto: Implementar un sistema de Alta Disponibilidad (HA) para MySQL utilizando Docker Compose, con:
- Failover automΓ‘tico
- ReplicaciΓ³n asΓncrona
- ResincronizaciΓ³n cuando un nodo vuelve
- Watcher en Python
- Servicio de resync dedicado
- API con FastAPI + dashboard web
El sistema estΓ‘ formado por contenedores Docker definidos en docker-compose.yml:
- mysql-primary β Nodo principal (PRIMARY)
- mysql-replica β Nodo secundario (REPLICA) sincronizado por binlogs
- db-watcher β Servicio Python que monitoriza y dispara el failover
- db-resync β Servicio Python que resincroniza nodos desactualizados
- fastapi-dashboard β API FastAPI + dashboard web (HTML estΓ‘tico)
βββββββββββββββββββββββββββββββ
β fastapi-dashboard β
β - FastAPI (API REST) β
β - Dashboard HTML β
βββββββββββββββ¬ββββββββββββββββ
β
Usuario / Navegador
β
βββββββββββββββββββ΄ββββββββββββββββββ
β β
ββββββββββββββββββββββββββ ββββββββββββββββββββββββββ
β mysql-primary β β mysql-replica β
β Role: PRIMARY βββββββββββΊβ Role: REPLICA β
β Binlogs habilitados β β IO/SQL threads activos β
βββββββββββββββ¬βββββββββββ βββββββββββββββ¬βββββββββββ
β β
ββββββββββββββββ¬ββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββ
β db-watcher β
β - Heartbeat β
β - Failover automΓ‘tico β
β - Registro de eventos β
ββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββ
β db-resync β
β - Dump/restore β
β - Reconfig. replicaciΓ³n β
ββββββββββββββββββββββββββββββ
db-watcherdeja de recibir respuesta demysql-primary.- Marca el primary como DOWN.
- Promueve
mysql-replicaβ PRIMARY lΓ³gico. - Detiene replicaciΓ³n (IO/SQL threads).
- Registra el evento en los logs (accesible desde la API/dashboard).
- El nodo puede regresar desactualizado respecto al nuevo primary.
db-watcheractiva el procesodb-resync.- Se toma un dump del nodo saludable.
- Se restaura en el nodo que regresΓ³.
- Se reconfigura la replicaciΓ³n (usuario, host, log_file, log_pos).
- Se reinician los IO/SQL threads.
- Los estados son actualizados y registrados.
AsegΓΊrate de tener Docker y Docker Compose instalados.
git clone https://github.com/AFLeonardo/FailOver-BD.git
cd FailOver-BD
# Levantar todos los servicios
docker-compose up -d --build
# Ver contenedores
docker psDebes ver:
mysql-primary
mysql-replica
db-watcher
db-resync
fastapi-dashboard
docker stop mysql-primaryEsto simula una caΓda real.
docker logs -f db-watcher
docker logs -f db-resync
docker logs -f fastapi-dashboarddocker start mysql-primarydocker logs -f db-resyncDebe verse:
π¦ Iniciando backup...
β
Backup y restore completados.
π Restaurando topologΓa...
http://localhost:8000/static/dashboard.html
http://localhost:8000/docs
/
βββ db-resync/
β βββ Dockerfile
β βββ resync.py
β
βββ db-watcher/
β βββ Dockerfile
β βββ watcher.py
β
βββ fastapi-dashboard/
β βββ static/
β β βββ dashboard.html
β βββ Dockerfile
β βββ main.py
β βββ requirements.txt
β
βββ DB.sql
βββ docker-compose.yml
βββ LICENSE
βββ README.md
- ReplicaciΓ³n asΓncrona.
server-iddistinto para cada nodo.- Binlogs habilitados en el primary.
- Implementado en Python.
- Registra todos los eventos para monitoreo.
- Ejecuta dump + restore automΓ‘tico.
- Reconfigura la replicaciΓ³n.
- Vuelve a enganchar el nodo desactualizado.
- Estado del cluster
- Logs del watcher
- Acciones manuales (failover, resync)
- Estado en tiempo real
- Γltimos eventos
- Indicadores visuales
Este proyecto implementa un sistema totalmente funcional y automatizado de alta disponibilidad MySQL:
- Failover automΓ‘tico
- ResincronizaciΓ³n automΓ‘tica
- RecuperaciΓ³n completa de la topologΓa
- Capacidad de repetir el ciclo indefinidamente
- FastAPI para mostrar estado del cluster en el Dashboard
- Todo con Docker + Python