공식 문서
AWS에는 3가지 타입의 LoadBalancer가 있다.
작동 계층
특징
사용 예시
참고
4.2.1 Network Load Balancer의 부하 분산 방법
에서 설명됨.작동 계층
특징
사용 예시
작동 계층
특징
사용 예시
실습 제외 이유
Target Group에서 Flow hash algorithm의 기본 규칙을 따라서 대상을 선택한다. 알고리즘은 다음을 기반으로 한다.
알고리즘에 따라 Client로부터의 연결은 다음과 같은 특징을 따른다.
1. 각 개별 TCP 연결은 연결 수명(라이프사이클) 동안 하나의 대상에 라우팅 된다.
2. 하나의 클라이언트로부터 요청된 TCP 연결들은 소스 포트와 시퀀스 번호가 서로 다르므로 다른 대상에 라우팅될 수 있다.
운영체제 TCP Client 는 자신의 host 에서 해당연결에서 사용할 source port
number (Ephemeral port, Ephemeral port range)를 연결마다 자동으로 할당
한다.
TCP 의 sequence number 는 각 연결마다 0부터 시작하는 것이 아니다.
ISN(initial sequence number)는 해당 연결안에서 unique하고, 0~2^32-1(max of 4bytes unsigned int) 사이의 랜덤값이다.
두 개의 EC2 인스턴스에 다음 명령어로 간단한 서버를 띄운다.
<!DOCTYPE html>
<html>
<head>
<!-- head definitions go here -->
Hellow World
</head>
<body>
<!-- the content goes here -->
Server 1 or 2
</body>
</html>
index.html 파일을 ubuntu home에 위치시킨다.
두 개의 서버 각각에 다음 명령어로 echo server 를 띄운다.
while true; do { \
echo -ne "HTTP/1.0 200 OK\r\nContent-Length: $(wc -c <index.html)\r\n\r\n";\
cat index.html; } | nc -l -p 8080 ; \
done
curl ${IP}:${PORT}
Network Load Balancer 는 연결할 대상을 Target Group 이라는 추상화된 대상으로 지정한다.
EC2 > Traget groups
Create target group
instances 선택
Target group name: de-lb-tcp
Protocol: TCP
Port : 8080
VPC: 자신의 VPC 선택
Health Check
Advanced: 해당 설정은 실습의 용이를 위해서 작게 세팅
Traffic port
2
10s
Next를 누르고
EC2 인스턴스를 선택한다.
include as pending below 클릭
EC2 > Load Balancers
Create Load Balancer
Network Load Balancer 선택
Load balancer name: de-network-lb
Schema: internet-facing
IP address type: IPv4
Network mapping
Listeners and routing
Create 버튼
EC2 > LoadBalancing > LoadBalancers
$DNSname:$port
로 응답 확인장애 방지를 위해 Availability zone 별로 서비스가 가용하도록 구성한 경우, 다음 옵션으로 Cross-zone load balancing 을 선택하면, 가능한 availability zone들에게 고르게 트래픽을 분배할 수 있다.
다음 과정으로 부하 분산 방법을 결정한다.
Priority Order(우선순위)로 Lister Rule 들 중 어떤 규칙을 적용할지를 평가한다.
Rule 에 해당하는 target group을 선택한다.
4.2.2 실습용 서버 세팅하기
와 동일하다.
Application Load Balancer 는 연결할 대상을 Target Group 이라는 추상화된 대상으로 지정한다.
실습을 위해서 준비한 2개의 EC2인스턴스를 대상으로 각각 별도의 Target Group으로 만들어준다.
EC2 > Traget groups
Create target group
instances 선택
Target group name: de-lb-app-1
, de-lb-app-2
Protocol: HTTP
Port : 8080
VPC: 자신의 VPC 선택
Protocol version: HTTP1
Health Check
Advanced: 해당 설정은 실습의 용이를 위해서 작게 세팅
2
2
2
5
Next를 누르고
EC2 인스턴스를 선택한다.
EC2 > Load Balancers
Create Load Balancer
Application Load Balancer 선택
Load balancer name: de-application-lb
Schema: internet-facing
IP address type: IPv4
Network mapping
Security groups
Listeners and routing
Create 버튼
생성된 후에 Listeners 탭에서 생성된 Listeners 선택하고, edit 버튼을 눌러서 기본 규칙을 수정한다.
de-lb-app-1
선택, weight 1de-lb-app-2
선택, weight 2EC2 > LoadBalancing > LoadBalancers
$DNSname:$port
로 응답 확인EC2 > LoadBalancing > LoadBalancers
생성한 LoadBalancer 선택
아래 Listners 에서 Rules > View/edit rules
+
버튼을 눌러서 편집한다.
insert rule for TARGET 1
Http header
TARGET
is 1
Forward to...
de-lb-app-1
insert rule for TARGET 2
Http header
TARGET
is 2
Forward to...
de-lb-app-2
SAVE 버튼
$DNS:$PORT
로 header 정보 없이 요청을 보낸다.$DNS:$PORT
로 header 정보와 함께 요청을 보낸다.curl -i -H "TARGET:1" $DNS:$PORT
$DNS:$PORT
로 header 정보와 함께 요청을 보낸다.curl -i -H "TARGET:2" $DNS:$PORT