Loadbalancers
doel
De loadbalancer zorgt er voor dat bij voorbeeld een webdienst redundant uitgevoerd kan worden. De loadbalancer zelf is ook redundant uitgevoerd.
opzet
We hebben 2 loadbalancers, ieder draait op een andere ESXi server voor redundantie. Als de ene loadbalancer faalt neemt de andere het over. Daarnaast zorgt de actieve loadbalancer dat verkeer over de webservers wordt verspreid. Als er webserver uitvalt wordt deze uit de pool gehaald waar door de webdienst gewoon bereikbaar blijft, zij het op maar één server.
normale situatie
Dit geeft weer hoe in normale situatie het verkeer loopt.
webserver faalt
Dit geeft weer hoe het verkeer loopt wanneer webserver faalt
loadbalancer faalt
Dit geeft weer hoe het verkeer loopt wanneer loadbalencer faalt
ip plan
212.72.227.80 t/m 212.72.227.90 vip01 t/m vip11 (virtuele IP adressen voor diensten die gebalanced worden)
212.72.227.91 lb1-bip.hobby.nl (IP adres voor loadbalancer zelf)
212.72.227.92 lb2-bip.hobby.nl (IP adres voor loadbalancer zelf)
212.72.227.93 lb1.hobby.nl (IP adres voor het OS van de loadbalancer)
212.72.227.94 lb2.hobby.nl (IP adres voor het OS van de loadbalancer)
Voor alle genoemde IPv4 addressen, is er ook een IPv6 adres in de stijl die we bij Hobbynet hanteren: 212.72.227.80 wordt 2a02:968:1:7:212:72:227:80.
configuratie
termen
Hier onder een overzicht van termen die in de configuratie worden gebruikt en mogelijk verwarrend zijn.
- server (Dit is kant waar, via virtuele IP adressen, de webserver draait en waar de client mee communiceert.)
- target (Dit zijn bijvoorbeeld de webservers die in één balanced pool zitten)
- vrrp (Dit is het protocol dat zorgt voor de master slave setup, ook wel hartbeat protocol genoemd)
- network (Hier staat gedefinieerd met welk IP adres (en subnet) de loadbalancer in een bepaald subnet hangt. Let op: de loadbalancer heeft zijn eigen IP adressen die los staan van het OS)
config files
De configuratie bestanden mogen nooit met de hand ge-edit worden. Dit dient altijd te gebeuren door middel van de loadbalancer command prompt. Deze kan je benaderen door met ssh in te loggen op een loadbalancer en als root het commando te geven bng control
Elke configuratiewijziging moet op beide loadbalancers doorgevoerd worden. Dit wordt helaas niet vanzelf gerepliceerd.
Ook moet je elke wijziging, net als bij Cisco, opslaan door het commando save all te gebruiken.
nieuwe server aanmaken/editen/bekijken
aanmaken
In dit voorbeeld gaan we de server configureren voor een webserver. Dit doen we als volgt via de loadbalancer command prompt:
LB1# server 2 name vip2 LB1# server 2 ipaddr 212.72.227.81 LB1# server 2 ipaddr6 2a02:968:1:7:212:72:227:81 LB1# server 2 port 80 LB1# server 2 protocol tcp LB1# server 2 sessionid src+port LB1# server 2 method session LB1# server 2 targets 2,3
Hierna willen we deze configuratie doorvoeren en activeren. Dit doen we door het commando:
commit server 2
bekijken
Nu willen we kijken of de configuratie goed is. dit kan je door het sh server commando te geven.
LB1#show server (of sh server 2 als je alleen server 2 wil zien) no ipaddr ipaddr6 port prt net net6 sessions S targets backups -- ------------- -------------------------- ---- --- --- ---- -------- - ------- ------- 1 212.72.227.80 2a02:968:1:7:212:72:227:80 80 tcp 1 0 0 e 1,2 2 212.72.227.81 2a02:968:1:7:212:72:227:81 80 tcp 1 0 0 e 2,[3] LB1# sh server 2 no ipaddr ipaddr6 port prt net net6 sessions S targets backups -- ------------- -------------------------- ---- --- --- ---- -------- - ------- ------- 2 212.72.227.81 2a02:968:1:7:212:72:227:81 80 tcp 1 0 0 e 2,[3]
editen
In het vorige voorbeeld hebben we 2 foutjes gemaakt die willen we herstellen. Voordat we dat doen moet we eerst de server disablen en de-registeren: dat doe je als volgt:
LB1# dis server 2 LB1# unreg server 2
Wat we willen aanpassen is de naam van de server. Die is nu vip2 die moet zijn vip02. Ga als volgt te werk:
LB1# server 2 name vip02
Daarna willen we de target nog aanpassen naar 3 en 4 in plaats van 2 en 3:
LB1# server 2 target 3,4
Ook hier na moeten we weer een commit doen echter krijgen we nu wel een foutmelding:
LB1# commit server 2 ERROR: WARNING: server 2 references unregistered target 3 ERROR: WARNING: server 2 references unregistered target 4
dit komt om dat target 3 en 4 nog niet bestaan.
nieuwe target aanmaken/editen/bekijken
aanmaken
configuratie op de loadbalancer
Dit gaat vrijwel identiek aan het configureren van de server:
target 2 name www-test-lb2 target 2 ipaddr 212.72.227.69 target 2 ipaddr6 2a02:968:1:7:212:72:227:69 target 2 port 80 target 2 protocol tcp target 2 ping 3,10 target 2 ping6 3,10 target 2 agent6 10000,3,10 target 2 sessionid dst+port target 2 dsr enable
Hierna moet ook weer een commit gedaan worden:
commit target 2
configuratie op de target
Op de target in kwestie moeten een aantal wijzigen worden doorgevoerd om alles goed te laten werken
sysctl.conf
de volgende regels moet aan sysctl.conf worden toegevoegd:
net.ipv4.conf.all.arp_ignore=1 net.ipv4.conf.all.arp_announce=2
Deze hierna activeren door middel van het commando sysctl -p
loopback interface
Om te zorgen dat target naar het IP adres (vip) van de loadbalancer luistert, moet er een loopback interface worden aan gemaakt met het vip van de loadbalancer:
iface lo inet6 static address 2a02:968:1:7:212:72:227:80 netmask 128 auto lo:0 iface lo:0 inet static address 212.72.227.80 netmask 255.255.255.255
Interface lo heeft geen auto erbij staan om dat die al default boven aan de interfaces config staat.
BNG agent
De bng agent wordt gebruikt om diverse controles uit te voeren en bij te houden hoe zwaar de server wordt belast. Dit wordt vervolgens uit gelezen door de loadbalancer. Deze agent kan je voor zowel 32 bit als 64 bit vinden in de /sbin directory op LB1 en natuurlijk LB2
- /sbin/bngagent-Linux-i386 is de 32 bit
- /sbin/bngagent-Linux-amd64 is de 64 bit
Eén van deze twee moet je naar de target kopiëren. Hierna moet je de volgende regel toevoegen onderaan de lo:0 interface:
up /sbin/bngagent-Linux-amd64 -6 10000
Dit zorgt er voor dat wanneer de interface up gaat, de agent wordt gestart en dat deze luistert op ipv6 op port 10000/udp. Dit verkeer moet dus ook door gelaten worden door de firewall.
bekijken
door middel van het show commando kan je zien hoe een target erbij staat:
LB1# sh target no ipaddr ipaddr6 port prt net net6 srv sessions status info name -- ------------- -------------------------- ---- --- --- ---- --- -------- ----------- --------------------------------------- ------------ 1 212.72.227.68 2a02:968:1:7:212:72:227:68 80 tcp 1 1 1 0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:1 www-test-lb1 2 212.72.227.69 2a02:968:1:7:212:72:227:69 80 tcp 1 1 1 0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:1 www-test-lb2
Zoals je hier kan zien is de gehele (alle targets) pool up en operationeel.
editen
Het editen gaat het zelfde als bij de server. We gaan nu nog een extra monitoring script voor http toevoegen zodat we zeker weten dat webserver draait.
LB1# dis target 1 LB1# unreg target 1 LB1# target 1 script "/usr/lib/mon/mon.d/http.monitor -p $port$ -u /index.html $ipaddr$",2,7 LB1# commit target 1 LB1# dis tar 2 LB1# unreg tar 2 LB1# tar 2 script "/usr/lib/mon/mon.d/http.monitor -p $port$ -u /index.html $ipaddr$",2,7 LB1# com tar 2
Als we nu controle doen met show target zul je zien dat er een extra controle bij staat (onder script):
LB1# sh target no ipaddr ipaddr6 port prt net net6 srv sessions status info name -- ------------- -------------------------- ---- --- --- ---- --- -------- ----------- -------------------------------------------------- ------------ 1 212.72.227.68 2a02:968:1:7:212:72:227:68 80 tcp 1 1 1 0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:14,script:up www-test-lb1 2 212.72.227.69 2a02:968:1:7:212:72:227:69 80 tcp 1 1 1 0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:8,script:up www-test-lb2
VRRP
Vrrp is het protocol waarmee wordt geregeld welke loadbalancer de master is en welke de slave.
Met show vrrp kan je zien of de loadbalancer waar je op bent ingelogd master of slave is.
Door commando stop te geven zet je de loadbalancer uit en wordt de master taak overgedragen aan de andere loadbalancer.
Vanaf de ssh command prompt kan je weer starten met bng start of service bng start.
LB2# sh vrrp state BACKUP vrid 9 (0x09) priority 200 ipaddr0 ::ffff:212.72.227.80 ipaddr1 2a02:968:1:7:212:72:227:80
handige links
De site van de maker van BalanceNG
handleiding
licentie
lb1
Serial Number: HCC1108311 Node-Id: 34:28:7b:55:d1:e0 License Key: 6dae39cb4cb4011378423870d571e675 Password: 3421773
lb2
Serial Number: HCC1108312 Node-Id: df:5f:93:c8:c9:43 License Key: 7cb771613679c5d634822c9b06068fe3 Password: 3421773