해결된 질문
작성
·
225
·
수정됨
1
안녕하세요.
질문이 있는데요, 무중단 배포 진행하는 과정에서 Nginx 설정 다음과 같이 하잖아요.
upstream backend_servers {
3개 서버 설정
}
근데 배포할 때 1번 서버가 다운되고 재기동 되는데 10초가 걸린다하면 이 10초 사이에 클라이언트가 요청했는데 1번 서버로 가면 에러나는거 아닌가요?
Nginx가 알아서 서버 헬스체크해서 에러나면 정상적인 서버로 보내는건가요?
답변 1
1
hungryo님 안녕하세요~
질문 주신 내용에 대해 답변드리겠습니다.
배포할 때 1번 서버가 다운되고 재기동 되는데 10초가 걸린다하면 이 10초 사이에 클라이언트가 요청했는데 1번 서버로 가면 에러나는거 아닌가요?
Nginx가 알아서 서버 헬스체크해서 에러나면 정상적인 서버로 보내는건가요?
라고 질문 주셨는데요, 말씀하신대로 1번 서버로가면 에러가 발생합니다. 그러나 정확히는 'connection refused'가 발생할겁니다. 방화벽에 의해 포트는 막혀있지 않지만, 해당 포트에 아무 프로세스도 떠 있지 않은 경우 주로 발생하는 에러입니다. 이 경우 nginx에서는 자동으로 실패한 요청을 자동으로 다른 upstream으로 다시 포워딩하게됩니다. 이건 주기적인 헬스체크를 통해서 해당 upstream이 살아있는지 확인하는 것과는 별개로 진행되는겁니다.
다만 이건 기본 설정이고, upstream에서 만약 5xx나 4xx 에러를 응답하는 경우에도 다른 upstream으로 보내고 싶을 수 있겠죠? 그런 경우라면 아래와 같은 형태로 설정을 하면 되겠습니다.
location / {
proxy_pass http://backend_servers;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404;
proxy_next_upstream_tries 3;
}
질문에 대한 답변이 됐을까요?
또 궁금한 내용이 있으면 질문 남겨주세요.
감사합니다.
'무중단 배포'라는 것은 서비스에서 어떤 기능을 하고 있느냐에 따라 정의도 다르고, 적용 방법도 다를 수 있습니다.
단순히 백엔드가 가볍냐, 무겁냐의 문제는 아닙니다.
강의에서 적용한 nginx를 활용한 무중단 배포의 경우 클라이언트에게 오는 API 호출에 대해서는 무중단으로 배포가 가능하지만, 만약 메시지 큐에 있는 메시지를 컨슘하여 처리하거나 데이터베이스 같은 곳에 있는 데이터를 배치로 처리하는 백엔드 애플리케이션이라면 여기서 소개한 배포 방법으로는 무중단으로 배포가 되지 않을 수도 있습니다.
강의에서 말씀하신 무중단 배포가 환경에 따라 지금처럼 백엔드가 가벼울 경우는 문제 없는데 무거울 경우에는 더 보완해서 다운타임을 없애야 '무중단 배포'라는 용어?를 사용하는게 맞는걸까요?
아니면 지금과 같은 환경만 구성만해도 '무중단 배포'라 말할 수 있는건가요?