Будет ли этот сценарий перезапуска HAProxy работать так же элегантно, как я думаю?

9

Я собрал этот сценарий из разных мест. Я надеюсь, что после запуска будет выполнено следующее:

  1. Приостановите весь «НОВЫЙ» http-трафик для портов 80 и 443 - просто «приостановите» их, не выдавайте ошибок
  2. изящно перезапустите haproxy, когда все запросы «в процессе» будут выполнены
  3. Отключите http-трафик и продолжайте работать как обычно.

Это так будет работать? Я что-то пропустил? У нас есть тысячи правил acl, основанных на ip, которые хранятся в файле с ссылками на haproxy, и мы должны перезагружать его несколько раз в минуту.

#!/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

Изменить: Я хотел бы как-то проверить это, но у нас пока нет трафика (за исключением моего тестирования).

Источники:

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

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

Изящная перезагрузка HAProxy с нулевой потерей пакетов

Майк Карри
источник

Ответы:

4

Исходя из этих статей, он должен работать нормально.

Просто помните, что у вас нет трафика, вы всегда можете подражать ему.

Используйте Apache Benchmark Tool, чтобы добавить фальшивый трафик.

Просто убедитесь, что загружаемая страница загружается в течение нескольких секунд, чтобы протестировать худший вариант.

Я создал для вас кулинарную книгу, которая доказывает, что предоставленная вами конфигурация работает правильно.

Tk421
источник