Loadbalancers: Difference between revisions

From Hobbynet Admin Wiki
Jump to navigation Jump to search
 
(82 intermediate revisions by 6 users not shown)
Line 1: Line 1:
=doel=
=doel=
De loadbalancer zorgt er voor dat bij voorbeeld een webdienst redundant uitgevoerd kan worden. De loadbalancer zelf is ook redundant uitgevoerd.
De loadbalancer zorgt er voor dat onze webdiensten redundant uitgevoerd worden.
=otap=
Van de loadbalancers zijn er 2 omgevingen
 
# de productie
# de test op deze omgeving draaien alle website die joomla-test en joomla-dev draaien
 
= OPGELET =
''' heel belangrijk ''' de loadbalancer mag je nooit migreren als ze aan staan, hierdoor krijg je een 'split brain' situatie
 
In tegen stelling tot alle andere vm's staan deze vm's op lokale storage, zo dat er bij onderhoud van iscsi er geen splitbrain en timing issues ontstaan
 
Dit is dan ook geblokkeerd in vmware zoals omschreven hier https://frankdenneman.nl/2014/08/18/disable-vmotion-single-vm/  met 1 aanpassing query mag wel en vmotion als uit staat mag wel


=opzet=
=opzet=
We hebben 2 fysieke loadbalancers (voor redundantie). Als de ene loadbalancer faalt neemt de andere het over. Daarnaast zorgt de actieve loadbalancer er voor dat verkeer over de webservers wordt verspreid. Als er een webserver uitvalt wordt deze uit de pool gehaald, waardoor de webdienst zelf gewoon bereikbaar blijft, zij het op maar één server.
We hebben 2 virtuele loadbalancers: loadbalancer1 en loadbalancer2. Elk draait op een andere hypervisor te weten vmware4 en vmware5


== normale situatie ==
== normale situatie ==
Dit geeft weer hoe in normale situaties het verkeer loopt.<br>
Dit geeft weer hoe in normale situaties het verkeer loopt.<br>
[[File:normaal.png]]
[[File:normaal.png|600px]]


[[File:normaal.dia]]
[[File:normaal.dia]]
Line 13: Line 25:
== webserver faalt ==
== webserver faalt ==
Dit geeft weer hoe het verkeer loopt wanneer een webserver faalt.<br>
Dit geeft weer hoe het verkeer loopt wanneer een webserver faalt.<br>
[[File:webserverfaalt.png]]
[[File:webserverfaalt.png|600px]]


[[File:webserverfaalt.dia]]
[[File:webserverfaalt.dia]]
Line 19: Line 31:
== loadbalancer faalt ==
== loadbalancer faalt ==
Dit geeft weer hoe het verkeer loopt wanneer een loadbalancer faalt.<br>
Dit geeft weer hoe het verkeer loopt wanneer een loadbalancer faalt.<br>
[[File:lbfaalt.png]]
[[File:lbfaalt.png|600px]]


[[File:lbfaalt.dia]]
[[File:lbfaalt.dia]]


=IP plan=
=IP plan=
== servers ==
== 212.72.224 IP reeks (eth1)==
=== Gereserveerd ===
==== 212.72.224 IP reeks ====
<pre>
<pre>
Server id 41 t/m 50
212.72.224.240 2a02:968:1:2:212:72:224:240 loadbalancer1-vlan100.hobby.nl     (IP adressen voor loadbalancer zelf)
212.72.224.101 vip21.hobby.nl           (virtuele IP adressen voor diensten die gebalanced worden)
212.72.224.241 2a02:968:1:2:212:72:224:241 loadbalancer2-vlan100.hobby.nl     (IP adressen voor loadbalancer zelf)
  t/m
</pre>
212.72.224.110 vip30.hobby.nl           (virtuele IP adressen voor diensten die gebalanced worden)


212.72.224.251  lb1-vlan100-bip.hobby.nl    (IP adres voor loadbalancer zelf)
==== 212.72.227 IP reeks (eth3)====
212.72.224.252 lb2-vlan100-bip.hobby.nl    (IP adres voor loadbalancer zelf)
<pre>
212.72.224.253  lb1-vlan100.hobby.nl        (IP adres voor het OS van de loadbalancer)
212.72.227.88 en 2a02:968:1:7:212:72:227:88 loadbalancer1-vlan107.hobby.nl    (IP adressen voor loadbalancer zelf)
212.72.224.254 lb2-vlan100.hobby.nl         (IP adres voor het OS van de loadbalancer)
212.72.227.89 en 2a02:968:1:7:212:72:227:89 loadbalancer2-vlan107.hobby.nl     (IP adressen voor loadbalancer zelf)
</pre>
</pre>


==== 212.72.227 IP reeks ====
==== 212.72.229 IP reeks (eth2)====
<pre>
<pre>
server id 1 t/m 20
212.72.229.240 2a02:968:1:1:212:72:229:240  loadbalancer1-vlan102.hobby.nl     (IP adressen voor loadbalancer zelf)
212.72.227.80  vip01.hobby.nl   (virtuele IP adressen voor diensten die gebalanced worden)
212.72.229.241 2a02:968:1:1:212:72:229:241  loadbalancer2-vlan102.hobby.nl     (IP adressen voor loadbalancer zelf)
  t/m
</pre>
212.72.227.89  vip10.hobby.nl   (virtuele IP adressen voor diensten die gebalanced worden)


212.72.227.91  lb1-bip.hobby.nl (IP adres voor loadbalancer zelf)
==== 172.31.1 IP reeks (eth0) ====
212.72.227.92  lb2-bip.hobby.nl (IP adres voor loadbalancer zelf)
<pre>
212.72.227.93  lb1.hobby.nl    (IP adres voor het OS van de loadbalancer)
172.31.1.240 2a02:968:ffff:999:172:31:1:240  loadbalancer1-vlan999.hobby.nl     (IP adressen voor loadbalancer zelf)
212.72.227.94  lb2.hobby.nl    (IP adres voor het OS van de loadbalancer)
172.31.1.241 2a02:968:ffff:999:172:31:1:241  loadbalancer2-vlan999.hobby.nl     (IP adressen voor loadbalancer zelf)
</pre>
==== 172.31.254 IP reeks (eth5) ====
<pre>
172.31.254.240 2a02:968:ffff:997:172:31:254:240  loadbalancer1-vlan997.hobby.nl    (IP adressen voor loadbalancer zelf)
172.31.254.241 2a02:968:ffff:997:172:31:254:241  loadbalancer2-vlan997.hobby.nl    (IP adressen voor loadbalancer zelf)
</pre>
</pre>
Voor alle genoemde IPv4 adressen, 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.
===== dns aliassen =====
Via interne netwerk zijn de dns aliassen aangemaakt loadbalancer1-int.hobby.nl en loadbalancer2-int.hobby.nl op die manier konden gebruik blijven maken van hobbynet wildcard certificaat.


==== 212.72.229 IP reeks ====
=configuratie=
<pre>
== termen ==
server id 21 t/m 40
* Virtual service : De dienst die geloadbalanced wordt (dit kan layer 4 of layer 7 zijn)
212.72.229.101  vip11.hobby.nl           (virtuele IP adressen voor diensten die gebalanced worden)
 
  t/m
Configuratie gebeurt altijd via de webinterface. Enkel bij hele uitzonderlijke gevallen moet je wat via SSH doen.
212.72.229.110  vip20.hobby.nl           (virtuele IP adressen voor diensten die gebalanced worden)
 
De loadbalancers zijn te bereiken via:
* https://loadbalancer1-int.hobby.nl:9443/
* https://loadbalancer2-int.hobby.nl:9443/
 
== ssh toegang ==
SSH keys kunnen toegevoegd worden, dit vereist echter strak formaat namelijk
  ssh-rsa <snip> je key </snip> bas@een.domein.nl
Het is heel belangrijk dat je key in dit formaat is, ook ben je verplicht een hostnaam in te geven, gebruik daarvoor gewoon je naam dit moet namelijk uniek zijn.<br>
'''Key's mogen niet met de hand worden toegevoegd via SSH !'''<br>
Je kan in de loadbalancer onder Local Configuration -> SSH Keys en dan het tab SSH Authentication
 
'''Configuratie van dit onderdeel moet je op beide loadbalancers doen want dit wordt niet gerepliceerd!'''
 
