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
Visualizzazione post con etichetta round robin. Mostra tutti i post
Visualizzazione post con etichetta round robin. Mostra tutti i post
giovedì 3 settembre 2009
Nic Bonding su Debian Lenny
Come spiega wikipedia il bonding è "...un modulo kernel per linux che permette l'aggregazione di più schede di rete al fine crearne N virtuali (tipicamente chiamate Bond dove N è un numero). Questa nuova interfaccia chiamata channel bonding permette diverse configurazioni tra cui l'aggregazione active-active per aumentare l'ampiezza di banda garantendo la ridondanza oppure l'aggregazione active-standby per la sola ridondanza del servizio.L'utilizzo di questo tipo di architettura permette il collegamento a due tratte diverse di switch distinti per aumentare l'affidabilità del collegamento."
Il modulo kernel di Linux supporta un buon numero di tipi di bonding.
mode= indica la modalità di funzionamento dell'interfaccia virtuale che può essere:
a) 0 = round-robin per il bilanciamento del carico e per il fault tolerance. I pacchetti sono trasmessi alternativamente ed in maniera sequenziale su tutte le interfacce di tipo slave.In altre parole supponendo di avere 3 Slave: eth0, eth1, eth2 che appartengono al Master bond0, il pacchetto numero 1 passa dalla eth0, il 2 dalla eth1, il 3 dalla eth2, il 4 di nuovo dalla eth0 e cosi' via.
b) 1 = active-backup per il fault tolerance. E' attiva solo una slave per volta. La successiva scheda appartenente alla bond0 diventa attiva solo nel caso in cui la slave primaria, attualmenta attiva, perdesse il collegamento. Il MAC address visibile all'esterno e' solo il MAC assegnato alla bond0 (che corrisponde al MAC di una scheda fisica)
c) 2 = active-active XOR (source MAC address XOR'd with destination MAC address) Usando questo metodo l'interfaccia associa l'indirizzo MAC della richiesta in entrata con l'indirizzo MAC per uno dei NIC slave. Una volta fatto ciò tutto il dialogo avviene sullo stesso NIC slave
d) 3 = active-active (Broadcast policy) I pacchetti sono trasmessi su tutte le interfacce di tipo slave aggregate.
e) 4 = IIEEE 802.3ad dynamic link aggregation. Crea gruppi d'aggregazione che condividono la stessa velocità e impostazioni duplex. Trasmette e riceve su tutte le interfacce slave nell'aggregator attivo. Necessita uno switch compatibile con 802.3ad e di un ethtool in grado di stabilire la velocità e le impostazioni per ogni singola scheda salve.
f) 5 = Transmit Load Balancing (TLB). Il traffico in uscita viene distribuito a seconda del carico su ogni interfaccia slave. Il traffico in ingresso viene ricevuto dall'interfaccia slave corrente. Se lo slave ricevente fallisce, un altro al suo posto assume il controllo dell'indirizzo MAC.In questa modalità si ha quindi il load-balancing adattativo (in funzione del traffico) solo in trasmissione.
g) 6 = Adaptive Load Balancing. Bilanciamento del traffico sia in ingresso che in uscita. In ricezione il bilanciamento del carico è garantito da una ARP negotiation. In trasmissione il driver bonding intercetta le risposte ARP inviate dal sistema locale in uscita e sovrascrive l'indirizzo hardware sorgente con l'indirizzo univoco hardware di uno dei membri del bonding in modo tale che diversi peers utilizzino gli indirizzi hardware differenti per il server.In questa modalità si ha quindi il load-balancing adattativo (in funzione del traffico) in entrambe le direzioni.
Configurare l'ethernet bonding su Debian Lenny
In questo esempio creeremo il bonding di due interfacce di rete, eth0 ed eth1.
Installiamo il package ifenslave-2.6 con il seguente comando:
#apt-get install ifenslave-2.6
Assicurariamoci che il modulo kernel sia caricato automaticamente e, quindi, editiamo il file /etc/network/interfaces rendendolo simile a questo:
iface bond0 inet static
address TUOIP
netmask NETMASKTUARETE
network IPRETE
gateway IPGATEWAY
up /sbin/ifenslave bond0 eth0 eth1
down /sbin/ifenslave -d bond0 eth0 eth1
Nello stesso file commenta o elimina le linee che fanno riferimento alle tue reali NICs.
Aggiungi le seguenti linee al tuo /etc/modprobe.d/arch/i386 (ovviamente ricordati di configurare la modalità del bonding di cui necessiti):
alias bond0 bonding
options bonding mode=0 miimon=100 downdelay=200 updelay=200
Riavvia il tuo networking:
#/etc/init.d/networking restart
Il modulo kernel di Linux supporta un buon numero di tipi di bonding.
mode= indica la modalità di funzionamento dell'interfaccia virtuale che può essere:
a) 0 = round-robin per il bilanciamento del carico e per il fault tolerance. I pacchetti sono trasmessi alternativamente ed in maniera sequenziale su tutte le interfacce di tipo slave.In altre parole supponendo di avere 3 Slave: eth0, eth1, eth2 che appartengono al Master bond0, il pacchetto numero 1 passa dalla eth0, il 2 dalla eth1, il 3 dalla eth2, il 4 di nuovo dalla eth0 e cosi' via.
b) 1 = active-backup per il fault tolerance. E' attiva solo una slave per volta. La successiva scheda appartenente alla bond0 diventa attiva solo nel caso in cui la slave primaria, attualmenta attiva, perdesse il collegamento. Il MAC address visibile all'esterno e' solo il MAC assegnato alla bond0 (che corrisponde al MAC di una scheda fisica)
c) 2 = active-active XOR (source MAC address XOR'd with destination MAC address) Usando questo metodo l'interfaccia associa l'indirizzo MAC della richiesta in entrata con l'indirizzo MAC per uno dei NIC slave. Una volta fatto ciò tutto il dialogo avviene sullo stesso NIC slave
d) 3 = active-active (Broadcast policy) I pacchetti sono trasmessi su tutte le interfacce di tipo slave aggregate.
e) 4 = IIEEE 802.3ad dynamic link aggregation. Crea gruppi d'aggregazione che condividono la stessa velocità e impostazioni duplex. Trasmette e riceve su tutte le interfacce slave nell'aggregator attivo. Necessita uno switch compatibile con 802.3ad e di un ethtool in grado di stabilire la velocità e le impostazioni per ogni singola scheda salve.
f) 5 = Transmit Load Balancing (TLB). Il traffico in uscita viene distribuito a seconda del carico su ogni interfaccia slave. Il traffico in ingresso viene ricevuto dall'interfaccia slave corrente. Se lo slave ricevente fallisce, un altro al suo posto assume il controllo dell'indirizzo MAC.In questa modalità si ha quindi il load-balancing adattativo (in funzione del traffico) solo in trasmissione.
g) 6 = Adaptive Load Balancing. Bilanciamento del traffico sia in ingresso che in uscita. In ricezione il bilanciamento del carico è garantito da una ARP negotiation. In trasmissione il driver bonding intercetta le risposte ARP inviate dal sistema locale in uscita e sovrascrive l'indirizzo hardware sorgente con l'indirizzo univoco hardware di uno dei membri del bonding in modo tale che diversi peers utilizzino gli indirizzi hardware differenti per il server.In questa modalità si ha quindi il load-balancing adattativo (in funzione del traffico) in entrambe le direzioni.
Configurare l'ethernet bonding su Debian Lenny
In questo esempio creeremo il bonding di due interfacce di rete, eth0 ed eth1.
Installiamo il package ifenslave-2.6 con il seguente comando:
#apt-get install ifenslave-2.6
Assicurariamoci che il modulo kernel sia caricato automaticamente e, quindi, editiamo il file /etc/network/interfaces rendendolo simile a questo:
iface bond0 inet static
address TUOIP
netmask NETMASKTUARETE
network IPRETE
gateway IPGATEWAY
up /sbin/ifenslave bond0 eth0 eth1
down /sbin/ifenslave -d bond0 eth0 eth1
Nello stesso file commenta o elimina le linee che fanno riferimento alle tue reali NICs.
Aggiungi le seguenti linee al tuo /etc/modprobe.d/arch/i386 (ovviamente ricordati di configurare la modalità del bonding di cui necessiti):
alias bond0 bonding
options bonding mode=0 miimon=100 downdelay=200 updelay=200
Riavvia il tuo networking:
#/etc/init.d/networking restart
Etichette:
ARP,
bonding,
debian,
fault tolerance,
lenny,
nic,
round robin,
TLB
Iscriviti a:
Post (Atom)