Cada dia las aplicaciones se convierten en mas concurrentes y en ocasiones nuestros servidores no dan abasto para tanta carga y da la necesidad de poder distribuir el peso de las aplicaci贸n en mas de un servidor (Divide y conquista).
La cosa es que este concepto de balanceo de cargas puede ser implementado desde servidores web hasta servidores de base de datos, ejemplo puedo balancear la carga de un servidor mysql o MongoDB (Eso sera ya otro tutorial 馃檪 ).
Balanceo de carga con Nginx
Balancear la carga con nginx es tan facil como configurar un virtual host (vhost)
Basta con esto para tener balanceado nuestro servidor nginx
http { upstream test_app { server srv1.example.com; server srv2.example.com; server srv3.example.com; } server { listen 80; location / { proxy_pass http://test_app; } } }
En la secci贸n de upstream es donde colocamos los diferentes servidores donde queremos apuntar, mi conf de nginx quedaria de esta forma:
http { upstream test_app { server 127.0.0.1:8080; server 127.0.0.1:9090; } server { listen 80; server_name balancer.dev; location / { proxy_pass http://test_app; } } }
Para visualizar el balance usaremos esta mini aplicaci贸n realizada en nodejs, la cual solo imprime un hola mundo con el puerto en el cual esta corriendo.
server.js
var http = require('http'); var args = process.argv; /* Este es el numero que estaremos pasando como server port */ var port = parseInt( args[2] ) console.log(args); var server = http.createServer(function(req,res){ res.end('hola server ' + port); }); server.listen(port); console.log(port) console.log("Servidor corriendo en el puerto " + port)
Digamos que ahora ejecutamos nuestro servidores de aplicaci贸n:
node server.js 8080 &
node server.js 9090 &
Una vez ejecutado todo esto y nuestro servidor web nginx corriendo, si vamos a la url
Si quieres que un servidor tengas mas request el el otro, es necesario usar este atributo weight en nuestro conf de nginx
server 127.0.0.1:8080 weight=3;
Referencia
Nginx balanceo de carga
Nginx health-check