= Proxy (layer 7) =
Alle website gaan via proxy op de loadbalancer naar de webservers toe.
== ssl ==
SSL wordt getermineerd op loadbalancer, maar het verkeer tussen de loadbalancer en de webserver is versleuteld met ssl, dit gebeurd echter met certificaat gesignend door onze windows CA
=== cerificaat uploaden ===
Het heeft mijn voorkeur om een pfx certificaat te gebruiken, dit leverde mijn veel minder gedoe op.
* ga naar Cluster configuration -> ssl certificate
* klik op add a new SSL Certificaat
[[File:Upload certificaat loadbalancer.png|600px]]
 
* 1) kies upload prepared pem/pfx file
* 2) geeft het certificaat een naam .  
* 3) kies bestand kiezen en kies op je pc het certificaat dat je wil uploaden
* indien je cert een wachtwoord heeft vul die dan in wanneer er om gevraagd wordt.  
* klik op upload certificaat
 
note soms gaat uploaden fout doe het dan in privacy window, browser vult namelijk soms verborgen velden in dat geeft problemen
 
=== let's encrypt certificaat ===
Zorg er voor dat layer 7 service is voorbereid zoals hier beschreven [[Loadbalancers#voor_bereiden_voor_lets_encrypt| Let's encrypt voorbereiden]] <br>
log in met ssh op de loadbalancer 1 en voor dit commando uit
  /usr/local/sbin/lb-letsencrypt-bas.sh -i -p 443 -h 8888 -d '''domein naam''' -f loadbalancer@hobby.nl -t beheer@hobby.nl -r smtp.bit.nl -U loadbalancer -P '''********'''
dit zorgt er voor dat een lets's encrypt certificaat wordt aangevraagd voor dit domein en wordt ge upload, ook maak dit script automatisch een cron entry aan om het certificaat te verlengen
 
== standaard setup ==
Standaard gebruiken wij een setup waarbij altijd de load over meerdere servers verspreid wordt
 
=== instellen van Virtual service layer 7 ===
==== van scratch ====
Ga naar cluster configuration -> layer 7 - virtual services en klik daar op 'Add a new Virtual Service'
 
* 1) Vul hier de naam van virtual service in. Standaard is dat VIP(nr) naam.url.nl-v4 (of v6 bij IPv6) ('''let op: geen spatie tussen vip en het nummer van de vip''')
* 2) Het IP-adres wat aan de buitenkant wordt gebruikt
* 3) De poort nummers voor web standaard 80 je mag meer poort nummers opgeven door te scheiden met een (altijd alleen 80 ook bij een https site).
Klik op update
 
[[File:Add Virtual service layer 7 stap1.png|600px]]
 
Herhaal de bovenstaande stappen voor het IPv6 adres
 
Nu moeten we nog bestemming toevoegen : waar moet het verkeer naar toe worden gerouteerd.
 
Ga naar cluster configuration -> layer 7 - Real Servers
Zoek daar je Virtual service op en klik op modify
 
Tip je standaard staat de Virtual service die je net hebt gemaakt onderaan
Klik op 'Add a new Real Server" bij de Virtual service die we net hebben aangemaakt
 
* 1) Zet naam van de bestemming neer dit geval users-lb1-v4 (of v6 bij IPv6)
* 2) Vul het IP-adres van de bestemming in
* 3) vul hier 443 in (ja 443 en geen 80, het verkeer tussen loadbalancer en webserver is ssl versleuteld)
* 4) vink re-encrypt to backend aan, dit zorgt dat verkeer tussen loadbalancer en webserver wordt versleuteld
* 5) Klik op update
[[File:Add Virtual service layer 7 stap2.png|600px]]


server id 81 t/m 100
* Herhaal dit voor alle 2 resterende loadbalanced webservers
212.72.229.111  vip31.hobby.nl          (virtuele IP adressen voor diensten die gebalanced worden)
* Uiteraard moet je dit ook voor ipv6 versie doen, alleen gebruik je dan IPv6 adressen!
  t/m
==== voor bereiden voor lets encrypt ====
212.72.229.120  vip40.hobby.nl          (virtuele IP adressen voor diensten die gebalanced worden)
Indien voor het domein een let's encrypt certificaat aangevraagd moet worden moet er een een extra setting gedaan worden.
* ga naar Cluster Configuration -> layer 7 - Virtual Services .
* zoek de vip op waar bij certificaat word aangevraagd.  
* klik op modify
* zoek ACL rules op en klik op edit ACL Rules
[[File:edit acl rules layer 7.png|600px]]


212.72.229.251  lb1-vlan102-bip.hobby.nl    (IP adres voor loadbalancer zelf)
* 1) kies rule type '''path_beg'''
212.72.229.252  lb2-vlan102-bip.hobby.nl    (IP adres voor loadbalancer zelf)
* 2) Boolean '''Equals'''
212.72.229.253  lb1-vlan102.hobby.nl        (IP adres voor het OS van de loadbalancer)
* 3) URL text/ip '''/.well-known/acme-challenge/'''
212.72.229.254  lb2-vlan102.hobby.nl        (IP adres voor het OS van de loadbalancer)
* 4) Rule action type '''backend'''
</pre>
* 5) Redirect Location '''letsencrypt'''
[[File:add acl rules layer 7.png|600px]]


==== 172.31.1 IP reeks ====
Als je dit alles hebt gedaan moet de ha proxy config op nieuw ingeladen worden.  
<pre>
kilk op reload haproxy
server id 61 t/m 80
172.31.1.100 vip01-int.hobby.nl (virtuele IP adressen voor diensten die gebalanced worden voor interne diensten)
  t/m
172.31.1.109 vip10-int.hobby.nl (virtuele IP adressen voor diensten die gebalanced worden voor interne diensten)


172.31.1.196  lb1-bip-int.hobby.nl        (IP adres voor loadbalancer zelf)
172.31.1.197  lb2-bip-int.hobby.nl        (IP adres voor loadbalancer zelf)
172.31.1.198  lb1-int.hobby.nl            (IP adres voor het OS van de loadbalancer)
172.31.1.199  lb2-int.hobby.nl            (IP adres voor het OS van de loadbalancer)</pre>


==== ipv6 ====
[[File:reload haproxy.png|600px]]
Voor alle genoemde externe IPv4 adressen, is er ook een IPv6 adres in de stijl die we bij Hobbynet hanteren: 212.72.229.101 wordt 2a02:968:1:1:212:72:229:101.
== targets ==
===toegekend ===
==== extern ====
* vip01 www-test  HCC.nl test omgeving
* vip03 www-prod  HCC.nl productie omgeving
* vip11 php-joomla algemeen en test.hcc.nl https
* vip12 groepen.hcc.nl + sub urls http https
* vip13 www.dikkenberg.net http https
* vip20 www.scouthout.nl http https
* vip31 www.scoutingschipluiden.nl http https


==== intern ====
Vraag nu het certificaat aan zoals beschreven hier [[Loadbalancers#let.27s_encrypt_certificaat|let's encrypt certificaat]]
* vip01-int db-clus01 database cluster groeperingen
==== SSL configuren (stunnel) ====
* vip02-int hcc-dbclus02 database cluser hcc.nl website
Om te zorgen dat we ssl certificaat kopelen aan onze layer 7 servive moet dat als volgt doen :
== targets ==
* ga naar Cluster Configuration -> ssl terminiation
Target vallen in de gewone ip space en is dus geen ruimte voor gereserveerd
* klik op add new virtual service
=== toegekend ===
* 1) kies uit de pull down de VIP waar ssl aangekopeld moet worden
==== extern ====
* 2) kies bij ssl operaation mode voor High Security
* 212.72.227.68 www-test-lb1
* 3) kies het juist ssl certificaat
* 212.72.227.69 www-test-lb2
* 4) kies update
* 212.72.227.72 www-prod-lb1
[[File:add ssl termination.png|600px]]
* 212.72.227.73 www-prod-lb2
* 212.72.229.90 php-joomla-lb1
* 212.72.229.91 php-joomla-lb2
* 212.72.229.110 www.scouting.nl
* 212.72.229.111 www.scoutingschipluiden.nl


==== intern ====
Hier na moet stunnel en haproxy herladen worden
* 172.31.1.213 db01
* klik eerst op system overview zodat je ziet dat beide herladen moet worden
* 172.31.1.214 db02
* klik eerst op reload stunnel
* 172.31.1.215 HCC-db03
* Klik reload haproxy
* 172.31.1.216 HCC-db04
[[File:reload stunnel haproxy.png|600px]]
.


