Visualiser une révision

[Tuto/HowTo] HaProxy - bloquer les serveurs renvoyant des erreurs HTTP

voxdemonix : infernalis creatorem (29 août 2018 13:53:57)

Introduction
============

Par défaut HaProxy ne vérifie que la présence en ligne ou non des serveurs web, pas les erreurs renvoyées dans les en-têtes.
Ainsi, un serveur non fonctionnel suite à un problème de montage ou d'accès à la base de données sera considéré comme "_UP_" et les requêtes réseaux continueront d'être acheminées, provoquant moult mécontentements chez vos utilisateurs qui pourraient se retrouver spammer de notification d'erreur sur leur smartphone chéri.
Néanmoins, HaProxy permet, via des paramètres côté _Backend_, de résoudre ce problème et de bloquer les serveurs _Backend_ en fonction des [headers HTTP](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields) qu'ils renvoient lors des checks. Ainsi si un serveur renvoi une erreur à un client lambda, HaProxy ne bronchera pas. Il faut que l'erreur soit renvoyée durant le check de HaProxy pour que le changement de status soit pris en compte.



#### Bloquer toutes les [erreurs 5xx](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_Server_errors)

La ligne suivante, à ajouter dans la section backend, acceptera tout les serveurs sauf ceux renvoyant une erreur HTTP comprise entre 500 et 599.
Note : ce paramètre est fortement conseillé pour éliminer les nœuds qui plantent dans des grappes de cluster web.

```
http-check expect ! rstatus ^5
```

Par exemple :

```
backend serveur_web
        mode http
        balance roundrobin
        option forwardfor
        option httpchk HEAD /haproxytest.txt HTTP/1.0
        cookie SERVERID insert indirect nocache
	http-check expect ! rstatus ^5
        server serverOne serverOne:80 cookie serverOne check
	server serverTwo serverTwo:80 cookie serverTwo check
```