분산 제어
란 클라이언트 요청을 수신한 서버가 그 요청 트래픽을 다시 여러 서버로 분산해 전달함을 의미
왜 트래픽을 분산하는가?
단일 서버 처리량(capacity)을 초과한 대량 요청 트래픽은 속도 저하나 서비스 지연 또는 장애를 유발
이 상황을 대비해 부하(Load)
를 다수 서버로 분산(Balancing)
하는 것
이 것을 서버 로드 밸런싱(Server Load Balancing, SLB)
라 한다.
일단 부하를 분산한다는 것은 어디선가 요청을 수신하고 있다는 뜻
그리고 그 요청을 여러 서버가 나눠 처리토록 배분해야 함
이와 같이 그 트래픽을 가장 처음 수신하는 서버를 가상 서버(Virtual Server)라 한다.
웹 브라우저로 서비스 URL을 요청하면 PC에 설정된 DNS가 응답한 IP주소에 요청한다.
가상 서버는 http
요청을 처리하기 위해 가상 서비스 포트 80을 열고 수신을 기다린다.
가상 서버는 가상 IP, 가상 Port로 구성
요청을 받은 가상 서버는 웹이 구동 중인 리얼 서버, 리얼포트 쌍으로 부하를 분산한다.
이 때 리얼 서버 두 대는 웹 페이지 요청을 처리할 Nginx, Apache같은 웹 서버를 구동해 80 포트를 리슨한다.
결론
13.246.100.25:80
으로 요청이 들어오면
13.246.100.41:80
또는13.246.100.82:80
으로 분산
이같은 가상 서버의 포트 분산 기능은 4계층 이상에서 처리할 수 있으므로, 최소 Layer4 or 7 네트워크 장치가 필요하다
(이 장치를 L4 스위치, L7 스위치라고 함)
AWS도 온프레미스와 비슷한 용어를 사용한다.
AWS의 SLB를 Elastic Load Balancing(탄력적 로드 밸런싱, 로드 배런싱)이라 하며, 이 기능을 제공하는 서비스를 로드 밸런서라 한다.
요청 수신
L4 스위치 : 가상 서버
ELB : ELB의 IP + 리스너
가상 서버(리스너) 구성 요소
L4 스위치 : 가상 IP + 프로토콜과 포트
ELB : 리스너의 프로토콜과 포트
VIP 개수
L4 스위치 : 가상 서버당 1개
ELB : ELB당 1개 도메인
포함 관계
L4 스위치 : 가상 서버 모음 < L4 스위치
ELB : 리스너 모음 < ELB
요청 전달 대상
공통 : 대상 그룹 + 대상 그룹의 프로토콜과 포트
요청 분산 대상
L4 스위치 : 리얼 서버 IP + 리얼 서버의 프로토콜과 포트
ELB : 대상 + 대상의 프로토콜과 포트
다중화
L4 스위치 : 장비 다중화 가능
ELB : ELB 다중화 불가
ELB 내부에 다수의 리스너를 생성할 수 있다.
AWS는 4개의 ELB 유형을 제공
CLB는 이제 지원하지 않는 것 같다.
4개 유형 특징
- ALB, CLB만 SG를 사용
- (ALB : L7), (NLB : L4), (CLB : L4, L7)
- ALB, NLB, CLB의 목적은 ELB에 등록된 대상으로 로드밸런싱하는 것
- GWLB는 대상이 트래픽의 최종 목적지는 아니다. IPS나 방화벽 같은 Appliance로 로드배런싱 한다. 즉 대상이 트래픽 검사, 필터링같은 중간 경유지 (모든 트래픽을 수용)
- ALB는 대상 그룹이 인스턴스, IP, Lambda를 지원
- NLB는 인스턴스 IP, ALB
- CLB는 인스턴스만 지원
ALB는 HTTP, HTTPS 서비스에 최적화돼 있다.
4계층의 대용량, 고성능 트래픽을 분산하려면 NLB를 사용한다...
ELB를 로드밸런싱 처리부
, 요청 수신부
로 나눠본다.
ELB 특징
- ELB의 패런트는 VPC, ELB 유형에 따라 수명 주기 동안 연결 특성이 다름, ALB와 CLB는 다른 요소에 연결할 수 없으며 NLB와 GWLB는 엔드포인트 서비스에 연결할 수 있다.
- ELB 생성과 동시에 ELB용 ENI가 생성 (로드밸런서 노드라고 함)
- 노드 생성 위치는 ELB 생성 시 선택한 가용 영역의 서브넷
- 가용 영역별 1개 서브넷만 선택할 수 있다.
- ELB의 실제 역할은 노드가 수행, 클라이언트 요청을 받은 ELB는 각 가용 영역에 대기중인 노드로 명령으 내려 로드밸런싱 수행
- 각 가용 영역의 노드는 가용 영역의 모든 서브넷으로 로드밸런싱할 수 있음
- 모든 가용 영역을 선택하지 않아도 된다. (단 선택한 가용 영역으로만 로드밸런싱 가능)
- 클라이언트가 실제 접속하는 ELB의 IP는 노드의 IP
- ALB는 반드시 2개 이상의 가용 영역을 선택해야 함
ALB는 가용 영역을 추가하거나 변경할 수 있다. (최소 2개)
b-2
에서 c-1
으로 변경하거나 c-1
에 추가를 할 수도 있다.
대신 가용 영역별 1개의 서브넷만 선택할 수 있다.
ENI는 Node이며 트래픽 분산 타겟이 아니다.
만약 2a
, 2b
에 Node가 존재한다면 각각의 노드는 각각 가용 영역에만 로드밸런싱을 할 수 있다.
2a
의 노드가 장애면 2a
의 인스턴스로는 로드밸런싱이 불가능하다.
이런 경우를 위해 Cross-zone load balancing을 활성화시켜준다.
이 옵션을 활성화하면 2a
, 2b
의 노드가 2a
, 2b
의 모든 인스턴스로 로드밸런싱을 한다.
이처럼 교차 영역 로드밸런싱(Cross-zone load balancing)을 활성화하면 각 노드가 다른 가용 영역으로도 로드밸런싱을 하므로 ELB 다중화르 구현할 수 있다.