[Nginx] Nginx에서 upstream을 이용해 부하 분산 하기

2024. 7. 17. 13:00·Linux
728x90

HTTP 부하 분산

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;
    }
}

TCP 부하 분산

TCP 연결을 두 대 이상의 TCP 서버로 분산하는 방법입니다. 이는 레이어 4(TCP/IP 4계층)에서 동작하며 연결을 맺고 데이터를 전송하는 과정에서 세션 상태를 유지해야 합니다.

예제 구성

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

설정 경로

기본 설정 파일 경로는 conf.d 폴더입니다. stream 모듈을 이용한 설정은 별도의 stream.conf.d 폴더를 생성해 저장하고, 이를 nginx.conf 파일의 stream 블록에 추가하여 Nginx가 참조하도록 합니다.

 

UDP 부하 분산

UDP 요청을 두 대 이상의 UDP 서버로 분산하는 방법입니다.

예제 구성

stream {
    upstream ntp {
        server ntp1.example.com:123        weight=2;
        server ntp2.example.com:123;
    }
    server {
        listen 123 udp;
        proxy_pass ntp;
    }
}

패킷 재사용 예제

stream {
    server {
        listen 1195 udp reuseport;
        proxy_pass 127.0.0.1;
    }
}

 

HTTP와 TCP 부하 분산 방식의 차이

HTTP 부하 분산

  • 연결 유지 여부: 상태를 유지하지 않음 (stateless)
  • 세션 상태: 각 요청이 독립적
  • 부하 분산 알고리즘: 간단한 라운드 로빈, IP 해시 등
  • 프로토콜 레벨: 응용 계층

TCP 부하 분산

  • 연결 유지 여부: 연결 지향형 프로토콜
  • 세션 상태: 연결이 특정 서버에 유지되어야 함
  • 부하 분산 알고리즘: Least Connections, IP 해시 등
  • 프로토콜 레벨: 전송 계층

부하 분산 알고리즘

  1. Least Connections: 연결이 적은 서버를 우선 활용
  2. Least Time: 응답 속도가 빠른 서버를 우선 활용
  3. Round Robin: 서버의 가중치를 지정하여 사용
  4. Random: 임의 서버를 할당
  5. Generic Hash: 특정 문자열 기반 해시 활용
  6. IP Hash: IP 주소 기반 해시 사용
728x90

'Linux' 카테고리의 다른 글

[WEB] X-Forwarded 헤더는 무엇일까?  (0) 2024.08.07
[Tomcat] Tomcat, web.xml 적용이 안되는 이유  (0) 2024.07.18
[Jenkins] Gradle 버전 신규 추가 방법  (0) 2024.07.16
[Server] Nginx, Apche, PHP, Tomcat 버전 정보 숨기기  (0) 2024.06.28
[Server] Apache Permission denied 에러  (0) 2024.06.28
'Linux' 카테고리의 다른 글
  • [WEB] X-Forwarded 헤더는 무엇일까?
  • [Tomcat] Tomcat, web.xml 적용이 안되는 이유
  • [Jenkins] Gradle 버전 신규 추가 방법
  • [Server] Nginx, Apche, PHP, Tomcat 버전 정보 숨기기
정주원
정주원
개인블로그
  • 정주원
    Joon.eng
    정주원
  • 전체
    오늘
    어제
    • 분류 전체보기 (83)
      • Linux (43)
      • Windows (0)
      • Network (5)
      • Database (0)
      • Cloud (23)
      • Docker (3)
      • Ansible (2)
      • Language (1)
      • Etc (5)
  • 블로그 메뉴

    • 링크

      • GITLAB(woni)
    • 공지사항

    • 인기 글

    • hELLO· Designed By정상우.v4.10.0
    정주원
    [Nginx] Nginx에서 upstream을 이용해 부하 분산 하기
    상단으로

    티스토리툴바