17P by xguru 2022-01-06 | favorite | 댓글 1개

- Nginx 가 사용하는 업그레이드 방식
ㅤ→ 원본 파일의 실행파일을 새 것으로 교체
ㅤ→ USR2 시그널을 마스터 프로세스에 전송
ㅤ→ 마스터 프로세스가 자기 프로세스ID의 파일을 .oldbin 확장자로 교체
ㅤ→ 새 실행 파일을 시작시켜서 새로운 워커프로세스 만들도록 함
ㅤ→ 모든 워커프로세스들이 리퀘스트 받기 시작
ㅤ→ WINCH 시그널이 첫번째 마스터 프로세스에 보내지면, 자신의 워커 프로세스들에게 정상 종료하도록 요청

- 기존 마스터 프로세스는 리슨 소켓을 닫지 않으며, 필요시 다시 워커 프로세스 생성 가능
- 혹시 신규 마스터 프로세스가 제대로 동작하지 않으면
ㅤ→ 기존 마스터 프로세스에게 HUP 시그널을 보내서 새로운 워커 프로세스 시작하도록 하고, 신규 마스터 프로세스의 워커들이 종료된 후 신규 마스터에게 QUIT 보내서 종료 시킴
ㅤ→ 새 마스터 프로세스 에게 TERM 시그널 보내서 현재 워커 프로세스들에게 즉시 중단하도록 요청. 신규 마스터가 죽으면 기존 마스터가 새 워커 프로세스들 시작

- 이렇게 새 마스터 프로세스가 종료되면 기존 마스터 프로세스가 .oldbin 확장자를 지움
- 업그레이드가 성공하면 기존 마스터 프로세스에게 QUIT 시그널을 보내서 종료시키고 새 프로세스만 남김

Caddy 1 도 이 방식을 이용한다고

Envoy의 Hot Restart 방식 https://envoyproxy.io/docs/envoy/…
HAProxy Seamless Reload https://haproxy.com/blog/…