giovedì 3 settembre 2009

Bilanciare il traffico http con Keepalived e Debian Lenny

Keepalived è un framework che serve ad implementare cluster ad alta affidabilità con Linux sfruttando il protocollo VRRP (Virtual Router Redundancy Protocol) che permette a più macchine di condividere un VIP (Virtual IP) per garantire l'altà affidabilità dei servizi.
In questo caso vogliamo usare un bilanciatore keepalived, protetto a monte da un firewall, per bilanciare
tra due nostri web server il traffico http proveniente dalla rete pubblica in modo del tutto trasparente per i visitatori.
Installiamo sulla nostra Debian Lenny il software incaricato del bilanciamento, Keepalived, con il seguente comando:

#apt-get install keepalived

Stabilito che il nostro bilanciatore avrà l'IP pubblico 73.XX.XX.XX configurato sull'interfaccia eth0 e l'ip privato 192.168.10.33 sull'interfaccia eth1.
e che i due webserver che formeranno il pool hanno gli ip privati 192.168.10.38 e 192.168.10.39 il nostro file di configurazione /etc/keepalived/keepalived.conf sarà questo (i punti esclamativi introducono una riga di commento):


! da verificare il funzionamento definendo come segue i virtual ip address
!
! le interfacce di rete che uso devo averle già configurate prima:
! su eth1 il gateway per le macchine da bilanciare
! su eth0:x gli ip virtuali per il virtual server
!
! il fowarding deve essere abilitato
!
! echo 1 > /proc/sys/net/ipv4/ip_forward
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
global_defs {

# Invia una mail a ciascuno dei seguenti indirizzi quando una destinazione va in stato down
notification_email {
miouser@miodominio.com
secondomiouser@miodominio.it
}
# L'indirizzo da usare nel campo From: header
notification_email_from usermiobilanciatore@miodominio.com

# Il server SMTP con cui inviare le mail
smtp_server mail.miodominio.com

# Quanto tempo attendere per la risposta del mail server
smtp_connect_timeout 30

# Un nome descrittivo del server keepalived
router_id Bilanciatore1
}

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
vrrp_sync_group VG1 {
group {
VI_1
VI_GATEWAY
}# addresses when a failure occurs
}
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
vrrp_instance VI_1 {
state MASTER
interface eth0

lvs_sync_daemon_inteface eth0

virtual_router_id 51

priority 150

advert_int 1

virtual_ipaddress {
73.XX.XX.XX/27 brd 73.XX.XX.127
}
}
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!# addresses when a failure occurs
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
vrrp_instance VI_GATEWAY {
state MASTER
interface eth1
lvs_sync_daemon_inteface eth1
virtual_router_id 52
priority 150
advert_int 1
virtual_ipaddress {
192.168.10.33/24 brd 192.168.10.255
}
}
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
virtual_server 73.XX.XX.XX 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
protocol TCP

real_server 192.168.10.38 80 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 80
}
}

real_server 192.168.10.39 80 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 80
}
}
}
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Startiamo keepalived:

#/etc/init.d/keepalived start


Se il firewall a monte del bilanciatore è configurato correttamente da questo momento tutto il traffico web diretto alla destinazione 73.XX.XX.XX sarà bilanciato in round robin tra i nostri due server privati.
Se uno dei due server privati non dovesse più rispondere alle chiamate sulla porta 80 keepalived girerà tutto il traffico http verso l'altro nodo privato.
Per eventuali approfondimenti consiglio di fare riferimento al sito ufficiale di keepalived e a questa documentazione:

http://prefetch.net/articles/linuxkeepalivedvrrp.html

http://bollettino.cilea.it/include/getdoc.php?id=259

http://bollettino.cilea.it/include/getdoc.php?id=340

Nessun commento:

Posta un commento