=configuratie=
= Direct routing (layer 4) =
== termen ==
Op dit moment maken we nog gebruik van direct routing voor alle niet website gerelateerde zaken. Behalve<br>
Hieronder een overzicht van termen die in de configuratie worden gebruikt en mogelijk verwarrend zijn.
* redirect server<br>
* server
* xml server<br>
Dit is de kant waar, via virtuele IP adressen, de webserver draait en waar de client mee communiceert.
* mail server<br>
* 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. <br>
Let op: ''de loadbalancer heeft zijn eigen IP adressen die los staan van het OS''


== config files ==
== standaard setup ==
De configuratie bestanden mogen '''nooit met de hand ge-edit worden'''. Dit dient '''altijd''' te gebeuren door middel van de '''loadbalancer command prompt'''.<br>
Standaard gebruiken wij een setup waarbij altijd de load over meerdere servers verspreid wordt
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.<br>
=== instellen van Virtual service layer 4 ===
Ook moet je elke wijziging, min of meer zoals bij Cisco, opslaan door het commando '''save all''' te gebruiken.


== nieuwe server aanmaken/aanpassen/bekijken ==
==== van scratch ====
Een server en een target moeten in het zelfde subnet zitten ivm routering.<br>
Ga naar cluster configuration -> layer 4 - virtual services en klik daar op 'Add a new Virtual Service'
Meerdere servers kunnen dezelfde target hebben, denk hierbij aan webservers met meerdere https sites. In zo'n geval krijgt het target echter alleen een extra loopback adres.<br>
Eveneens moet voor elke poort een eigen server worden geconfigureerd: dus bijvoorbeeld server 3 voor http en server 4 met https met beide dezelfde targets.
=== server ids ===
Voor de volgende reeksen zijn de volgende ids toegewezen:


* 212.72.227.0/24  id 1/20
* 1) Vul hier de naam van virtual service in. Standaard is dat VIP(nr)-v4_naam.url.nl (of v6 bij IPv6) ('''let op: geen spatie tussen vip en het nummer van de vip''')
* 212.72.229.0/24  id 21/40
* 2) Het IP-adres wat aan de buitenkant wordt gebruikt
* 212.72.224.0/24  id 41/60
* 3) De poort nummers voor web standaard 80,443 je mag meer poort nummers opgeven door te scheiden met een ,
* 172.31.1.0/24    id 61/80
Klik op update


=== aanmaken ===
[[File:Add Virtual service layer 4 stap1.png|600px]]
In dit voorbeeld gaan we de server configureren voor een webserver. Dit doen we als volgt via de loadbalancer command prompt:
==== loadbalancing ====
<pre>
bng control
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+dstport
LB1# server 2 method session
LB1# server 2 targets 2,3
</pre>
Hierna willen we deze configuratie doorvoeren en activeren. Dit doen we door het commando:
commit server 2


==== Fallback ====
Herhaal de bovenstaande stappen voor het IPv6 adres
Als je niet wilt dat er geloadbalanced wordt, maar dat er gebruik wordt gemaakt van een andere target als de originele target er niet is, configureer je het als volgt:
bng control
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+dstport
LB1# server 2 method session
LB1# '''server 2 targets 2'''
LB1# '''server 2 backup 3'''


=== bekijken ===
Nu moeten we nog bestemming toevoegen : waar moet het verkeer naar toe worden gerouteerd.  
Nu willen we kijken of de configuratie goed is.
Dit kan je door het '''show server''' commando te geven.
<pre>
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# show server 2
Ga naar cluster configuration -> layer 4 - Real Servers<br>
  no ipaddr        ipaddr6                    port prt net net6 sessions S targets backups
Zoek daar je Virtual service op en klik op modify
  -- ------------- -------------------------- ---- --- --- ---- -------- - ------- -------
  2 212.72.227.81 2a02:968:1:7:212:72:227:81  80 tcp  1    0        0 e 2,[3]
</pre>


=== aanpassen ===
Tip je standaard staat de Virtual service die je net hebt gemaakt onderaan<br>
In het vorige voorbeeld hebben we 2 foutjes gemaakt die willen we herstellen. Voordat we dat doen moeten we eerst de server disablen en de-registeren: <br>
Klik op 'Add a new Real Server" bij de Virtual service die we net hebben aangemaakt
Dat doe je als volgt:
<pre>
LB1# disable server 2
LB1# unregister server 2 
</pre>
Wat we willen aanpassen is de naam van de server. Die is nu 'vip2', dat moet zijn 'vip02'. Ga als volgt te werk:
<pre>
LB1# server 2 name vip02
</pre>
Daarna willen we de target nog aanpassen naar 3 en 4 in plaats van 2 en 3:
<pre>
LB1# server 2 target 3,4
</pre>
Ook hier na moeten we weer een commit doen echter krijgen we nu wel een foutmelding:
<pre>
LB1# commit server 2
  ERROR: WARNING: server 2 references unregistered target 3
  ERROR: WARNING: server 2 references unregistered target 4
</pre>
Dit komt om dat target 3 en 4 nog niet bestaan.


== nieuwe target aanmaken/aanpassen/bekijken ==
* 1) Zet naam van de bestemming neer dit geval Joomla-lb1-v4 (of v6 bij IPv6)
Een server en een target moeten in hetzelfde subnet zitten ivm routering
* 2) Vul het IP-adres van de bestemming in
=== target ids ===
* 3) Klik op update


* 212.72.227.0/24 ids 100/199
[[File:Add a new Real server.png|600px]]
* 212.72.229.0/24 ids 200/299
* 212.72.224.0/24 ids 300/399
* 172.31.1.0/24  ids 400/499
=== aanmaken ===
==== configuratie op de loadbalancer ====
Dit gaat vrijwel identiek aan het configureren van de server:
<pre>
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 src+dstport
target 2 dsr enable
</pre>
Hierna moet ook weer een commit gedaan worden:
commit target 2


==== configuratie op de target ====
Indien het hier geen fallback scenario betreft herhaal de bovenstaande stap voor de 2e bestemming
Op de target in kwestie moeten een aantal wijzigingen worden doorgevoerd om alles goed te laten werken.


===== sysctl.conf =====
Herhaal deze stappen voor IPv6 virtual service
De volgende regels moeten aan '''/etc/sysctl.conf''' worden toegevoegd:
<pre>
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
</pre>
Deze hierna activeren door middel van het commando '''sysctl -p'''


===== loopback interface =====
===== Persistence mode =====
Om te zorgen dat de target naar het IP adres (vip) van de loadbalancer luistert, moet er een loopback interface worden aangemaakt met het vip van de loadbalancer:
Om te zorgen dat verkeer van 1 gebruiker bij de zelfde server uit komt moet de persistence op source ip ingesteld worden. We hebben het in verleden geprobeerd met applicatie cookie of een http cookie, maar dit gaf sessie problemen daarom gebruiken we nu voor alle sites source ip
<pre>
iface lo inet6 static
        address        2a02:968:1:7:212:72:227:80
        netmask        128


auto lo:0
Ga terug naar cluster configuration -> layer 4 - virtual services, zoek je virtual service op en klik op modify
iface lo:0 inet static
onder Kopje Persistence zet je mode op Source IP<br>
        address 212.72.227.80
[[File:persistance.png|600px]]
        netmask 255.255.255.255
</pre>  
Interface lo heeft geen auto erbij staan omdat die al default bovenaan de interfaces configuratie staat.


===== BNG agent =====
===== fallback scenario =====
De bng agent wordt gebruikt om diverse controles uit te voeren en bij te houden hoe zwaar de server wordt belast. Dit wordt vervolgens uitgelezen door de loadbalancer. Deze agent kan je voor zowel 32 bit als 64 bit vinden in de /sbin directory op LB1 en natuurlijk LB2<br>
Bij fallback senario wil je dat verkeer standaard op 1e server uitkomt, behalve wanneer deze er niet is. Bijvoorbeeld bij mail en de xml-rpc server, in dit geval voeg je '''geen''' 2e realserver toe.
* /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:
<pre>
        up /sbin/bngagent-Linux-amd64 -6 10000
</pre>
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 doorgelaten worden door de firewall''.


