-
Nginx Load balancing, 도커 컨테이너 실습인프라 2022. 12. 8. 12:45728x90반응형SMALL
실습 내용
ip주소의 80번 포트로 들어오는 요청을 내부 3000번, 3001번, 3002번 포트로 분산시켜 주도록 하겠습니다.
컨테이너의 내부 포트는 3000포트를 개방시키고 외부 포트는 각각 3000, 3001, 3002포트와 연결시켜 줍니다.
Upstream
Nginx의 upstream을 이용해 요청에 대한 분배를 해줄 수 있도록 해보겠습니다.
선언 위치
/etc/nginx/sites-enabled/ 내에 새로운 파일을 만들어줍니다. (nginx.config의 http{ ... } 안에 includes /etc/nginx/sites-enabled/* 구문이 있는지 확인하고 없으면 추가해줍니다.)
☼새로운 파일을 생성하지 않고 기존에 존재하는 nginx.config 파일 내에 선언해줘도 괜찮습니다!
upstream 규칙
upstream {upstream 이름} { {upsream 분산 규칙} server {ip주소:port번호} weight max_fails fail_timeout ... }
upstream 분산 규칙
- round-robin (default) : 돌아가면서 분배 아무설정도 넣지 않으면 round-robin으로 설정된다.
- hash : 해시 값으로 분배한다.
- ip_hash : ip를 해시한 값으로 분배한다.
- least_conn : 연결 수가 가장 적은 서버에 분배한다. 가중치를 고려한다.
- least_time : 연결 수가 가장 적고, 응답 시간이 가장 적은 곳에 분배해준다. 가중치를 고려한다.
- random : random하게 분배해준다.
server 인자 규칙
- weight : 해당 서버에 대한 가중치
- max_conns : 최대 동시 연결이 가능한 개수 (default = 0 <= no limit)
- fail_timeout : 성공 못한 시도 회수를 명시할 기간 (default = 10초)
- max_fails : fail_timeout 기간 내에 실패할 수 있는 최대 실패 회수. 이 회수를 넘어가면 이 서버는 사용하지 못하는 것으로 판단한다. (default = 1)
upstream 선언
upstream my_upstream { least_conn; server http://localhost:3000; server http://localhost:3001; server http://localhost:3002; } server { listen 80; ... location / { proxy_pass http://my_upstream; } }
위에 선언된 my_upstream이라는 upstream을 통해 80으로 들어오는 요청을 3000,3001,3002 포트로 분산시켜주도록 했습니다.
도커 컨테이너 생성
CRA 프로젝트의 빌드 파일을 통해 docker 이미지를 생성한 뒤 컨테이너 3개를 생성해준다.
docker run -d --name cra1 -p 3000:3000 conatiner:v1 docker run -d --name cra2 -p 3001:3000 conatiner:v1 docker run -d --name cra3 -p 3002:3000 conatiner:v1
도커 이미지는 default 페이지에 각각 다른 숫자를 보여주도록 한 CRA 프로젝트의 빌드 디렉토리로 이루어져 있고, serve 명령어로 react build파일을 3000번 포트로 접근할 수 있도록 했습니다.
npx serve -l 3000 -s build
같은 ip주소에 접속해도 각각 다른 서버에 접속할 수 있도록 Nginx가 부하분산 시켜주는 것을 확인할 수 있었습니다.
결론
Nginx를 이용해 Load balancing을 실습해볼 수 있었습니다.
여러 설정 값들을 이용해 서버에 대한 부하를 유연하게 분산시켜줄 수 있을 것 같다고 생각합니다.
반응형LIST'인프라' 카테고리의 다른 글
쿠버네티스 시작 (0) 2022.12.12 dockerfile 관련 정리 (0) 2022.12.09 Nginx 개념 + 간단 실습 (0) 2022.12.08 컨테이너 run 옵션 정리 (0) 2022.12.08 도커 이론 (0) 2022.12.08