อัปเกรดไฟล์ปฏิบัติการระหว่างที่กำลังรันอยู่
(nginx.org)- วิธีอัปเกรดที่ Nginx ใช้
→ แทนที่ไฟล์ปฏิบัติการของไฟล์ต้นฉบับด้วยไฟล์ใหม่
→ ส่งสัญญาณ USR2 ไปยัง master process
→ master process เปลี่ยนชื่อไฟล์ process ID ของตัวเองเป็นนามสกุล .oldbin
→ เริ่มไฟล์ปฏิบัติการใหม่เพื่อให้สร้าง worker process ชุดใหม่
→ worker process ทั้งหมดเริ่มรับ request
→ เมื่อส่งสัญญาณ WINCH ไปยัง master process ตัวแรก จะเป็นการขอให้ worker process ของมันปิดตัวลงอย่างปกติ
-
master process เดิมจะไม่ปิด listen socket และยังสามารถสร้าง worker process ขึ้นมาใหม่ได้หากจำเป็น
-
หาก master process ใหม่ทำงานได้ไม่ถูกต้อง
→ ส่งสัญญาณ HUP ไปยัง master process เดิมเพื่อให้เริ่ม worker process ชุดใหม่ แล้วหลังจาก worker ของ master process ใหม่ปิดตัวลง ให้ส่ง QUIT ไปยัง master process ใหม่เพื่อปิดมัน
→ ส่งสัญญาณ TERM ไปยัง master process ใหม่เพื่อขอให้ worker process ปัจจุบันหยุดทันที เมื่อ master process ใหม่ตาย master process เดิมจะเริ่ม worker process ชุดใหม่
-
เมื่อ master process ใหม่ปิดตัวลงแบบนี้ master process เดิมจะลบนามสกุล .oldbin
-
หากอัปเกรดสำเร็จ ให้ส่งสัญญาณ QUIT ไปยัง master process เดิมเพื่อปิดมัน และคงเหลือไว้เฉพาะ process ใหม่
1 ความคิดเห็น
Caddy 1 ก็ใช้วิธีนี้เช่นกัน
วิธี Hot Restart ของ Envoy https://envoyproxy.io/docs/envoy/…
HAProxy Seamless Reload https://haproxy.com/blog/…