Magazine High tech

Nginx en tant que LoadBalancer

Publié le 10 août 2012 par Lmns972 @guestblog

Nginx LoadBalancer

Voila depuis peu le blog est servi par le serveur http sorti de russie . Nginx peut être utilisé en tant que LoadBalancer

L’architecture est plutôt des plus classique :

  • LB Nginx
  • 2 serveurs web Apache

Si vous utilisez xen pour vos tests . Création des VMs

xen-create-image --hostname=http1.madinina.lan --size=10Gb --ip=10.10.10.30 --memory=128Mb --dist=squeeze --arch=i386
xen-create-image --hostname=http2.madinina.lan --size=10Gb --ip=10.10.10.31 --memory=128Mb --dist=squeeze --arch=i386

Modification de votre sources.list

deb http://nginx.org/packages/debian/ squeeze nginx
deb-src http://nginx.org/packages/debian/ squeeze nginx

Installation

apt-get update
apt-get install nginx

Sur les 2 serveurs Apache une installation de apache2 et finit .

Configuration de Nginx (nginx.conf)

    include /etc/nginx/sites-enable/*;

Configuration des upstreams

cd /etc/nginx/sites-available

upstream www.madinina.lan  {
  server 10.10.10.30:80 ;
  server 10.10.10.31:80 ; 
}

server {
  location / {
   proxy_pass  http://www.madinina.lan;
  }
}

La configuration est relativement simple on définit

  • Les upstream => IP ou noms de vos serveurs apache : Port de destination
  • Proxy_pass => URL qui sera appelée

N’oubliez pas le lien symbolique dans sites-enable . Puis un restart de Nginx . Pas trop fatigué ?

Votre loadbalancing est en place rien d’extraordinaire jusque la . Mais regardons un peu les logs .

10.10.10.22 - - [09/Aug/2012:03:21:58 +0200] "GET / HTTP/1.0" 200 455 "-" "Lynx/2.8.8dev.5 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.8.6"
10.10.10.22 - - [09/Aug/2012:03:25:04 +0200] "GET / HTTP/1.0" 200 459 "-" "Wget/1.12 (linux-gnu)"
10.10.10.22 - - [09/Aug/2012:03:26:25 +0200] "GET / HTTP/1.0" 200 455 "-" "Lynx/2.8.8dev.5 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.8.6"
10.10.10.22 - - [09/Aug/2012:03:27:17 +0200] "GET / HTTP/1.0" 200 455 "-" "Lynx/2.8.8dev.5 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.8.6"
10.10.10.22 - - [09/Aug/2012:03:29:34 +0200] "GET / HTTP/1.0" 200 455 "-" "Lynx/2.8.8dev.5 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.8.6"

On se retrouve avec l’ip de notre reverse (nginx) . Vous comprendrez bien que si vous voulez faire des stats ou un peu de debug ca va être compliqué .
Alors pour corriger cela il faut dans un premier temps rediriger certaines entetes vers les serveurs en backend (apache) .

La nouvelle configuration

server {
  location / {
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass  http://www.madinina.lan;
  }
}
  • Proxy_set_header => Permets de modifier les entêtes voir la doc

Il faut maintenant ajouter le modules RPAF (Reverse Proxy Add Forward)  sur les apache . C’est toujours aussi compliqué .

apt-get install libapache2-mod-rpaf

Il faut modifier le fichier de conf rpaf.

/etc/apache2/mods-enabled# cat rpaf.conf 
<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 10.10.10.22 xx.xx.xx.xx yy.yy.yy.yy
</IfModule>

Il faut mettre l’ip du reverse. Dans les logs vous aurez maintenant l’ip du client et non plus celle du reverse. Avec un peu de persistance cela ne serait-il pas mieux ? L’algorithme de LoadBalancing qui le permets est ip_hash

upstream www.madinina.lan  {
  ip_hash;
  server 10.10.10.30:80 ;
  server 10.10.10.31:80 ; 
}

Par contre je ne sais pas si il est possible de paramétrer un timeout (comme sur Keepalived) .

D’autres options sont disponible comme la mise en place d’un poids par exemple . Je vous laisse étudier les autres possibilités.

CONCLUSION

Nginx permets de mettre en place un LoadBalancer HTTP/HTTPS très rapidement et de façon très simple.

Vous pouvez également utiliser la suite Keepalived pour ce type d’architecture . L’avantage que présente NGINX par rapport à Keepalived est la mise en cache (même si nous n’avons pas vu ce point).

Bien-sur si vous voulez mettre en place un LB sur des ports autre que HTTP/HTTPS vous ne pourrez pas utiliser NGINX mais Keepalived est la bonne alternative .

Dans le cas ou vous voulez mettre NGINX pour du LoadBalancing SMTP lisez ceci

:)

J’espère pouvoir faire enfin l’article sur keepalived depuis le temps que je le dis .

Nginx en tant que LoadBalancer

Like this post? Tip me with bitcoin!

1DeZugB51WKGZumnW8rEMSvzZtzUrd28sm

If you enjoyed reading this post, please consider tipping me using Bitcoin. Each post gets its own unique Bitcoin address so by tipping you're not only making my continued efforts possible but telling me what you liked.

Powered by Bitcoin Tips

Retour à La Une de Logo Paperblog

A propos de l’auteur


Lmns972 3 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte