El sistema está compuesto por:
- Un balanceador Nginx configurado para enrutar operaciones de lectura y escritura a diferentes puertos y servidores MySQL.
- Un clúster de MySQL con un nodo maestro (para escritura) y varios nodos esclavos (para lectura).
- Un cliente que ejecuta pruebas de rendimiento y monitorea el sistema.
- Todo el entorno se despliega automáticamente usando Vagrant y VirtualBox, facilitando la creación y destrucción de las máquinas virtuales necesarias para las pruebas.
Este proyecto implementa un balanceador de carga para bases de datos MySQL usando Nginx. El objetivo es separar las operaciones de lectura y escritura: las escrituras se dirigen al nodo maestro y las lecturas se distribuyen entre los nodos esclavos. Todo el entorno se despliega de forma automática con Vagrant y VirtualBox, permitiendo pruebas de rendimiento y análisis de arquitecturas distribuidas de manera sencilla y reproducible.
git clone https://github.com/edwingd18/database_balancer
cd database_balancer
- Vagrant instalado
- VirtualBox instalado
Ejecuta en la raíz del proyecto:
vagrant up⏱️ Por favor, espera a que todas las máquinas virtuales se inicien correctamente. Esto puede tomar varios minutos.
- Accede a la máquina del balanceador Nginx:
vagrant ssh nginx_balancer- Visualiza los logs en tiempo real:
tail -f /var/log/nginx/mysql_access.log💡 Mantén esta terminal abierta para observar las solicitudes mientras ejecutas las pruebas
Abre una nueva terminal y accede a la máquina cliente:
vagrant ssh clientEjecuta el siguiente comando para realizar pruebas de escritura:
sysbench /usr/share/sysbench/oltp_write_only.lua \
--mysql-host=192.168.70.12 \
--mysql-port=3308 \
--mysql-user=root \
--mysql-password=admin \
--mysql-db=sbtest \
--tables=4 \
--table-size=10000 \
--threads=8 \
--time=30 \
--report-interval=5 \
runEjecuta el siguiente comando para realizar pruebas de lectura:
sysbench /usr/share/sysbench/oltp_read_only.lua \
--mysql-host=192.168.70.12 \
--mysql-port=3307 \
--mysql-user=root \
--mysql-password=admin \
--mysql-db=sbtest \
--tables=4 \
--table-size=10000 \
--threads=8 \
--time=30 \
--report-interval=5 \
runObserva los siguientes aspectos en los resultados de las pruebas:
- Transacciones por segundo (TPS)
- Latencia (mínima, promedio, máxima)
- Tasas de error (si las hubiera)
En los logs del balanceador, podrás observar:
- Distribución de consultas entre servidores
- Tiempos de respuesta
- Posibles errores de conexión
Cuando hayas terminado las pruebas, puedes apagar las máquinas virtuales:
vagrant haltO eliminarlas completamente:
vagrant destroy- Puerto 3307: Configurado para operaciones de lectura (balanceado entre esclavos)
- Puerto 3308: Configurado para operaciones de escritura (dirigido al maestro)
Desarrollado para pruebas de rendimiento de bases de datos MySQL❤️