=== bekijken ===
Ga terug naar cluster configuration -> layer 4 - virtual services, zoek je virtual service op en klik op modify<br>
Door middel van het show commando kan je zien hoe een target erbij staat:
TIP boven in zit zoek veld
<pre>
LB1# show 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
</pre>
Zoals je hier kan zien is de gehele pool (alle targets) up en operationeel.


=== aanpassen ===
* Zoek de sectie 'Fallback Server' op
Het aanpassen gaat hetzelfde als bij de server.
* Vul het IP-adres in van de fallback server in, laat de overige velden leeg
We gaan nu nog een extra monitoring script voor http toevoegen, zodat we zeker weten dat de webserver draait.
* klik op update
<pre>
Herhaal deze stappen voor IPv6 virtual service
LB1# disable target 1
LB1# unregister 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# disable target 2
LB1# unregister target 2
LB1# target 2 script "/usr/lib/mon/mon.d/http.monitor -p $port$ -u /index.html $ipaddr$",2,7
LB1# commit target 2
</pre>
Als we nu de status bekijken met '''show target''' zul je zien dat er een extra controle bij staat (onder script):
<pre>
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
</pre>


== configuratie opslaan ==
[[File:Fallback server.png|600px]]
* Vergeet niet om de wijzigingen op te slaan:
<pre>
LB1# save all
</pre>
* Vergeet niet om de aanpassingen op beide loadbalancers aan te brengen


==VRRP==
==== bestaande virtual service kopiëren ====
VRRP is het protocol waarmee wordt geregeld welke loadbalancer de master is en welke de slave.<br>
Maar dit alles kan ook veel makkelijker, als er alleen vip is die de zelfde bestemming heeft etc etc
Met '''show vrrp''' kan je zien of de loadbalancer waar je op bent ingelogd master of slave is.<br>
Door het commando '''stop''' te geven zet je de loadbalancer uit en wordt de master taak overgedragen aan de andere loadbalancer.<br>
VRRP draait op dedicated vlan 997 en is eth4 (network5) op de loadbalancers.<br>
Vanaf de ssh command prompt kan je weer starten met '''bng start''' of '''service bng start'''.


<pre>
Ga terug naar cluster configuration -> layer 4 - virtual services, zoek je virtual service op die je kopiëren en klik op modify <br>
LB2# sh vrrp
Zie afbeelding 5 rechts<br>
  state    BACKUP
Klik op Duplicate service
  vrid      9 (0x09)
  priority  200
  ipaddr0  ::ffff:212.72.227.80
  ipaddr1  2a02:968:1:7:212:72:227:80
</pre>


= status van de servers bekijken =
[[File:Duplicate service.png|600px]]
Dit doe je met het commando '''show servers''' vanaf de bng command prompt
<pre>
LB1# show servers
  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        2 e 1,2
  2 172.31.1.100  -                          3306 tcp  2    0      509 e 3      4
  3 212.72.229.101 2a02:968:1:1:212:72:229:101  80 tcp  3    0      85 e 5,6
  4 212.72.229.101 2a02:968:1:1:212:72:229:101  443 tcp  3    0      24 e 7,8
  5 172.31.1.101  -                          3306 tcp  2    0        9 e 9      10
  6 212.72.227.82  2a02:968:1:7:212:72:227:82    80 tcp  1    0        2 e 11,12
  7 212.72.227.82  2a02:968:1:7:212:72:227:82  443 tcp  1    0        0 e 13,14
  8 212.72.227.80  2a02:968:1:7:212:72:227:80  443 tcp  1    0        0 e 15,16
  9 212.72.229.102 2a02:968:1:1:212:72:229:102  80 tcp  3    0      134 e 5,6
  10 212.72.229.102 2a02:968:1:1:212:72:229:102  443 tcp  3    0      39 e 7,8
  11 212.72.229.103 2a02:968:1:1:212:72:229:103  80 tcp  3    0        2 e 5,6
  12 212.72.229.103 2a02:968:1:1:212:72:229:103  443 tcp  3    0        0 e 7,8
</pre>


= server uitschakelen =
Negeer de waarschuwing is melding dat toevoeging heeft gedaan zodat er geen dubbele namen zijn
Stel we willen server 12 uitschakelen, dan doe je dat met volgende commando: '''disable server 12'''.<br>
* 1) Vervang hier de naam van virtual service. Standaard is dat VIP(nr) naam.url.nl-v4 (of v6 bij IPv6) ('''let op : geen spatie tussen vip en het nummer van de vip''')
Je zult zien, als je de status opvraagt, dat in de kolom S nu een '''D''' staat bij server 12
* 2) Vervang het IP-adres wat aan de buitenkant wordt gebruikt
LB1# disable server 12
* 3) Controleer de poortnummers voor web standaard 80,443 je mag meer poortnummers opgeven door te scheiden met een ,<br>
LB1# show server
Klik op update<br>
  no ipaddr        ipaddr6                    port prt net net6 sessions S targets backups
Herhaal deze stappen voor IPv6 virtual service
  -- -------------- --------------------------- ---- --- --- ---- -------- - ------- -------
  1 212.72.227.80  2a02:968:1:7:212:72:227:80    80 tcp  1    0        2 e 1,2
  2 172.31.1.100  -                           3306 tcp  2    0      499 e 3      4
  3 212.72.229.101 2a02:968:1:1:212:72:229:101  80 tcp  3    0      100 e 5,6
  4 212.72.229.101 2a02:968:1:1:212:72:229:101  443 tcp  3    0      25 e 7,8
  5 172.31.1.101  -                          3306 tcp  2    0        9 e 9      10
  6 212.72.227.82  2a02:968:1:7:212:72:227:82    80 tcp  1    0        2 e 11,12
  7 212.72.227.82  2a02:968:1:7:212:72:227:82  443 tcp  1    0        0 e 13,14
  8 212.72.227.80  2a02:968:1:7:212:72:227:80  443 tcp  1    0        0 e 15,16
  9 212.72.229.102 2a02:968:1:1:212:72:229:102  80 tcp  3    0      133 e 5,6
  10 212.72.229.102 2a02:968:1:1:212:72:229:102  443 tcp  3    0      39 e 7,8
  11 212.72.229.103 2a02:968:1:1:212:72:229:103  80 tcp  3    0        3 e 5,6
  12 212.72.229.103 2a02:968:1:1:212:72:229:103  443 tcp  3    0        0 '''D''' 7,8


= server inschakelen =
[[File:Duplicate service2.png|600px]]
Stel we willen server 12 inschakelen, dan doe je dat met volgende commando: '''enable server 12'''. <br>
Je zult zien, als je de status opvraagt, dat in de kolom S nu een '''e''' staat bij server 12


LB1# enable server 12
= firewall lock down script =
LB1# show server
Het standaard lockdownscript (de term die in de loadbalancer wordt gebruikt) is aangepast met de volgende de aanpassingen:
  no ipaddr        ipaddr6                    port prt net net6 sessions S targets backups
* Onze VPN IP-reeksen toegevoegd als admin reeksen
  -- -------------- --------------------------- ---- --- --- ---- -------- - ------- -------
* Voor SNMP is aparte chain aangemaakt
  1 212.72.227.80  2a02:968:1:7:212:72:227:80    80 tcp  1    0        2 e 1,2
* Al het SNMP verkeer dat niet het IP-adres (eth0) van de loadbalancer is wordt gereject
  2 172.31.1.100  -                           3306 tcp  2    0      486 e 3      4
Hier vindt je kopie van het huidige lockdown script van 28-09-2020 10:00
  3 212.72.229.101 2a02:968:1:1:212:72:229:101  80 tcp  3    0      100 e 5,6
[[File:Lockdownscript.txt]]
  4 212.72.229.101 2a02:968:1:1:212:72:229:101  443 tcp  3    0      22 e 7,8
Dit script kan je bewerken via Maintenance -> Firewall Lock Down Wizzard<br>
  5 172.31.1.101  -                           3306 tcp  2    0        9 e 9      10
Met 'Modify the firewall lock down wizard script' pas je het script aan. <br>
  6 212.72.227.82  2a02:968:1:7:212:72:227:82    80 tcp  1    0        2 e 11,12
Met 'Update Firewall lockdown' wordt het de firewall herladen <br>
  7 212.72.227.82  2a02:968:1:7:212:72:227:82  443 tcp  1    0        0 e 13,14
