Intro
AWS에서는 ELB라는 강력한 로드밸런서 서비스를 제공하고 있습니다. 종류로는 CLB(classic Load Balancer), ALB(Application Load Balancer), NLB(Network Load Balancer)가 있습니다.
그 중에 오늘은 NLB의 특징과 기능들에 대해 알아 보도록 하겠습니다.
NLB(Network Load Balancer)의 주요 특징
NLB에 대한 설명은 이미 AWS Document에 잘 설명이 되어 있기 때문에 중요한 포인트만 요약 정리해보도록 하겠습니다.
- L4역할로 TCP, UDP, TLS 통신을 할때 사용한다 (HTTP/HTTPS 통신 불가)
- AWS ACM을 사용하여 TLS통신이 가능하다
- AWS EIP(Elastic IP)를 붙혀서 외부에서 접근하는 IP를 고정할 수 있다.
- Subnet Zone 1개만 선택하여 구성이 가능하다(single AZ 가능)
- NLB의 보안그룹이(security group) 없기 때문에 Target Group의 EC2 Instance 보안그룹(security group)에서 Source(시작점)를 제어해야한다.
- 위에서 설명한 Source(시작점) 제어는 IP로만 가능하다(보안그룹 ID로는 제어할 수 없음)
- 초당 수백만 건의 요청을 처리할 수 있으며, ALB, CLB와는 다르게 pre-warming 요청이 필요 없다.
- IP hash알고리즘을 사용하여 Load Balancing을 해준다
- DSR(Direct Server Retrun)방식을 사용한다.
Load Balancing 방식
Load Balancer의 주역할은 여러대의 서버로 유입되는 트래픽을 앞단에서 받아서 분산해주는 것입니다. LB 방식은 크게 6가지가 있으며 기본 개념을 알고 가면 좋을 것 같아 정리해보았습니다.
Round Robin
들어오는 요청을 모든 서버에 균등하게 요청을 분배 하는 방식. 만약 LB뒤에 서버가 A,B 두대라고 하면 한번은 A에 한번은 B에 분배를 합니다
Weighted Round Robin Scheduling
기본적으로 Round Robin방식으로 분배하며 서버의 가중치에 따라 요청을 분배합니다.
Least Connection
서버에 연결된 커넥션 개수를 체크하여 커넥션이 가장 적은 서버로 요청을 분배 합니다.
Weighted Least Connections
기본적으로 Least Connection방식으로 분배하며 서버 가중치에 따라 요청을 분배합니다.
Fastest Response Time
서버의 응답 시간을 체크하여 가장 빠른 서버로 요청을 분배합니다.
Source Hash Scheduling
사용자의 IP를 해싱한 후 그 결과에 따라 서버로 요청을 분배합니다. 사용자의 IP는 고정되기 때문에 항상 같은 서버로 연결된다는 보장을 받을 수 있습니다.
그 중 NLB는 Source Hash Scheduling 방식과 유사한 IP hash 방식을 사용합니다.
ALB와 CLB는 기본적으로 RR(Round Robin)방식을 사용하며, ALB는 추가로 LOR(Least Outstanding Requests) 방식을 합니다. (이는 Least connection 방식과 유사함)
NLB의 IP hash 알고리즘
NLB의 IP hash 알고리즘은 5-tuple을 기반으로 hash값을 생성하여 5가지가 하나라도 달라지게 되면 로드밸런싱이 일어납니다.
- 참고로 tule은 수학적 개념을 표현하는 용어이며, 순서 쌍을 말합니다.
여기서 5-tuple은 아래와 같습니다.
Source IP Address
Source Port
Destination IP Address
Destination Port
Protocol
NLB의 Sticky Session 기능
갑자기 sticky session이 나온이유는 해당 기능을 사용하면 tuple이 달라지기 때문입니다. sticky session기능을 사용하면 한번 커넥션을 맺은 서버와 세션이 고정되어 해당 서버로만 트래픽이 전달됩니다.
하지만 sticky session에는 connection idle time out이 존재하는것을 반드시 유념해야합니다.
tcp 350초
udp 120초
다시 tuple 이야기를 해보겠습니다. 만약 Single AZ로 구성된 NLB에서 sticky session 기능을 사용한다고 하면 1-tuple로 동작하게 되고,
Source IP Address
Multi AZ로 구성된 NLB에서 sticky session기능을 사용하게 되면 NLB의 IP가 2개이므로 2-tuple로 동작하게 됩니다.
Source IP Address
NLB IP Adress
Multi AZ로 구성되어있는 NLB에서 Single AZ에서 1-tuple로 동작하도록 구성하려면 한쪽 AZ로만 트래픽을 전달하면 되겠죠?
이것은 AWS DNS서비스인 Route53에서 Weighted, failover 방식으로 Single AZ로만 라우팅을 하도록 설정하여 구성할 수 있습니다.
NLB의 Proxy Protocol 기능
NLB를 호출하는 Client IP를 확인하기 위해서 사용하는 기능이 Proxy Protocol 입니다.
NLB의 Target Type이 Instance
일 경우 설정하면 별도의 NAT과정이 없기 때문에 clinet IP를 확인할 수 있습니다.
하지만 NLB의 Target Type이 IP
인 경우 NLB에서 NAT를 수행하여 Clinet IP가 NLB의 IP로 확인이 됩니다. 이 경우 NLB의 Target Group 설정에 Proxy Protocol v2 설정을 활성화하면 Client IP를 확인할 수 있습니다.
또한 NLB Type이 Internal
인경우 Client IP가 NLB의 IP로 보여지기 때문에 Proxy Protocol기능을 활성화하면 실제 Client IP를 확인 할 수 있습니다.
여기 까지 NLB에 대해서 알아보았습니다. 향후 추가되는 기능이나 정보들을 업데이트하도록 하겠습니다. NLB를 사용하시는 분들에게 조금이나마 도움이 되었으면 좋겠습니다.
감사합니다.
'IT > AWS' 카테고리의 다른 글
[AWS트러블슈팅] NLB의 Target Group이 unhealthy인데 원하는 통신이 된다? (2) | 2021.09.07 |
---|---|
[AWS] EKS 클러스터에서 kubernetes coredns 통신 제어 (3) | 2021.09.05 |
[AWS] AWS Load Balancer Controller 설치하기 (0) | 2021.08.13 |
[AWS] SSM(session manager)를 통하여 EC2 접근하기 (0) | 2021.08.12 |
[AWS] amazonlinux2의 로그(/var/log)를 AWS cloudwatch logs로 백업하기 (0) | 2021.08.11 |