Tôi đặt kịch bản này cùng nhau từ nhiều nơi khác nhau. Những gì tôi đang hy vọng là nó sẽ làm như sau khi chạy:
- Tạm dừng tất cả lưu lượng truy cập http "MỚI" cho các cổng 80 và 443 - chỉ cần "tạm dừng" chúng, không đưa ra bất kỳ lỗi nào
- khởi động lại haproxy một cách duyên dáng khi tất cả các yêu cầu "đang xử lý" được hoàn thành
- Hủy tạm dừng lưu lượng http và tiếp tục kinh doanh như bình thường.
Đây có phải là cách nó sẽ chạy? Tôi có bỏ lỡ điều gì không? Chúng tôi có hàng ngàn quy tắc acl dựa trên ip, được lưu trữ trong một tệp có tham chiếu haproxy và chúng tôi cần tải lại nhiều lần trong một phút.
#!/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
Chỉnh sửa: Tôi muốn thử nghiệm bằng cách nào đó, nhưng chúng tôi chưa có bất kỳ lưu lượng truy cập nào (ngoại trừ thử nghiệm của tôi).
Nguồn:
http://www.forouzani.com/reload-haproxy-cfg-without-restarting.html