Standaard wordt het IP-adres waarmee je bent ingelogd ingevuld bij 'Administration subnet'. Dit is om te zorgen dat je er altijd weer in kan als je een foutje hebt gemaakt.
  8 212.72.227.80  2a02:968:1:7:212:72:227:80  443 tcp  1    0        0 e 15,16
  9 212.72.229.102 2a02:968:1:1:212:72:229:102  80 tcp  3    0      128 e 5,6
  10 212.72.229.102 2a02:968:1:1:212:72:229:102  443 tcp  3    0      40 e 7,8
  11 212.72.229.103 2a02:968:1:1:212:72:229:103  80 tcp  3    0        3 e 5,6
  12 212.72.229.103 2a02:968:1:1:212:72:229:103  443 tcp  3    0        0 '''e''' 7,8


= status van target bekijken =
'''Configuratie van dit onderdeel moet je op beide loadbalancers doen want dit wordt niet gerepliceerd!'''
Met het commando '''show target''' zien we de status van alle targets
<pre>
LB1# show 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        1 operational arp:up,nd6:up,ping:up,ping6:up,agent6:5,script:up  www-test-lb1
  2 212.72.227.69 2a02:968:1:7:212:72:227:69  80 tcp  1    1  1        1 operational arp:up,nd6:up,ping:up,ping6:up,agent6:1,script:up  www-test-lb2
  3 172.31.1.213  -                          3306 tcp  2    0  2      471 operational arp:up,ping:up,agent:1,script:up                  db01
  4 172.31.1.214  -                          3306 tcp  2    0  2        0 operational arp:up,ping:up,agent:5,script:up                  db02
  5 212.72.229.90 2a02:968:1:1:212:72:229:90  80 tcp  3    3  *      105 operational arp:up,nd6:up,ping:up,ping6:up,agent6:16,script:up php-joomla-lb1 http
  6 212.72.229.91 2a02:968:1:1:212:72:229:91  80 tcp  3    3  *      108 operational arp:up,nd6:up,ping:up,ping6:up,agent6:4,script:up  php-joomla-lb2 http
  7 212.72.229.90 2a02:968:1:1:212:72:229:90  443 tcp  3    3  *      28 operational arp:up,nd6:up,ping:up,ping6:up,agent6:16,script:up php-joomla-lb1 https
  8 212.72.229.91 2a02:968:1:1:212:72:229:91  443 tcp  3    3  *      26 operational arp:up,nd6:up,ping:up,ping6:up,agent6:4,script:up  php-joomla-lb2 https
  9 172.31.1.215  -                          3306 tcp  2    0  5        9 operational arp:up,ping:up,agent:1,script:up                  HCC-db03-int
  10 172.31.1.216  -                          3306 tcp  2    0  5        0 operational arp:up,ping:up,agent:1,script:up                  HCC-db04-int
  11 212.72.227.72 2a02:968:1:7:212:72:227:72  80 tcp  1    1  6        1 operational arp:up,nd6:up,ping:up,ping6:up,agent6:1,script:up  www-prod-lb1 http
  12 212.72.227.73 2a02:968:1:7:212:72:227:73  80 tcp  1    1  6        1 operational arp:up,nd6:up,ping:up,ping6:up,agent6:3,script:up  www-prod-lb2 http
  13 212.72.227.72 2a02:968:1:7:212:72:227:72  443 tcp  1    1  7        0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:1,script:up  www-prod-lb1 https
  14 212.72.227.73 2a02:968:1:7:212:72:227:73  443 tcp  1    1  7        0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:3,script:up  www-prod-lb2 https
  15 212.72.227.68 2a02:968:1:7:212:72:227:68  443 tcp  1    1  8        0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:5,script:up  www-test-lb1 https
  16 212.72.227.69 2a02:968:1:7:212:72:227:69  443 tcp  1    1  8        0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:1,script:up  www-test-lb2 https
</pre>


= target uitschakelen =
= backup =
Stel je wilt target 8 uitschakelen dan geef je het commando '''disable target 8''', als je dan de status van de targets opvraagt zul je zien dat bij target 8 '''disabled''' staat:
Elke dag backuppen we om 22:00
<pre>
LB1# disable target 8
LB1# show 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        1 operational arp:up,nd6:up,ping:up,ping6:up,agent6:7,script:up  www-test-lb1
  2 212.72.227.69 2a02:968:1:7:212:72:227:69  80 tcp  1    1  1        1 operational arp:up,nd6:up,ping:up,ping6:up,agent6:2,script:up  www-test-lb2
  3 172.31.1.213  -                          3306 tcp  2    0  2      444 operational arp:up,ping:up,agent:1,script:up                  db01
  4 172.31.1.214  -                          3306 tcp  2    0  2        0 operational arp:up,ping:up,agent:1,script:up                  db02
  5 212.72.229.90 2a02:968:1:1:212:72:229:90  80 tcp  3    3  *      90 operational arp:up,nd6:up,ping:up,ping6:up,agent6:2,script:up  php-joomla-lb1 http
  6 212.72.229.91 2a02:968:1:1:212:72:229:91  80 tcp  3    3  *      85 operational arp:up,nd6:up,ping:up,ping6:up,agent6:7,script:up  php-joomla-lb2 http
  7 212.72.229.90 2a02:968:1:1:212:72:229:90  443 tcp  3    3  *      27 operational arp:up,nd6:up,ping:up,ping6:up,agent6:2,script:up  php-joomla-lb1 https
  8 212.72.229.91 2a02:968:1:1:212:72:229:91  443 tcp  3    3  *      28 disabled    disabled                                          php-joomla-lb2 https
  9 172.31.1.215  -                          3306 tcp  2    0  5        9 operational arp:up,ping:up,agent:1,script:up                  HCC-db03-int
  10 172.31.1.216  -                          3306 tcp  2    0  5        0 operational arp:up,ping:up,agent:38,script:up                  HCC-db04-int
  11 212.72.227.72 2a02:968:1:7:212:72:227:72  80 tcp  1    1  6        2 operational arp:up,nd6:up,ping:up,ping6:up,agent6:1,script:up  www-prod-lb1 http
  12 212.72.227.73 2a02:968:1:7:212:72:227:73  80 tcp  1    1  6        1 operational arp:up,nd6:up,ping:up,ping6:up,agent6:10,script:up www-prod-lb2 http
  13 212.72.227.72 2a02:968:1:7:212:72:227:72  443 tcp  1    1  7        0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:1,script:up  www-prod-lb1 https
  14 212.72.227.73 2a02:968:1:7:212:72:227:73  443 tcp  1    1  7        0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:10,script:up www-prod-lb2 https
  15 212.72.227.68 2a02:968:1:7:212:72:227:68  443 tcp  1    1  8        0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:7,script:up  www-test-lb1 https
  16 212.72.227.69 2a02:968:1:7:212:72:227:69  443 tcp  1    1  8        0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:2,script:up  www-test-lb2 https
</pre>


