리코딩 : 네트워크(Network)

네트워크(Network) - 로드밸런서 공부 내용 정리

BreezeBm 2021. 11. 22. 20:13

Photo by  Robynne Hu  on  Unsplash

4계층 장비는 TCP와 같은 4계층 헤더에 있는 정보를 이해하고 정보들을 기반으로 동작한다. 4계층 이상에서 동작하는 로드밸런서, 방화벽과 같은 장비를 '세션 장비'라고 부른다. 세션 장비는 고려할 특징이 있다. 다음과 같다.

1. 세션 테이블
  - 세션 장비는 세션 테이블 기반으로 운영이 된다.
  - 세션 정보를 저장, 확인하는 작업 전반에 대한 이해가 필요합니다.
  - 세션 정보는 세션 테이블에 남아있는 라이프 타임이 존재합니다. 이 부분에 대한 고려가 필요하다.
2. Symmetric 경로 요구
  - Inbound와 Outbound의 경로가 일치해야 한다.
3. 정보 변경
  - IP주소가 변경되며 확장된 L7로드 밸런서는 애플리케이션 프로토콜 정보도 변경된다.

1. 로드밸런서

 서버나 장비의 부하를 분산하기 위해 사용되는 장비를 말한다. 주로 웹 서버의 부하 분산에 사용이 된다. 로드밸런서는 서비스에 사용되는 가상주소 IP(Virtual IP)를 가지게 되는데 서비스를 위해 사용되는 IP주소 이므로 서비스 IP주소라고도 불린다. 이 때 실제 IP주소는 로드 밸런서의 가상 IP에 실제 서버들이 바인딩이 된다. 이렇게 작은 서버를 여러개 운영하더라도 사용자는 서버 배치와 상관없이 하나의 서비스로 보여야 한다. 

1) L4 로드밸런싱

일반 적인 로드밸런서가 동작하는 방식이다. TCP / UDP 정보를 기반으로 로드밸런싱을 한다.

2) L7 로드밸런싱

HTTP, FTP, SMTP와 같은 애플리케이션 프로토콜 정보를 기반으로 로드밸런싱을 한다. HTTP헤더 정보나 URI와 같은 정보를 기반으로 프로토콜을 이해하고 부하를 분산한다. 프록시 역할을 수행한다. 이런 장비를 ADC(Application  Delivery Controller)라고 부른다.


2. 헬스 체크

 로드밸런서를 통해 서비스하는 그룹서버에 장애가 발생이 된 경우 로드밸런서는 장애가 발생한 서비스의 IP로 요청을 보내지 않는다. 그 이유는 부하 분산을 하는 각 서버의 서비스를 주기적으로 헬스 체크를 해서 정상적인 서비스 쪽으로만 요청을 보내고 비정상적인 서버쪽은 요청을 보내지 않는다. 그리고 이후에도 헬스체크를 진행하면서 트래픽을 보내지 않았던 비정상적인 서버가 정상적으로 돌아왔을 때, 다시 트래픽을 보내게 됩니다. 헬스체크 방식은 다음과 같다.

1. ICMP
2. TCP 서비스 포트
3. TCP 서비스 포트: Half Open
4. HTTP 상태 코드
5. 콘텐츠 확인(문자열확인)

1. ICMP

ICMP(핑)을 보내서 헬스 체크를 확인합니다. 단순히 서버가 살아 있는지만 확인하는 방법이다.

2. TCP 서비스 포트

로드 밸런서에 설정 된 서비스 포트를 확인하는 방법이다. 로드밸런서에 포트 3000번을 등록했으면 실제 IP의 3000번 포트로 SYN플래그를 보내고 서버로 부터 SYN, ACK를 받으면 서버에 다시 ACK로 응답하고 FIN을 통해서 헬스 체크를 종료하는 방식이다.

3. TCP 서비스 포트: Half Open

TCP 서비스 포트를 확인할 때는 정상적인 3-핸드셰이크 그리고 종료할때는 4-핸드세이크를 거치게 된다. 이로인해 헬스 체크로 인한 부하를 줄이기 위해서 정상적인 종료 방식보다 빨리 헬스 체크 세션을 끊기 위해 Half Open방식을 사용하기도 한다. 이 방식은 3-핸드세이크와 동일하게 SYN을 보내고 SYN, ACK를 받지만 이후 ACK 대신 긴급종료인 RST를 보내 세션을 종료한다.

4. HTTP 상태 코드

HTTP 상태코드를 확인 하는 방식으로 로드 밸런서가 서버로 3-핸드세이크를 거치고 나서 HTTP요청을 보내고 정상적인 상태 코드 200 OK를 응답하는지 확인한다.

5. 콘텐츠 확인

로드 밸런서에서 서버로 콘텐츠 요청하고 응답받은 내용을 확인한다. 내용에 지정된 콘텐츠가 정상적으로 응답했는지 확인하는 방법이다. 보통 특정 웹페이지를 호출해서 사전에 지정한 문자열이 해당 웹페이지 내에 포함되어 있는지를 체크하는 기능이다.


3. 부하 분산 알고리즘

로드 밸런서가 실제 IP로 부하를 분산할 때, 사전에 설정한 알고리즘을 통해 이루어 진다. 

1. 라운드 로빈

 라운드 로빈 방식은 순차적으로 돌아가면서 트래픽을 분산하는 방식이다. 서버가 4대가 있다고 가정하면 첫번째 요청은 1번 서버두번째 요청은 2번 서버세번째는 3번으로 4번째는 4번으로 다섯번째는 1번으로 순차적으로 모든 장비에 분산한다.

2. 최소 접속 방식

서버가 가진 세션 부하를 확인을 한다. 로드밸런서는 서비스 요청을 각 장비로 보내줄 때마다 세션 테이블이 생성된다. 각 장비에 연결된 현재 세션 수를 알 수 있다. 최소 접속 방식은 각 장비의 세션 수를 확인해서 세션이 가장 적게 연결된 장비로 서비스를 보낸다.

3. 해시

해시는 같은 알고리즘을 사용하면 항상 동일한 결과값을 가지고 서비스를 분산할 수 있다. 그 특징을 이용해서 서버의 부하를 고려하지 않고 같은 서버에 지속적으로 접속하기 위해 사용하는 방식이다.