Vincent Lammens

↶ Terug

Apache load balancer tutorial

Datum: 2020/04/19

Met apache’s mod_proxy kan je instellen dat 1 server als load balancer dient om het verkeer te verdelen over verschillende servers.

De setup

Ik ga hier gebruik maken van 4 verschillende docker-containers, als substituut voor 4 servers:

(in de container van ws2 word poort 80 van de container gemapt aan poort 90 van de host, in een setup waar alle 4 de containers een eigen ip krijgen, hoeft dit uiteraard niet.)

De webservers zullen in dit geval over dezelfde html-bestanden beschikken door middel van een gedeeld volume, gekoppeld op /wwwdata/.

De webservers configureren (ws1 en ws2)

Ik ga in dit geval een lamp server instellen, maar op ws2 geen database. (de database zou in princype op een aparte server kunnen staan.

Apache en php zijn eenvoudig te installeren met het volgende commando:

apt install apache2 -y;
service apache start;
apt install php libapache2-mod-php php-mysql;
service apache2 restart; 

De databaseserver configureren

om MySQL is ook weer eenvoudig te installeren met volgend commando:

apt install mysql-server -y;
mysql_secure_installation

Het 2e commando dient om mysql veilig in te stellen, volg de stappen, maar zorg ervoor dat root van elders kan inloggen (of maak achteraf een andere gebruiker aan die dat kan)

Nu kan je de website op de webservers plaatsen, ik ga ter demonstratie gewoon het phpinfo script gebruiken, en verander ik de default document-root aan zodat deze klopt met de gesynchroniseerde map. Dit doe je door op bijde servers, het bestand /etc/apache2/sites-enabled/000-default.conf de regel DocumentRoot ... aan te passen zodat de map klopt met de gesynchroniseerde map.

De loadbalancer instellen

Omdat de loadbalancer ook gebruik gaat maken van apache, maar niet van php kan je het volgende commando gebruiken om het te installeren

apt install apache2 -y;
service apache start;
a2enmod proxy proxy_http;
service apache2 restart;

Dan moeten we de virtualhost aanpassen, net zoals bij de webservers, open het bestand /etc/apache2/sites-enabled/000-default.conf , verwijder de huidige inhoud en voeg er het volgende aan toe:

<VirtualHost *:80>
	ProxyPass "/" "balancer://mycluster/" stickysession=JSESSIONID|jsessionid nofailover=On
	
	<Proxy "balancer://mycluster/">
		BalancerMember ajp://1.2.3.4
		BalancerMember ajp://2.3.4.5
	</Proxy>
	
</VirtualHost>

Nu moet je apache nog eens restarten: service apache2 restart, en dan zou het verkeer moeten gesplitst worden over de 2 servers.

Zo, niet zo ingewikkeld om een multi-server webserver cluster op te stellen.