= target inschakelen =
== ssh_config aanpassing ==
Stel je wilt target 8 inschakelen dan geef je het commando '''enable target 8''', als je dan de status van targets op vraagt zul je zien dat bij target 8 '''operational''' staat:  
Omdat de loadbalancer heel veel IP-adressen heeft zou het script ad random een IP-adres uitzoeken en dat gaat natuurlijk fout. Daarom hebben we een source IP-adres gespecificeerd. In /etc/ssh/ssh_config zijn daarom volgende regels toegevoegd:
<pre>
<pre>
LB1# show target
host backup2bit-int.hobby.nl
  no ipaddr        ipaddr6                    port prt net net6 srv sessions status      info                                              name
        BindAddress=2a02:968:ffff:999:172:31:1:240
  -- ------------- -------------------------- ---- --- --- ---- --- -------- ----------- ------------------------------------------------- --------------------
  1 212.72.227.68 2a02:968:1:7:212:72:227:68  80 tcp  1    1  1        1 operational arp:up,nd6:up,ping:up,ping6:up,agent6:1,script:up www-test-lb1
  2 212.72.227.69 2a02:968:1:7:212:72:227:69  80 tcp  1    1  1        1 operational arp:up,nd6:up,ping:up,ping6:up,agent6:1,script:up www-test-lb2
  3 172.31.1.213  -                          3306 tcp  2    0  2      422 operational arp:up,ping:up,agent:1,script:up                  db01
  4 172.31.1.214  -                          3306 tcp  2    0  2        0 operational arp:up,ping:up,agent:1,script:up                  db02
  5 212.72.229.90 2a02:968:1:1:212:72:229:90  80 tcp  3    3  *      97 operational arp:up,nd6:up,ping:up,ping6:up,agent6:3,script:up php-joomla-lb1 http
  6 212.72.229.91 2a02:968:1:1:212:72:229:91  80 tcp  3    3  *      96 operational arp:up,nd6:up,ping:up,ping6:up,agent6:6,script:up php-joomla-lb2 http
  7 212.72.229.90 2a02:968:1:1:212:72:229:90  443 tcp  3    3  *      25 operational arp:up,nd6:up,ping:up,ping6:up,agent6:3,script:up php-joomla-lb1 https
  8 212.72.229.91 2a02:968:1:1:212:72:229:91  443 tcp  3    3  *      18 operational arp:up,nd6:up,ping:up,ping6:up,agent6:6,script:up php-joomla-lb2 https
  9 172.31.1.215  -                          3306 tcp  2    0  5        9 operational arp:up,ping:up,agent:1,script:up                  HCC-db03-int
  10 172.31.1.216  -                          3306 tcp  2    0  5        0 operational arp:up,ping:up,agent:6,script:up                  HCC-db04-int
  11 212.72.227.72 2a02:968:1:7:212:72:227:72  80 tcp  1    1  6        1 operational arp:up,nd6:up,ping:up,ping6:up,agent6:3,script:up www-prod-lb1 http
  12 212.72.227.73 2a02:968:1:7:212:72:227:73  80 tcp  1    1  6        1 operational arp:up,nd6:up,ping:up,ping6:up,agent6:7,script:up www-prod-lb2 http
  13 212.72.227.72 2a02:968:1:7:212:72:227:72  443 tcp  1    1  7        0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:3,script:up www-prod-lb1 https
  14 212.72.227.73 2a02:968:1:7:212:72:227:73  443 tcp  1    1  7        0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:7,script:up www-prod-lb2 https
  15 212.72.227.68 2a02:968:1:7:212:72:227:68  443 tcp  1    1  8        0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:1,script:up www-test-lb1 https
  16 212.72.227.69 2a02:968:1:7:212:72:227:69  443 tcp  1    1  8        0 operational arp:up,nd6:up,ping:up,ping6:up,agent6:1,script:up www-test-lb2 https
</pre>
</pre>
Verder wordt standaard script dat ook logging draait gebruikt voor de backup /usr/local/hobbynet/bin/backup_etc


=handige links=
= Vmware image backup maken=
[http://www.inlab.de/balanceng De site van de maker van BalanceNG]
 
=handleiding=
[[Media:handleiding-ng.pdf]]


=Vereisten voor installatie loadbalancer software=
# zet de slave loadbalancer uit om splitbrain te voorkomen
# Clone de master '''naar vmware3 storage''' zet de datum in naam virtuele machine in omgekeerde volgorde dus bij voorbeeld 2021-09-23
# Clone de slave '''naar vmware3 storage''' zet de datum in naam virtuele machine in omgekeerde volgorde dus bij voorbeeld 2021-09-23
# Start slave loadbalancer
# gooi oude backup images weg
# converteer machines naar template in rechter muis knop menu template  -> convert to template
#Wil je ook nog locale kopie Liever niet convert to ovf template
De vuist regel is we bewaren de vorige versie van voor de actie en na de actie. tenzij de vorige backup jonger is dan 1 maand


== software ==
= Certificaat vervangen =
Het ubuntu pakket mon en mysql-client moet worden geinstalleerd, daar moet mon service wel gedeactiveerd worden:
update-rc.d mon disable


Daarnaast moet de dbi perl module worden geinstalleerd als volgt:
# Op de webinterface ga naar cluster configuration -> SSL Certificaten Upload het certificaat via gui onder een tijdelijke naam bv. ster_hcc_nl.
# Login met ssh op loadbalancer
# ga naar directory /etc/loadbalancer.org/certs/
# hier staan directory's van alle certificaten, in elke directory staat 1 pem bestand met de zelfde naam als directory (en dus ook certnaam)
# Dit bestand kopieer naar de directory van cert dat je wil vervangen en gebruikt dan ook de bestaande naam.
# hier na kopieer je dit bestand ook naar de lbslave.
# daarna ga je weer na de gui
# dan ga je naar maintenance -> restart services
# je kies voor reload Stunnel en daarna voor reload haproxy
# Vergeet niet het TSLA record in dns te update (https://ssl-tools.net/tlsa-generator)


perl -MCPAN -e 'install DBI'


Deze pakket zijn voor de check plugins
== firewall ==
De firewall dient uitgeschakeld te worden


== sysctl.conf ==
Deze settings moeten worden toegevoegd worden aan sysctl.conf
# Disable IPv6 on internal network
net.ipv6.conf.eth1.disable_ipv6=1
#
# Disable auto generated IPv6 address on eth0
net.ipv6.conf.eth0.autoconf=0
#
# Disable auto generated IPv6 address on eth2
net.ipv6.conf.eth2.autoconf=0
#
# Disable auto generated IPv6 address on eth2
net.ipv6.conf.eth3.autoconf=0


=licentie=
= handleidingen=
De licentie is gekoppeld aan de machine moet opnieuwe gegeneren bij inlab
Deze vind je in de loadbalancer onder support -> Useful Links


= upgrade procedure =
= LET OP : update instructies =
Volgende omschrijft de upgrade procedure voor de loadbalancers.
1. schakel master uit
2. maak snapshot in vmware van master
3. zet master weer aan
4. wacht tot master weer helemaal op is
5. zet slave uit
6. maak snapshot slave
7. zet slave weer aan.
8. maak via web interface backup van alle bestanden en download die op master
9. maak via web interface backup van alle bestanden en download die op slave (zodra slave weer volledig operationeel is)
10. maak slave master (login op slave, vouw groene vlak open en klik op take over)
11. update master via Maintenance -> software update en kies voor online update
12. maak master weer  master (login op slave, vouw groene vlak open en klik op take over) als dat niet al vanzelf is gebeurd
11. update slave via Maintenance -> software update en kies voor online update
12. Zet reminder in OTRS om snap shots te verwijderen na 4 dagen (dit kan terwijl machines online zijn)


  * Download de i386 en amd64 .deb files bij inlab  https://www.inlab.de/balanceng/download.html
== aandachts punten ==
* ga naar backup2bit ga naar de directory /disk/site/hobbynet/www/repo/pool/non-free/b
  1. altijd dienen master en slave direct na elkaar te worden geupdate
* verwijderder de oude deb files ('''Niet rename of wat dan ook ze mogen niet meer in deze dir staan''')
  2. het maken van het snapshot moet gebeuren als de VM uit staat ! dit komt om dat de VM vertraagd wordt tijdens het maken van het snapshot waardoor hij meerdere keren gaat overschakelen naar slave en weer terug.
  * plaats hier de 2 gedownloaden deb files
  3. Mocht de update mislukken kan met paar klikken terug naar het snapshot wat je voor de update hebt gemaakt.
* draai 'mkpackes' om de repostory te updaten
* ga naar lb1 draai bng stop om de loadbalancer te stoppen
* kijk of lb2 het goed heeft overgenomen (bezoek www.hcc.nl)
  * draai 'apt-get update'
* draai 'apt-get dist-upgrade'
* doe 'bng start'
* ga in control modus met 'bng control'
* check of alle targets up zijn met commando 'sh tar'
  Er kunnen altijd een paar targets down zijn of gedisabled maar het overgrote deel moet de status 'operational' hebben
  Het kan soms even duren voor dat alles operational is !
* doe 'sh vrrp', de state moet BACKUP zijn
* herhaal deze procedure voor lb2
* vergeet niet te controleren of hcc.nl werkt
= herinstalatie procedure =
De herinstalatie procedure staat apart beschreven hier [[Herinstallatie Loadbalancer]]

Latest revision as of 10:59, 26 April 2022

doel

De loadbalancer zorgt er voor dat onze webdiensten redundant uitgevoerd worden.

otap

Van de loadbalancers zijn er 2 omgevingen

  1. de productie
  2. de test op deze omgeving draaien alle website die joomla-test en joomla-dev draaien

OPGELET

heel belangrijk de loadbalancer mag je nooit migreren als ze aan staan, hierdoor krijg je een 'split brain' situatie

In tegen stelling tot alle andere vm's staan deze vm's op lokale storage, zo dat er bij onderhoud van iscsi er geen splitbrain en timing issues ontstaan

Dit is dan ook geblokkeerd in vmware zoals omschreven hier https://frankdenneman.nl/2014/08/18/disable-vmotion-single-vm/ met 1 aanpassing query mag wel en vmotion als uit staat mag wel

opzet

We hebben 2 virtuele loadbalancers: loadbalancer1 en loadbalancer2. Elk draait op een andere hypervisor te weten vmware4 en vmware5

normale situatie

Dit geeft weer hoe in normale situaties het verkeer loopt.

File:Normaal.dia

webserver faalt

Dit geeft weer hoe het verkeer loopt wanneer een webserver faalt.

File:Webserverfaalt.dia

loadbalancer faalt

Dit geeft weer hoe het verkeer loopt wanneer een loadbalancer faalt.

File:Lbfaalt.dia

IP plan

212.72.224 IP reeks (eth1)

212.72.224.240 2a02:968:1:2:212:72:224:240  loadbalancer1-vlan100.hobby.nl     (IP adressen voor loadbalancer zelf)
212.72.224.241 2a02:968:1:2:212:72:224:241  loadbalancer2-vlan100.hobby.nl     (IP adressen voor loadbalancer zelf)

212.72.227 IP reeks (eth3)

212.72.227.88 en 2a02:968:1:7:212:72:227:88  loadbalancer1-vlan107.hobby.nl     (IP adressen voor loadbalancer zelf)
212.72.227.89 en 2a02:968:1:7:212:72:227:89  loadbalancer2-vlan107.hobby.nl     (IP adressen voor loadbalancer zelf)

212.72.229 IP reeks (eth2)

212.72.229.240 2a02:968:1:1:212:72:229:240  loadbalancer1-vlan102.hobby.nl     (IP adressen voor loadbalancer zelf)
212.72.229.241 2a02:968:1:1:212:72:229:241  loadbalancer2-vlan102.hobby.nl     (IP adressen voor loadbalancer zelf)

172.31.1 IP reeks (eth0)

172.31.1.240 2a02:968:ffff:999:172:31:1:240  loadbalancer1-vlan999.hobby.nl     (IP adressen voor loadbalancer zelf)
172.31.1.241 2a02:968:ffff:999:172:31:1:241  loadbalancer2-vlan999.hobby.nl     (IP adressen voor loadbalancer zelf)

172.31.254 IP reeks (eth5)

172.31.254.240 2a02:968:ffff:997:172:31:254:240  loadbalancer1-vlan997.hobby.nl     (IP adressen voor loadbalancer zelf)
172.31.254.241 2a02:968:ffff:997:172:31:254:241  loadbalancer2-vlan997.hobby.nl     (IP adressen voor loadbalancer zelf)
dns aliassen

Via interne netwerk zijn de dns aliassen aangemaakt loadbalancer1-int.hobby.nl en loadbalancer2-int.hobby.nl op die manier konden gebruik blijven maken van hobbynet wildcard certificaat.

configuratie

termen

  • Virtual service : De dienst die geloadbalanced wordt (dit kan layer 4 of layer 7 zijn)

Configuratie gebeurt altijd via de webinterface. Enkel bij hele uitzonderlijke gevallen moet je wat via SSH doen.

De loadbalancers zijn te bereiken via:

ssh toegang

SSH keys kunnen toegevoegd worden, dit vereist echter strak formaat namelijk

  ssh-rsa <snip> je key </snip> bas@een.domein.nl

Het is heel belangrijk dat je key in dit formaat is, ook ben je verplicht een hostnaam in te geven, gebruik daarvoor gewoon je naam dit moet namelijk uniek zijn.
Key's mogen niet met de hand worden toegevoegd via SSH !
Je kan in de loadbalancer onder Local Configuration -> SSH Keys en dan het tab SSH Authentication

Configuratie van dit onderdeel moet je op beide loadbalancers doen want dit wordt niet gerepliceerd!

Proxy (layer 7)

Alle website gaan via proxy op de loadbalancer naar de webservers toe.

ssl

SSL wordt getermineerd op loadbalancer, maar het verkeer tussen de loadbalancer en de webserver is versleuteld met ssl, dit gebeurd echter met certificaat gesignend door onze windows CA

cerificaat uploaden

Het heeft mijn voorkeur om een pfx certificaat te gebruiken, dit leverde mijn veel minder gedoe op.

  • ga naar Cluster configuration -> ssl certificate
  • klik op add a new SSL Certificaat

  • 1) kies upload prepared pem/pfx file
  • 2) geeft het certificaat een naam .
  • 3) kies bestand kiezen en kies op je pc het certificaat dat je wil uploaden
  • indien je cert een wachtwoord heeft vul die dan in wanneer er om gevraagd wordt.
  • klik op upload certificaat

