Loadbalancers

From Hobbynet Admin Wiki
Revision as of 22:22, 3 September 2011 by Egbert (talk | contribs)
Jump to navigation Jump to search

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.

File:Normaal.dia

webserver faalt

Dit geeft weer hoe het verkeer loopt wanneer webserver faalt

File:Webserverfaalt.dia

loadbalancer faalt

Dit geeft weer hoe het verkeer loopt wanneer loadbalencer faalt

File:Lbfaalt.dia

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

Media:handleiding-ng.pdf

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