먼저 로드밸런싱이란??
서버가 처리해야 할 업무 또는 요청(Load)을 여러 대의 서버로 나누어(Balancing) 처리
많은 트래픽을 대처하는 방법
- Scale Up : 기존 서버의 성능을 높인다. (비용이 증가)
- Scale Out : 똑같은 성능을 가진 서버를 여러대 증산시킨다. (트래픽 분산)
여기서 Scale Out을 하기 위해서 무조건 해야 하는 일이 로드밸런싱이다.
Scale Out의 장점
- 서버는 갑자기 다운될 수 있고 배포를 하게 된다면 다운이 될 수 있다.
- 여러대의 서버를 두게 된다면 하나의 서버가 다운되더라도 다른 서버가 있기 때문에 정상적인 서비스가 가능하다. (무중단 배포)
로드밸런싱
네트워크 트래픽을 균등하게 배포하는 방법으로 많은 양의 트래픽을 처리하기 위해 서버 앞단에 존재하는 소프트웨어 기능이다. 로드밸런싱의 이점은 아래와 같은데 하나씩 파헤쳐 보자
- 애플리케이션 확장성
- 애플리케이션 보안
- 애플리케이션 가용성
- 애플리케이션 성능
애플리케이션 확장성
- 한 서버에서 트래픽 병목 현상 방지
- 필요한 경우 다른 서버를 추가하거나 제거할 수 있도록 애플리케이션 트래픽 예측
애플리케이션 보안
서버 장애를 일으키는 수백만 개의 동시 요청으로 애플리케이션 서버를 가득 채우는 분산 서비스 거부 공격을 처리
- 트래픽 모니터링 및 악성 콘텐츠 차단
- 공격 트래픽을 자동 리디렉션하여 영향 최소화
- 추가 보안을 위해 네트워크 방화벽 그룹을 통해 트래픽 라우팅
애플리케이션 가용성
- 가동 중지 없이 서버 유지 관리 및 업그레이드 실행
- 백업 사이트에 자동 재해 복구 제공
- 상태 확인 수행
애플리케이션 성능
응답 시간을 늘리고 네트워크 지연 시간을 줄임.
- 서버 간에 로드를 균등하게 배포하여 성능 향상
- 지리적으로 가까운 서버로 리디랙션하여 지연 시간 단축
소프트웨어에서의 로드밸런싱
Nginx
- 오픈소스 웹서버 소프트웨어
- Reverse Proxy Server로 활용된다. 80 PORT로 들어오는 내용을 3000, 9000~ 등의 포트로 분산 시켜준다.
- 비동기 이벤트 구조를 기반으로 동작한다. (Event-Driven)
HAProxy
- 오픈소스 소프트웨어
- 여러 로드밸런싱 기능을 지원한다.
로드밸런싱 알고리즘
라운드로빈(기본값)
- 요청을 순서대로 처리한다.
least_conn(최소 연결)
- 각 요청을 서버에 할당된 가중치를 고려해 연결 수가 가장 적은 서버로 전송
ip_hash
- 요청이 클라이언트 IP주소로 해싱, 한 번 요청 받은 서버가 있을 때 해당 서버에만 요청을 분배
least_time
- 연결 수가 가장 적으면서 평균 응답시간이 가장 적은 쪽을 선택해서 분배(Nginx Plus)에서만 가능
Nginx 설정 파일 맛보기
80포트로 들어온 요청들을 8801, 8802, 8803 포트로 요청 분배 (Proxy 역할도 함)
upstream backend { // backend자리에 이름
least_conn; //알고리즘을 적어준다. (기본: 라운드 로빈)
server localhost:8801;
server localhost:8802; //클라이언트가 Nginx로 요청 시
server localhost:8803; //우회시켜줄 Server 정보
}
server {
listen 80; //클라이언트가 요청하는 포트
location / {
proxy_set_header Host $host; //클라이언트의 호스트 설정
proxy_set_header Connection ""; //upstream서버를 사용하겠다 지정(⭐중요)
proxy_pass http://backend; //설정한 이름으로 요청 보내기
}
}
출처
'CS > 네트워크' 카테고리의 다른 글
네트워크 - 서브넷(Subnet) (2) | 2023.05.25 |
---|---|
네트워크 기기 정리 (0) | 2022.12.29 |
네트워크 기초 (5) | 2022.12.22 |