이 스크립트를 여러 곳에 모았습니다. 내가 바라는 것은 다음과 같이 한 번 실행됩니다.
- 포트 80 및 443에 대해 모든 "NEW"http 트래픽을 일시 중지합니다. 포트를 "일시 중지"하면 오류가 발생하지 않습니다.
- 모든 "진행 중"요청이 완료되면 haproxy를 정상적으로 다시 시작하십시오.
- http 트래픽을 일시 중지하고 평소대로 비즈니스를 계속하십시오.
이것이 어떻게 작동합니까? 내가 놓친 것이 있습니까? 우리는 ip를 기반으로 수천 개의 acl 규칙을 가지고 있으며, haproxy가 참조하는 파일에 저장되어 있으며 1 분에 여러 번 다시로드해야합니다.
#!/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