Funktioniert dieses HAProxy-Skript zum Neustart so elegant, wie ich es mir vorstelle?

9

Ich habe dieses Skript an verschiedenen Stellen zusammengestellt. Was ich hoffe ist, dass es nach dem Ausführen Folgendes tun wird:

  1. Unterbrechen Sie den gesamten "NEUEN" http-Verkehr für die Ports 80 und 443 - "pausieren" Sie sie einfach, geben Sie keinen Fehler aus
  2. Starten Sie haproxy ordnungsgemäß neu, wenn alle "in Bearbeitung" -Anforderungen abgeschlossen sind
  3. Unterbrechen Sie den http-Verkehr und fahren Sie wie gewohnt fort.

Wird es so laufen? Habe ich etwas verpasst Wir haben Tausende von ACL-Regeln basierend auf IP, die in einer Datei gespeichert sind, auf die Haproxy verweist, und wir müssen sie mehrmals pro Minute neu laden.

#!/bin/sh

# hold/pause new requests
iptables -I INPUT -p tcp --dport 80 --syn -j DROP
iptables -I INPUT -p tcp --dport 443 --syn -j DROP
sleep 1

# gracefully restart haproxy
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)

# allow new requests to come in again
iptables -D INPUT -p tcp --dport 80 --syn -j DROP
iptables -D INPUT -p tcp --dport 443 --syn -j DROP

Bearbeiten: Ich würde es gerne irgendwie testen, aber wir haben noch keinen Datenverkehr (mit Ausnahme von mir testen).

Quellen:

http://www.forouzani.com/reload-haproxy-cfg-without-restarting.html

https://github.com/Mirantis/openstack-lbaas/issues/3

HAProxy ordnungsgemäßes Neuladen ohne Paketverlust

Mike Curry
quelle

Antworten:

4

Basierend auf diesen Artikeln sollte es gut funktionieren.

Denken Sie daran, dass Sie nicht über den Datenverkehr verfügen, den Sie jederzeit emulieren können.

Verwenden Sie das Apache-Benchmark- Tool, um gefälschten Datenverkehr zu platzieren.

Stellen Sie einfach sicher, dass das Laden der Seite, die Sie laden, einige Sekunden dauert, um das Worst-Case-Szenario zu testen.

Ich habe für Sie ein Kochbuch erstellt , das beweist, dass die von Ihnen bereitgestellte Konfiguration richtig funktioniert.

Tk421
quelle