17 điểm bởi xguru 2022-01-06 | 1 bình luận | Chia sẻ qua WhatsApp
  • Cách nâng cấp mà Nginx sử dụng

→ thay thế tệp thực thi của bản gốc bằng tệp mới

→ gửi tín hiệu USR2 tới tiến trình master

→ tiến trình master đổi tên tệp PID của chính nó sang phần mở rộng .oldbin

→ khởi chạy tệp thực thi mới để tạo các tiến trình worker mới

→ tất cả các tiến trình worker bắt đầu nhận request

→ khi tín hiệu WINCH được gửi tới tiến trình master đầu tiên, nó sẽ yêu cầu các tiến trình worker của mình thoát một cách bình thường

  • Tiến trình master hiện có không đóng listen socket và khi cần vẫn có thể tạo lại các tiến trình worker

  • Nếu tiến trình master mới không hoạt động đúng cách

→ gửi tín hiệu HUP tới tiến trình master cũ để nó khởi động các tiến trình worker mới, sau khi các worker của master mới kết thúc thì gửi QUIT tới master mới để dừng nó

→ gửi tín hiệu TERM tới tiến trình master mới để yêu cầu các tiến trình worker hiện tại dừng ngay lập tức. Nếu master mới chết thì master cũ sẽ khởi động các tiến trình worker mới

  • Khi tiến trình master mới kết thúc theo cách này, tiến trình master cũ sẽ xóa phần mở rộng .oldbin

  • Nếu nâng cấp thành công thì gửi tín hiệu QUIT tới tiến trình master cũ để kết thúc nó và chỉ giữ lại tiến trình mới

1 bình luận

 
xguru 2022-01-06

Caddy 1 cũng dùng cách này

Cách Hot Restart của Envoy https://envoyproxy.io/docs/envoy/…

HAProxy Seamless Reload https://haproxy.com/blog/…