- Docker Nginx - Reverse Proxy, Load Balancing2021년 11월 27일 13시 10분 52초에 업로드 된 글입니다.작성자: jCurve728x90반응형
진행했던 프로젝트에서 배포시 여러개의 서버를 두어 트래픽을 분산시킬 목적으로 nginx에 loadbalancing을 사용해보았던 내용을 적어봅니다.
실제로는 EC2 서버가 한 대밖에 없어서 docker container 여러개를 띄우고 이것들을 로드 밸런싱한 내용으로 실제 회사에서 배포시 이런방식 말고 여러대의 EC2 서버를 구매해서 로드 밸런싱을 하겠지만 저는 제한된 자원으로 구현해보고자 이 방식으로 진행했습니다.
먼저 docker search로 nginx를 찾은 후 이미지를 pull로 댕겨 옵니다.
이제 nginx관련 설정을 해주겠습니다.
컨테이너를 띄우면서 내부 nginx 설정 파일을 설정해 주어야하는데 nginx 디렉토리를 만들고 default.conf파일에 nginx 설정을 해주고 볼륨 마운트를 해주겠습니다.
리버스 프록시로 80포트로 접근시 각 스프링 컨테이너의 8080포트로 로드밸런싱 되어 요청이 들어갑니다.
로드밸런싱 관련하여 max_fails=3로 주었는데요 이는 3번의 요청이 실패하면 해당 서버는 죽은 서버로 간주하게됩니다.
이외에도 지정한 시간안에 응답이 없으면 서버가 죽은것으로 간주하는 fail_timeout이나 요청의 가중치를 결정하는 weight 등등의 옵션이 있습니다만 저는 기본으로 두고 max_fails만 설정해서 보여드리겠습니다.
로드밸런싱이 제대로 진행되는지 swagger-ui 접속중에 올라온 컨테이너 한 대를 강제로 종료시켜 접속 새로고침을 3번 진행하고 실패의 유무로 판단할 수 있게 swagger-ui 확인용 url을 설정해 주었습니다.
docker-compose.yml 파일에서 replicas값을 3으로 설정하여 3개의 컨테이너가 올라오도록 설정해주고
docker-copose up 명령어를 사용해서 컨테이너들을 띄워 보겠습니다.
실험할 컨테이너들이 모두 올라왔고 nginx 컨테이너도 정상적으로 동작중이니 localhost/swagger-ui/로 접속해서 리버스 프록시 동작을 확인해 보겠습니다.
리버스 프록시가 제대로 동작하고 있네요
이제 컨테이너 한대를 강제로 종료하고 새로고침을 해보겠습니다.
(현재 라운드 로빈 방식이므로 스프링 컨테이너 1 -> 스프링 컨테이너 2 -> 스프링 컨테이너 3 이런식으로 트래픽을 분산시켜 줍니다. )
위에서 nginx 설정에 max_fails=3으로 주었기에 3번 새로고침을 진행하는 동안 계속 텅빈 브라우저창을 보여주다 4번째에 다른 스프링 컨테이너로 트래픽이 넘어가게 되면서 다시 swagger api 문서를 보여주게 됩니다.
이렇게 간단히 Reverse Proxy와 Load Balancing를 적용해 보았습니다.
깊게 공부하면 여기서 사용한 설정보다 더 자세하게 커스터마이징이 가능하므로 적용해보면서 서비스에 맞는 옵션을 설정해주면 좋을 것 같네요
반응형'DEV-OPS' 카테고리의 다른 글
Docker-Compose로 반복 컨테이너 작업 줄이기 (0) 2021.11.27 Jenkins CI/CD Pipeline (0) 2021.11.25 Ngrinder로 성능을 테스트 후 캐시로 성능 올리기 (0) 2021.10.06 댓글