NGINX를 통한 간단한 로드밸런싱 구성

cw k·2022년 3월 8일
1

devops

목록 보기
1/1
post-thumbnail

설치

  • homebrew를 통해서 nginx 설치한다.
  • 홈페이지에서 다운받거나 운영체제별 패키지다운로드 명령어를 통해서도 설치 가능하다.

설치방법
https://nginx.org/en/docs/install.html

실행 및 종료

실행

  • 설치경로 /opt/homebrew/opt/nginxbin 디렉토리로 이동하여 nginx 실행
  • 실행후 브라우저의 주소창에서 http://localhost:8080 을 입력하면
    다음과 같은 화면을 볼 수 있다.

종료

  • nginx -s quit 명령어를 통해 nginx를 종료한다.
  • nginx가 실행중인 상태에서 nginx -s signal을 통해 컨트롤할 수 있다. signal의 종류는 다음과 같다.
    • stop — fast shutdown
    • quit — graceful shutdown
    • reload — reloading the configuration file
    • reopen — reopening the log files
  • 종료 후에는 http://localhost:8080 에 접속이 되지 않는 것을 확인할 수 있다.

로드밸런싱

공식문서

  • 공식문서를 보면 다음과같이 로드밸런싱을 구성한다
http {
    upstream myapp1 {
        server srv1.example.com; // 로드밸런싱 대상서버1
        server srv2.example.com; // 로드밸런싱 대상서버2
        server srv3.example.com; // 로드밸런싱 대상서버3
    }

    server {
        listen 80; // 80포트 리스닝

        location / {
            proxy_pass http://myapp1; // 프록시 패스 대상 어플리케이션 주소
        }
    }
}
  • upstream 어플리케이션이름 을 설정하고, 그 안에 server 서버도메인 나열한다.
  • 그 후 프록시서버 리스닝 포트를 listen 포트 와 같이 작성한다
  • location 하단에 앞서 설정한 어플리케이션이름을 proxy_pass http://어플리케이션이름 과 같이 작성한다.

https://nginx.org/en/docs/http/load_balancing.html

설정파일 생성

  • cd /opt/homebrew/etc/nginx 경로로 이동하면 설정파일들이 있다. 이 중에서 nginx.conf 파일이 nginx의 기본 설정파일이다.

  • 기본 설정파일을 복사하여 hello.conf 를 만들어보자.

  • 그 후 이중화 로드밸런싱를 위해 설정파일을 수정한다.

hello.conf

  • hello.conf 파일을 다음과 같이 수정한다.
  • hello 라는 어플리케이션 이름을 설정하고
  • 8888, 9999 2가지 포트로 서버를 구성하였다.
  • nginx는 8080포트로 리슨을하여 두 서버로 로드밸런싱을 할 것이다.

실행

  • 간단히 화면에 "hello nginx" 를 출력하고 로그에 서버 포트를 출력하는 웹어플리케이션을 만들어 8888, 9999 두가지 포트로 실행한다.

  • 웹 어플리케이션 서버 2개를 띄운 후, hello.conf 를 적용하여 nginx를 다시 실행한다.
  • nginx -c 경로/hello.conf 명령어를 통해 컨픽 파일을 적용하여 실행시키면 된다.

결과

  • 브라우저에서 http://localhost:8080/ 으로 접속하면 새로고침마다 번갈아가며 2개의 서버로 로드밸런싱되는 로그를 확인할 수 있다.

원리

  • 원리는 다음과 같다.

  • 클라이언트의 요청이 8080 포트로 들어오면 nginx가 설정파일에 구성해둔 8888, 9999 포트로 요청을 각 서버로 분배한다.

  • 실제 운영에서도 이와같이 외부로 특정포트만 열고(listen) 내부에서 nginx를 통해 로드밸런싱을 구성하면 될듯하다.

  • 분배방식의 기본값은 round-robin 방식으로 각 서버에 돌아가며 분배하는 형태이고, 요청이 적은 서버로 분배하는 least_conn, ip당 서버를 분배하는 ip_hash 등 여러가지 옵션을 사용할 수 있다.

0개의 댓글