NGINX

dalonn98·2023년 8월 29일
0

NGINX

목록 보기
4/4
post-thumbnail

이론

HTTP 부하분산

두 대 이상의 HTTP 서버 분산

upstream 블록과 http 모듈을 이용해 http 서버 간에 부하 분산

upstream backend {
server 10.10.12.45:80 weight=1;
server app.example.com:80 weight=2;
server spare.example.com:80 backup;
}
server {
location / {
 proxy_pass http://backend;
       }
}

프라이머리 서버(server 지시자와 weight 매개변수로 가중치를 설정한 서버) 두 대
server 10.10.12.45:80 weight=1;
server app.example.com:80 weight=2;

위 서버들에 연결이 불가능 할 시
백업으로 지정한 서버 사용
server spare.example.com:80 backup;

  • 지정한 weight 값에 따라 두 번째 서버는 첫 번째 서버보다 두 배 많은 요청을 받음
  • weight의 기본값은 1이며 생략 가능

목적지 풀(서버 그룹/팜) : 유닉스 소켓, IP 주소, DNS 레코드 가능

upstream 대상은 server 지시자로 설정


TCP 부하분산

두 대 이상의 TCP 서버로 분산

upstream 블록과 stream 모듈을 이용해 TCP 서버 간에 부하 분산

stream {
        upstream mysql_read {
                server read1.example.com:3306 weight=5;
                server read2.example.com:3306;
                server 10.10.12.34:3306 backup;
        }
        server {
                listen 3306;
                proxy_pass mysql_read;
        }
}

3306포트로 TCP 요청을 받아 읽기 전용 복제본 두 대로 구성된 MySQL 서버로 부하 분산

기본 설정 파일 경로인 conf.d 폴더는 http 블록에 포함됨
stream 모듈을 이용한 이 설정은 stream.conf.d라는 별도 폴더를 생성하는게 좋다고 함

# /etc/nginx/nginx.conf 설정 파일, stream 블록 추가
user nginx;
worker_processes auto;
pid /run/nginx.pid;

...
stream {
		include /etc/nginx/stream.conf.d/*.conf;
}
# /etc/nginx/stream.conf.d/mysql_read.conf 설정 파일
upstream mysql_read {
        server read1.example.com:3306 weight=5;
        server read2.example.com:3306;
        server 10.10.12.34:3306 backup;
}
server {
		listen 3306;
		proxy_pass mysql_read;
}

http 모듈이 HTTP 프로토콜을 완전히 이해하도록 특별히 설계된 반면 stream 모듈은 패킷의 전달 경로 결정과 부하분산에 더 중점을 둔다는 정도로 이해하면 적당하겠습니다.

nginx에서 TCP 부하분산은 stream 모듈을 이용해 정의

  • http 모듈과 마찬가지로 stream 모듈도 업스트림 서버 풀을 만들거나 수신할 개별 서버를 지정
  • 정의한 서버가 다른 서버로 요청을 전달하는 리버스 프록시 서버인지 혹은 일반적인 업스트림 풀에 포함된 서버인지에 관계없이 목적지 서버 목록에 정의

TCP 부하분산 파트의 내용 이해가 조금 어렵게 느껴진다
upstream이 중복돼는데 저 부분이 많이 헷갈리는 것 같다.

profile
Cloud Engineer / interested in solutions architect & devops

0개의 댓글