https://github.com/afleonardo/failover-bd
FailOver automatico con python utilizando contenedores en Docker.
https://github.com/afleonardo/failover-bd
docker docker-compose failover-automation mysql python
Last synced: 4 months ago
JSON representation
FailOver automatico con python utilizando contenedores en Docker.
- Host: GitHub
- URL: https://github.com/afleonardo/failover-bd
- Owner: AFLeonardo
- License: mit
- Created: 2025-11-16T20:52:06.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2025-11-25T18:50:28.000Z (7 months ago)
- Last Synced: 2025-11-29T00:35:30.703Z (7 months ago)
- Topics: docker, docker-compose, failover-automation, mysql, python
- Language: HTML
- Homepage:
- Size: 33.2 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# π Sistema de Failover + Resync AutomΓ‘tico para MySQL con Docker
**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
## π Tech Stack
| Docker | MySQL | Python | FastAPI | Bash | TailwindCSS | JavaScript | HTML5 |
|--------|--------|---------|---------|--------|--------------|------------|--------|
|
|
|
|
|
|
|
|
|
## π Arquitectura General
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)
## π Diagrama general
```
βββββββββββββββββββββββββββββββ
β 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 β
ββββββββββββββββββββββββββββββ
```
## βοΈ Flujo de Failover y Recovery
### π₯ **Cuando el primary cae**
1. `db-watcher` deja de recibir respuesta de `mysql-primary`.
2. Marca el primary como **DOWN**.
3. Promueve `mysql-replica` β **PRIMARY** lΓ³gico.
4. Detiene replicaciΓ³n (IO/SQL threads).
5. Registra el evento en los logs (accesible desde la API/dashboard).
### π© **Cuando el nodo caΓdo vuelve**
1. El nodo puede regresar **desactualizado** respecto al nuevo primary.
2. `db-watcher` activa el proceso `db-resync`.
3. Se toma un **dump** del nodo saludable.
4. Se restaura en el nodo que regresΓ³.
5. Se reconfigura la replicaciΓ³n (usuario, host, log_file, log_pos).
6. Se reinician los IO/SQL threads.
7. Los estados son actualizados y registrados.
## π Levantar el proyecto
AsegΓΊrate de tener Docker y Docker Compose instalados.
```bash
git clone https://github.com/AFLeonardo/FailOver-BD.git
cd FailOver-BD
# Levantar todos los servicios
docker-compose up -d --build
# Ver contenedores
docker ps
```
Debes ver:
```
mysql-primary
mysql-replica
db-watcher
db-resync
fastapi-dashboard
```
# Comandos importantes
### π Apagar el primary
```bash
docker stop mysql-primary
```
Esto simula una caΓda real.
#### `db-watcher` debe promover la rΓ©plica automΓ‘ticamente.
### Comandos para Logs:
```bash
docker logs -f db-watcher
docker logs -f db-resync
docker logs -f fastapi-dashboard
```
## π Encender nuevamente el primary
```bash
docker start mysql-primary
```
#### Ahora `db-resync` entra en acciΓ³n:
```bash
docker logs -f db-resync
```
Debe verse:
```
π¦ Iniciando backup...
β
Backup y restore completados.
π Restaurando topologΓa...
```
## π Acceso al Dashboard y la API
### Dashboard web (HTML estΓ‘tico)
```
http://localhost:8000/static/dashboard.html
```
### FastAPI docs (Swagger UI)
```
http://localhost:8000/docs
```
---
## π§± Estructura del repositorio
```
/
βββ 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
```
## π Notas TΓ©cnicas
### π ReplicaciΓ³n MySQL
- ReplicaciΓ³n asΓncrona.
- `server-id` distinto para cada nodo.
- Binlogs habilitados en el primary.
### π Watcher (`db-watcher`)
- Implementado en Python.
- Registra todos los eventos para monitoreo.
### π Resync (`db-resync`)
- Ejecuta dump + restore automΓ‘tico.
- Reconfigura la replicaciΓ³n.
- Vuelve a enganchar el nodo desactualizado.
### π FastAPI + Dashboard (`fastapi-dashboard`)
#### main.py expone:
- Estado del cluster
- Logs del watcher
- Acciones manuales (failover, resync)
#### dashboard.html muestra:
- Estado en tiempo real
- Γltimos eventos
- Indicadores visuales
---
# π ConclusiΓ³n
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