note soms gaat uploaden fout doe het dan in privacy window, browser vult namelijk soms verborgen velden in dat geeft problemen

let's encrypt certificaat

Zorg er voor dat layer 7 service is voorbereid zoals hier beschreven Let's encrypt voorbereiden
log in met ssh op de loadbalancer 1 en voor dit commando uit

  /usr/local/sbin/lb-letsencrypt-bas.sh -i -p 443 -h 8888 -d domein naam -f loadbalancer@hobby.nl -t beheer@hobby.nl -r smtp.bit.nl -U loadbalancer -P ********

dit zorgt er voor dat een lets's encrypt certificaat wordt aangevraagd voor dit domein en wordt ge upload, ook maak dit script automatisch een cron entry aan om het certificaat te verlengen

standaard setup

Standaard gebruiken wij een setup waarbij altijd de load over meerdere servers verspreid wordt

instellen van Virtual service layer 7

van scratch

Ga naar cluster configuration -> layer 7 - virtual services en klik daar op 'Add a new Virtual Service'

  • 1) Vul hier de naam van virtual service in. Standaard is dat VIP(nr) naam.url.nl-v4 (of v6 bij IPv6) (let op: geen spatie tussen vip en het nummer van de vip)
  • 2) Het IP-adres wat aan de buitenkant wordt gebruikt
  • 3) De poort nummers voor web standaard 80 je mag meer poort nummers opgeven door te scheiden met een (altijd alleen 80 ook bij een https site).

Klik op update

Herhaal de bovenstaande stappen voor het IPv6 adres

Nu moeten we nog bestemming toevoegen : waar moet het verkeer naar toe worden gerouteerd.

Ga naar cluster configuration -> layer 7 - Real Servers Zoek daar je Virtual service op en klik op modify

Tip je standaard staat de Virtual service die je net hebt gemaakt onderaan Klik op 'Add a new Real Server" bij de Virtual service die we net hebben aangemaakt

  • 1) Zet naam van de bestemming neer dit geval users-lb1-v4 (of v6 bij IPv6)
  • 2) Vul het IP-adres van de bestemming in
  • 3) vul hier 443 in (ja 443 en geen 80, het verkeer tussen loadbalancer en webserver is ssl versleuteld)
  • 4) vink re-encrypt to backend aan, dit zorgt dat verkeer tussen loadbalancer en webserver wordt versleuteld
  • 5) Klik op update

  • Herhaal dit voor alle 2 resterende loadbalanced webservers
  • Uiteraard moet je dit ook voor ipv6 versie doen, alleen gebruik je dan IPv6 adressen!

voor bereiden voor lets encrypt

Indien voor het domein een let's encrypt certificaat aangevraagd moet worden moet er een een extra setting gedaan worden.

  • ga naar Cluster Configuration -> layer 7 - Virtual Services .
  • zoek de vip op waar bij certificaat word aangevraagd.
  • klik op modify
  • zoek ACL rules op en klik op edit ACL Rules

  • 1) kies rule type path_beg
  • 2) Boolean Equals
  • 3) URL text/ip /.well-known/acme-challenge/
  • 4) Rule action type backend
  • 5) Redirect Location letsencrypt

Als je dit alles hebt gedaan moet de ha proxy config op nieuw ingeladen worden. kilk op reload haproxy


Vraag nu het certificaat aan zoals beschreven hier let's encrypt certificaat

SSL configuren (stunnel)

Om te zorgen dat we ssl certificaat kopelen aan onze layer 7 servive moet dat als volgt doen :

  • ga naar Cluster Configuration -> ssl terminiation
  • klik op add new virtual service
  • 1) kies uit de pull down de VIP waar ssl aangekopeld moet worden
  • 2) kies bij ssl operaation mode voor High Security
  • 3) kies het juist ssl certificaat
  • 4) kies update

