Recherche de site Web

Comment configurer l'équilibrage de charge Nginx


À propos de l'équilibrage de charge

La répartition de charge est un mécanisme utile pour distribuer le trafic entrant entre plusieurs serveurs privés virtuels capables. En répartissant le mécanisme de traitement sur plusieurs machines, une redondance est fournie à l'application -- assurant la tolérance aux pannes et une stabilité accrue. L'algorithme Round Robin pour la répartition de charge envoie les visiteurs vers l'une des adresses IP d'un ensemble. À son niveau le plus basique, le Round Robin, qui est assez facile à mettre en œuvre, distribue la charge du serveur sans tenir compte de facteurs plus nuancés tels que le temps de réponse du serveur et la région géographique des visiteurs.

Configuration

Les étapes de ce tutoriel nécessitent que l'utilisateur dispose des privilèges root sur votre VPS. Vous pouvez voir comment le configurer dans le tutoriel des utilisateurs.

Avant de configurer le load balancing nginx, vous devez avoir nginx installé sur votre VPS. Vous pouvez l’installer rapidement avec apt-get :

sudo apt-get install nginx

Module en amont

Afin de mettre en place un équilibreur de charge round robin, nous devrons utiliser le module upstream de nginx. Nous intégrerons la configuration dans les paramètres de nginx.

Allez-y et ouvrez la configuration de votre site web (dans mes exemples, je travaillerai simplement à partir de l'hôte virtuel par défaut générique) :

sudo nano /etc/nginx/sites-available/default

Nous devons ajouter la configuration de l'équilibrage de charge au fichier.

Tout d'abord, nous devons inclure le module en amont qui ressemble à ceci :

upstream backend  {
  server backend1.example.com;
  server backend2.example.com;
  server backend3.example.com;
}

Nous devrions ensuite faire référence au module plus loin dans la configuration :

 server {
  location / {
    proxy_pass  http://backend;
  }
}

Redémarrer nginx :

sudo service nginx restart

Tant que vous avez tous les serveurs privés virtuels en place, vous devriez maintenant constater que le répartiteur de charge commencera à distribuer les visiteurs de manière égale aux serveurs liés.

Directives

La section précédente expliquait comment répartir également la charge sur plusieurs serveurs virtuels. Cependant, il y a de nombreuses raisons pour lesquelles cela peut ne pas être la manière la plus efficace de travailler avec les données. Il existe plusieurs directives que nous pouvons utiliser pour orienter les visiteurs du site plus efficacement.

Poids

Une façon de commencer à attribuer les utilisateurs aux serveurs avec plus de précision est d'attribuer un poids spécifique à certaines machines. Nginx nous permet d'assigner un nombre spécifiant la proportion de trafic qui devrait être dirigée vers chaque serveur.

Une configuration équilibrée en charge incluant le poids des serveurs pourrait ressembler à ceci :

upstream backend  {
  server backend1.example.com weight=1;
  server backend2.example.com weight=2;
  server backend3.example.com weight=4;
}

Le poids par défaut est de 1. Avec un poids de 2, backend2.example recevra deux fois plus de trafic que backend1, et backend3, avec un poids de 4, recevra deux fois plus de trafic que backend2 et quatre fois plus que backend1.

Hachis

Le hachage IP permet aux serveurs de répondre aux clients en fonction de leur adresse IP, renvoyant les visiteurs vers le même VPS à chaque fois qu'ils visitent (sauf si ce serveur est en panne). Si un serveur est connu pour être inactif, il doit être marqué comme en panne. Toutes les adresses IP qui devaient être dirigées vers le serveur en panne sont alors orientées vers un autre serveur.

La configuration ci-dessous fournit un exemple :

upstream backend {
  ip_hash;
  server   backend1.example.com;
  server   backend2.example.com;
  server   backend3.example.com  down;
 }

Max échoue

Selon les paramètres par défaut du round robin, nginx continuera d'envoyer des données aux serveurs privés virtuels, même si les serveurs ne répondent pas. Le nombre maximum d'échecs peut automatiquement empêcher cela en rendant les serveurs non réactifs inopérants pendant une durée déterminée.

Il existe deux facteurs associés aux échecs maximum : max_fails et fall_timeout. Max fails fait référence au nombre maximum de tentatives échouées pour se connecter à un serveur avant qu'il soit considéré comme inactif. Fall_timeout spécifie la durée pendant laquelle le serveur est considéré comme inopérant. Une fois le temps écoulé, de nouvelles tentatives pour atteindre le serveur recommenceront. La valeur de délai par défaut est de 10 secondes.

Une configuration d'exemple pourrait ressembler à ceci :

upstream backend  {
  server backend1.example.com max_fails=3  fail_timeout=15s;
  server backend2.example.com weight=2;
  server backend3.example.com weight=4;

Voir plus

Ceci a été un bref aperçu de l'équilibrage de charge simple Round Robin. De plus, il existe d'autres façons d'accélérer et d'optimiser un serveur :

  • Comment configurer Nginx en tant que proxy frontal pour Apache
  • Comment installer et configurer Varnish avec Apache sur Ubuntu 12.04
  • Comment installer et utiliser Memcache sur Ubuntu 12.04