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

2024. 7. 17. 13:00·Linux
목차
  1. HTTP 부하 분산
  2. TCP 부하 분산
  3. UDP 부하 분산
  4. HTTP와 TCP 부하 분산 방식의 차이
  5. HTTP 부하 분산
  6. TCP 부하 분산
  7. 부하 분산 알고리즘
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
  1. HTTP 부하 분산
  2. TCP 부하 분산
  3. UDP 부하 분산
  4. HTTP와 TCP 부하 분산 방식의 차이
  5. HTTP 부하 분산
  6. TCP 부하 분산
  7. 부하 분산 알고리즘
'Linux' 카테고리의 다른 글
  • [WEB] X-Forwarded 헤더는 무엇일까?
  • [Tomcat] Tomcat, web.xml 적용이 안되는 이유
  • [Jenkins] Gradle 버전 신규 추가 방법
  • [Server] Nginx, Apche, PHP, Tomcat 버전 정보 숨기기
정주원
정주원
★ 공부할 땐 누군가 알려준다는 생각으로 하는게 제일 잘되는 법이지!
  • 정주원
    성장일지
    정주원
  • 전체
    오늘
    어제
    • 분류 전체보기 (76) N
      • Linux (40)
      • Windows (0)
      • Network (4)
      • Database (0)
      • Cloud (23)
      • Docker (3)
      • Ansible (2) N
      • Etc (4)
  • 블로그 메뉴

    • 링크

      • GITLAB(woni)
    • 공지사항

    • 인기 글

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

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.