web-dev-qa-db-fra.com

Comment puis-je supprimer un nœud équilibré de haproxy via la ligne de commande?

J'ai haproxy en cours d'exécution comme équilibreur de charge et à partir de l'interface Web de statistiques fournie avec haproxy, je peux mettre un serveur Web en mode de maintenance (et le réactiver) - ce qui est génial!

Cependant, je souhaite également pouvoir effectuer la même action à partir de la ligne de commande (pour une utilisation dans certains workflows de déploiement automatisé). Est-ce possible, et si oui comment?

Merci beaucoup

46
isNaN1247

Mise à jour (28 août 2012): J'ai maintenant tendance à utiliser haproxyctl de nos jours, qui utilise les méthodes décrites ci-dessous.


Je l'ai corrigé après un peu plus de recherche, pour toute autre personne ayant le même problème: -

Vous pouvez ajouter un socket Unix dans votre configuration, puis interagir avec cela ( voici les commandes possibles ).

Installer:

Sudo nano /etc/haproxy/haproxy.cfg

Dans votre section "globale", ajoutez:

stats socket /etc/haproxy/haproxysock level admin

Redémarrez votre démon haproxy (par exemple Sudo service haproxy restart)

Maintenant, vous avez besoin de socat (si vous ne l'avez pas, juste apt-get install socat sur Ubuntu).

Il ne vous reste plus qu'à lancer cette commande pour supprimer un nœud:

echo "disable server yourbackendname/yourservername" | socat stdio /etc/haproxy/haproxysock

Pour le réactiver, remplacez disable par enable dans la commande ci-dessus.

60
isNaN1247

En plus de la méthode d'écho de beardwizzle, vous pouvez également le faire de manière interactive:

root@ny-lb01:/etc/haproxy# Sudo socat readline /var/run/haproxy.stat 

Prompt
> set timeout cli 1d
> disable server foo/web01
> help
Unknown command. Please enter one of the following commands only :
  clear counters : clear max statistics counters (add 'all' for all counters)
  clear table    : remove an entry from a table
  help           : this message
  Prompt         : toggle interactive mode with Prompt
  quit           : disconnect
  show info      : report information about the running process
  show stat      : report counters for each proxy and server
  show errors    : report last request and response errors for each proxy
  show sess [id] : report the list of current sessions or dump this session
  show table [id]: report table usage stats or dump this table's contents
  get weight     : report a server's current weight
  set weight     : change a server's weight
  set timeout    : change a timeout setting
  disable server : set a server in maintenance mode
  enable server  : re-enable a server that was previously in maintenance mode
21
Kyle Brandt

Si vous n'avez accès qu'à netcat (nc), vous pouvez l'utiliser pour interagir avec le fichier socket de HAProxy de la même manière que socat.

$ echo "show info" | nc -U /var/lib/haproxy/stats | head -10
Name: HAProxy
Version: 1.5.2
Release_date: 2014/07/12
Nbproc: 1
Process_num: 1
Pid: 29745
Uptime: 0d 0h14m35s
Uptime_sec: 875
Memmax_MB: 0
Ulimit-n: 8034

Pour désactiver un serveur:

$ echo "enable server bk_dservers/ds02" | nc -U /var/lib/haproxy/stats

Veillez à ce que le fichier socket ait le niveau d'accès approprié pour effectuer les opérations ci-dessus. Principalement quelque chose comme ça:

stats       socket /var/lib/haproxy/stats level admin

Sinon, vous obtiendrez des erreurs d'autorisation refusée:

$ echo "disable server bk_dservers/ds02" | nc -U /var/lib/haproxy/stats
Permission denied

$

Références

7
slm

La manière la plus simple est:

1 - Configurez votre serveur Web pour renvoyer le code 503 si un fichier nommé maintenance.html (par exemple) existe. Avec Apache, vous pouvez le faire comme suit:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{ENV:REDIRECT_STATUS} !=503
  RewriteCond "/var/www/maintenance.html" -f
  RewriteRule ^(.*)$ /$1 [R=503,L]
</IfModule>

2 - Configurez votre backend haproxy pour vérifier une URL au lieu de ne vérifier qu'un port comme suit:

backend site
    balance roundrobin
    option httpchk GET /index.html
    server myserver1.example.com 192.0.2.1:80 cookie S1 check inter 2000 fall 3
    server myserver2.example.com 192.0.2.2:80 cookie S2 check inter 2000 fall 3

3 - Redémarrez votre serveur Web et votre équilibreur de charge.

4 - Mettez votre serveur Web en mode maintenance.

touch /var/www/maintenance.html

5 - Supprimez votre serveur Web du mode maintenance.

rm -f /var/www/maintenance.html
7
mijhael3000

Vous pouvez également "supprimer" temporairement la page de vérification de l'état d'un serveur, pour arrêter le point de terminaison, puis publier votre application.

2
rafael oliveira

Si vous avez debian, readline ne fonctionne pas, netcat est une meilleure option pour l'interactivité:

user@server:/etc/haproxy$ Sudo nc -U /etc/haproxy/haproxysock
Prompt
> show info
Name: HAProxy
Version: 1.7.11-1ppa1~xenial
Release_date: 2018/04/30
Nbproc: 1
Process_num: 1
Pid: 12307
Uptime: 0d 10h33m22s
...

Non interactif:

echo "show info;show stat" | Sudo nc -U /etc/haproxy/haproxysock
0
wjenkins9