Fazemos isso simplesmente usando o Servidor Virtual Linux , que faz parte do kernel padrão do Linux para alguns anos agora.
Ele permite o balanceamento de carga baseado em peso e é muito fácil de configurar, estamos fazendo algo assim:
ipvsadm -A -t 192.168.0.3:25 -s wrr
ipvsadm -a -t 192.168.0.3:25 -r 192.168.0.8:25 -g -w 100
ipvsadm -a -t 192.168.0.3:25 -r 192.168.0.9:25 -g -w 100
(onde 192.168.0.3 é seu "IP de serviço" ou "IP virtual" e 192.168.0.8 e 192.168.0.9 são seus "servidores reais" )
O mais importante é saber - o modo de operação. Esta configuração usa o "modo de gateway", no qual a origem e o destino dos pacotes não são alterados. Mas isso tem algumas implicações. O virtual ip tem que ser configurado em todos os "servidores reais". Mas isso pode levar a condições de corrida ARP que você deve evitar por design:
- Seus "servidores reais" estão atrás do balanceador de carga em uma LAN separada
- OU você configura seus servidores reais para não responder ao ARP para o endereço virtual
- OU você está roteando o IP virtual diretamente para seu balanceador de carga, por isso não é ARPed para
Talvez -m - o modo de mascaramento seja um pouco mais fácil de configurar.
E - outra dica aqui: você pode querer usar o keepalived que configura o ipvsadm, monitora seu servidor de e-mail para reachabilty e talvez forneça redundância para o próprio balanceador de carga usando VRRP.
Estamos usando o ipvs para lidar com o balanceamento de carga DNS de 15k do CPS.
(*) pelo menos no debian é chamado assim, mas procurar por ipvs deve ser fácil