Hier na moet stunnel en haproxy herladen worden

  • klik eerst op system overview zodat je ziet dat beide herladen moet worden
  • klik eerst op reload stunnel
  • Klik reload haproxy

.

Direct routing (layer 4)

Op dit moment maken we nog gebruik van direct routing voor alle niet website gerelateerde zaken. Behalve

  • redirect server
  • xml server
  • mail server

standaard setup

Standaard gebruiken wij een setup waarbij altijd de load over meerdere servers verspreid wordt

instellen van Virtual service layer 4

van scratch

Ga naar cluster configuration -> layer 4 - virtual services en klik daar op 'Add a new Virtual Service'

  • 1) Vul hier de naam van virtual service in. Standaard is dat VIP(nr)-v4_naam.url.nl (of v6 bij IPv6) (let op: geen spatie tussen vip en het nummer van de vip)
  • 2) Het IP-adres wat aan de buitenkant wordt gebruikt
  • 3) De poort nummers voor web standaard 80,443 je mag meer poort nummers opgeven door te scheiden met een ,

Klik op update

Herhaal de bovenstaande stappen voor het IPv6 adres

Nu moeten we nog bestemming toevoegen : waar moet het verkeer naar toe worden gerouteerd.

Ga naar cluster configuration -> layer 4 - Real Servers
Zoek daar je Virtual service op en klik op modify

Tip je standaard staat de Virtual service die je net hebt gemaakt onderaan
Klik op 'Add a new Real Server" bij de Virtual service die we net hebben aangemaakt

  • 1) Zet naam van de bestemming neer dit geval Joomla-lb1-v4 (of v6 bij IPv6)
  • 2) Vul het IP-adres van de bestemming in
  • 3) Klik op update

Indien het hier geen fallback scenario betreft herhaal de bovenstaande stap voor de 2e bestemming

Herhaal deze stappen voor IPv6 virtual service

Persistence mode

Om te zorgen dat verkeer van 1 gebruiker bij de zelfde server uit komt moet de persistence op source ip ingesteld worden. We hebben het in verleden geprobeerd met applicatie cookie of een http cookie, maar dit gaf sessie problemen daarom gebruiken we nu voor alle sites source ip

Ga terug naar cluster configuration -> layer 4 - virtual services, zoek je virtual service op en klik op modify onder Kopje Persistence zet je mode op Source IP

fallback scenario

Bij fallback senario wil je dat verkeer standaard op 1e server uitkomt, behalve wanneer deze er niet is. Bijvoorbeeld bij mail en de xml-rpc server, in dit geval voeg je geen 2e realserver toe.

Ga terug naar cluster configuration -> layer 4 - virtual services, zoek je virtual service op en klik op modify
TIP boven in zit zoek veld

  • Zoek de sectie 'Fallback Server' op
  • Vul het IP-adres in van de fallback server in, laat de overige velden leeg
  • klik op update

Herhaal deze stappen voor IPv6 virtual service

bestaande virtual service kopiëren

Maar dit alles kan ook veel makkelijker, als er alleen vip is die de zelfde bestemming heeft etc etc

Ga terug naar cluster configuration -> layer 4 - virtual services, zoek je virtual service op die je kopiëren en klik op modify
Zie afbeelding 5 rechts
Klik op Duplicate service

Negeer de waarschuwing is melding dat toevoeging heeft gedaan zodat er geen dubbele namen zijn

  • 1) Vervang hier de naam van virtual service. Standaard is dat VIP(nr) naam.url.nl-v4 (of v6 bij IPv6) (let op : geen spatie tussen vip en het nummer van de vip)
  • 2) Vervang het IP-adres wat aan de buitenkant wordt gebruikt
  • 3) Controleer de poortnummers voor web standaard 80,443 je mag meer poortnummers opgeven door te scheiden met een ,

Klik op update
Herhaal deze stappen voor IPv6 virtual service

firewall lock down script

Het standaard lockdownscript (de term die in de loadbalancer wordt gebruikt) is aangepast met de volgende de aanpassingen:

  • Onze VPN IP-reeksen toegevoegd als admin reeksen
  • Voor SNMP is aparte chain aangemaakt
  • Al het SNMP verkeer dat niet het IP-adres (eth0) van de loadbalancer is wordt gereject

Hier vindt je kopie van het huidige lockdown script van 28-09-2020 10:00 File:Lockdownscript.txt Dit script kan je bewerken via Maintenance -> Firewall Lock Down Wizzard
Met 'Modify the firewall lock down wizard script' pas je het script aan.
Met 'Update Firewall lockdown' wordt het de firewall herladen
Standaard wordt het IP-adres waarmee je bent ingelogd ingevuld bij 'Administration subnet'. Dit is om te zorgen dat je er altijd weer in kan als je een foutje hebt gemaakt.

Configuratie van dit onderdeel moet je op beide loadbalancers doen want dit wordt niet gerepliceerd!

backup

Elke dag backuppen we om 22:00

ssh_config aanpassing

Omdat de loadbalancer heel veel IP-adressen heeft zou het script ad random een IP-adres uitzoeken en dat gaat natuurlijk fout. Daarom hebben we een source IP-adres gespecificeerd. In /etc/ssh/ssh_config zijn daarom volgende regels toegevoegd:

host backup2bit-int.hobby.nl
        BindAddress=2a02:968:ffff:999:172:31:1:240

Verder wordt standaard script dat ook logging draait gebruikt voor de backup /usr/local/hobbynet/bin/backup_etc

Vmware image backup maken

  1. zet de slave loadbalancer uit om splitbrain te voorkomen
  2. Clone de master naar vmware3 storage zet de datum in naam virtuele machine in omgekeerde volgorde dus bij voorbeeld 2021-09-23
  3. Clone de slave naar vmware3 storage zet de datum in naam virtuele machine in omgekeerde volgorde dus bij voorbeeld 2021-09-23
  4. Start slave loadbalancer
  5. gooi oude backup images weg
  6. converteer machines naar template in rechter muis knop menu template -> convert to template
  7. Wil je ook nog locale kopie Liever niet convert to ovf template

De vuist regel is we bewaren de vorige versie van voor de actie en na de actie. tenzij de vorige backup jonger is dan 1 maand

Certificaat vervangen

  1. Op de webinterface ga naar cluster configuration -> SSL Certificaten Upload het certificaat via gui onder een tijdelijke naam bv. ster_hcc_nl.
  2. Login met ssh op loadbalancer
  3. ga naar directory /etc/loadbalancer.org/certs/
  4. hier staan directory's van alle certificaten, in elke directory staat 1 pem bestand met de zelfde naam als directory (en dus ook certnaam)
  5. Dit bestand kopieer naar de directory van cert dat je wil vervangen en gebruikt dan ook de bestaande naam.
  6. hier na kopieer je dit bestand ook naar de lbslave.
  7. daarna ga je weer na de gui
  8. dan ga je naar maintenance -> restart services
  9. je kies voor reload Stunnel en daarna voor reload haproxy
  10. Vergeet niet het TSLA record in dns te update (https://ssl-tools.net/tlsa-generator)



handleidingen

Deze vind je in de loadbalancer onder support -> Useful Links

LET OP : update instructies

1. schakel master uit 
2. maak snapshot in vmware van master
3. zet master weer aan 
4. wacht tot master weer helemaal op is
5. zet slave uit 
6. maak snapshot slave
7. zet slave weer aan. 
8. maak via web interface backup van alle bestanden en download die op master
9. maak via web interface backup van alle bestanden en download die op slave (zodra slave weer volledig operationeel is)
10. maak slave master (login op slave, vouw groene vlak open en klik op take over)
11. update master via Maintenance -> software update en kies voor online update
12. maak master weer  master (login op slave, vouw groene vlak open en klik op take over) als dat niet al vanzelf is gebeurd
11. update slave via Maintenance -> software update en kies voor online update
12. Zet reminder in OTRS om snap shots te verwijderen na 4 dagen (dit kan terwijl machines online zijn)

aandachts punten

1. altijd dienen master en slave direct na elkaar te worden geupdate
2. het maken van het snapshot moet gebeuren als de VM uit staat ! dit komt om dat de VM vertraagd wordt tijdens het maken van het snapshot waardoor hij meerdere keren gaat overschakelen naar slave en weer terug.
3. Mocht de update mislukken kan met paar klikken terug naar het snapshot wat je voor de update hebt gemaakt.