Room9

[Cloud Network] Alibaba Cloud Server Load Balancer 본문

Cloud/Alibaba Cloud

[Cloud Network] Alibaba Cloud Server Load Balancer

Room9_ 2023. 8. 16. 14:42

Overview

SLB (Server Load Balancer)는 Alibaba Cloud에서 제공하는 완전 관리형 로드 밸런싱 서비스입니다.

즉시 사용할 수 있으며 탄력적이고 안정적이며 신뢰할 수 있는 높은 처리량의 로드 밸런싱 서비스를 제공합니다.

SLB는 하이퍼스케일 인터넷 애플리케이션의 과도한 부하를 분산하도록 설계되었습니다.

SLB는 수신 트래픽을 백엔드 서버 그룹에 분산하여 애플리케이션의 처리량을 높이는 서비스입니다.

SLB는 SPOF(단일 장애 지점)를 제거하고 애플리케이션의 가용성을 향상시키는 데에도 사용할 수 있습니다.


Detail

  • Server Load Balancer
  • SLB 인스턴스 유형
  • ALB config 
  • ALB (Application Load Balancer) 생성
  • 서버 그룹 (Server Group) 생성
  • 리스너 (Listener) 생성
  • ALB 검증
  • Forwading Rule Config
  • NLB config
  • NLB 생성
  • 서버 그룹 생성
  • 리스너 생성
  • NLB 검증
  • Conclusion
  • Reference

Server Load Balancer

고가용성 환경 구성

VPC 내 단일 서버를 통한 서비스를 구성하여 사용 중에 서버에 장애가 발생하면, 사용자는 서비스를 원활하게 받을 수 없습니다.(SPOF)

연속된 서비스 제공을 위해 서버를 다중화 하여 서비스를 제공할 수 있어야 합니다.

기존 1대의 서버에서 서버를 다중화 하여 서비스를 제공하면 ECS-1 이 장애가 나더라도 ECS-2,ECS-3 으로 인해 서비스를 제공할 수 있습니다. 다만, 서비스의 Target 을 User가 일일이 지정하여 접속해야 한다는 문제가 발생합니다. User가 장애를 직접 판단하고 Taget을 기존 ECS-1 에서 ECS-2,ECS-3 으로 직접 변경하여 서비스를 제공 받아야합니다. 이러한 상태를 고가용성이 고려된 구성이라고 할 수 없습니다. 이런경우에 사용할 수 있는게 SLB(Server Load Balancer) 입니다. SLB는 서버의 상태를 파악하고 부하를 분산할 수 있는 일종의 Endpoint 역할을 수행합니다.

 

Server Load Balancer (SLB)

SLB는 Alibaba Cloud 에서 제공하는 로드 밸런싱 서비스 입니다. 로드밸런서는 ECS의 상태를 확인(Health Check) 하고 데이터를 분산하여 전달하는 단일 Endpoint 역할을 수행 합니다.

SLB를 구성하게 되면 User는 각각의 서버로 대상을 지정하여 서비스를 받는게 아닌 SLB-1 을 타겟으로 서비스를 요청하게 되는 구조로 변경됩니다. 처음에 언급했던 고가용성(High - Availability) 서비스 구성을 달성할 수 있습니다.

로드밸런서의 구조는 크게 자신이 서비스하는 대상을 정의하는 리스너 와 부하 분산의 대상을 정의하는 서버그룹 으로 나눌 수 있습니다.

리스너 : 프로토콜 및 포트를 사용하여 연결 요청을 확인하는 프로세스 입니다. 로드밸런서에서 서비스 하고자하는 프로토콜과 포트를 지정하는 규칙을 설정합니다.

서버그룹: 하나 이상의 대상을 라우팅하여 부하 분산을 하는데 사용합니다. 서버그룹에 포함되는 서버에 주기적으로 상태를 확인하는 프로세스keepalive 를 통해 상태 확인Health Check을 수행합니다. 상태가 정상인 서버에게만 데이터를 전달합니다.


SLB 인스턴스 유형

SLB는 3가지 종류로 나눌 수 있습니다.

  • Application Load Balancer : HTTP / HTTPS 프로토콜을 사용하여 웹 애플리케이션에 대한 분산처리
  • Network Load Balancer : TCP / UDP 프로토콜을 사용하여 네트워크 기반의 분산처리
  • Classci Load Balancer : 이전 세대의 기본 로드밸런서
특징 ALB NLB CLB
프로토콜 HTTP HTTPS TCP UDP HTTP , HTTPS TCP , UDP
아키텍처 • NFV(Network Function Virtualization) 플랫폼 • NFV(Network Function Virtualization) 플랫폼 • 물리적 기계의 아키텍처 위에 개발됨
전달 기능 • 다중 레이어 7 기능 및 콘텐츠 기반 라우팅 제공
• HTTP 재작성, 리디렉션, 덮어쓰기 및 제한 지원
• 고급 레이어 4 기능 및 TCP 트래픽에 대한 SSL 오프로딩 제공
• 트래픽 급증 시 스로틀링, 연결 드레이닝, 포트 범위별 수신 대기와 같은 기능 지원
• 기본 레이어 4 및 레이어 7 로드 밸런싱 기능 제공
• 도메인 이름 기반 및 URL 기반 포워딩만 지원
처리 속도 느림 빠름 중간
대상 계층 7 4 -
동인 인스턴스로 다중 포트 전달 O O X
IP를 통한 관리 X O X
경로기반 라우팅 O X X
호스트기반 라우팅 O X X

ALB Config

ALB 구성을 위해 아래의 초기 구성을 진행하였습니다.

각 서버에 구동되고 있는 웹서비스에 curl 명령어를 통해 http 서비스를 확인할 수 있습니다.

ALB를 구성하는 전체 절차는 아래와 같습니다.


ALB (Application Load Balancer) 생성

[Server Load balancer] - [ALB] - [Instance] - [Crate ALB]

Parameter Description
Region ALB 인스턴스를 생성할 리전을 선택합니다.
Network Type ALB 인스턴스의 네트워크 유형을 선택합니다. Intranet , Internet
VPC ALB 인스턴스를 배포하려는 VPC를 선택합니다.
Zone Zone 및 vSwitch를 선택합니다. ALB는 멀티존을 지원합니다.
IP Mode ALB 인스턴스에 대한 IP 모드를 선택합니다. - Static IP : 하나의 Zone 에서 하나의 IP 주소만 사용합니다. IP 주소는 변경이 불가능합니다. - Dynamic IP : 각 영역에서 하나이상의 IP 주소를 사용합니다.
IP Version IPv4
Edition ALB 인스턴스의 에디션 선택 - Basic : 도메인명,URL,HTTP 헤더를 기반으로 기본 라우팅을 지원합니다. - Standard : 사용자 지정 TLS, 리디렉션 , Rewirte와 같은 고급 라우팅 기능을 지원합니다. - WAF Enabled : Standard 에서 WAF를 지원합니다. 네트워크 트래픽은 ALB 리스너로 라우팅 되기전에 WAF의 필터링을 거칩니다.
Instance Name ALB 인스턴스의 이름입니다.
Resource Group ALB 인스턴스가 속한 리소스 그룹을 선택합니다.

서버 그룹 (Server Group) 생성

[Server Load balancer] - [ALB] - [Server Groups] - [Create Server Group]

Parameter Description
Server Group Type 서버 그룹 유형 선택 - 서버 : ECS 인스턴스 , ENI 또는 탄력적 컨테이너 인스턴스를 지정하여 백엔드 서버를 추가할 수 있습니다. - IP : IP 주소를 지정하여 백엔드 서버를 추가할 수 있습니다. - Function Compute : FC를 지정하여 백엔드 서버를 추가할 수 있습니다.

Server Group Name 서버 그룹의 이름을 지정합니다.
VPC ECS가 배포된 VPC를 선택합니다.
Backend Server Protocol 백엔드 프로토콜을 선택합니다. HTTP , HTTPS , gRPC
Scheduling Algorithm Weighted Round-Robin Weighted Least Connections Consistent Hash
Resource Group 리소스 그룹을 선택합니다.
Session Persistence 세션 지속성 여부를 선택합니다. 활성화되면 ALB는 클라이언트의 요청을 동일한 백엔드 서버로 전달합니다. - Cookie Persistence : 쿠키 처리 방법을 선택합니다. - Insert Cookie : 클라이언트에 전송되는 첫번째 HTTP , HTTPS 응답에 세션쿠키(ServerID)를 삽입합니다. ALB에 대한 이후 요청에는 이 쿠키가 포함되며 ALB는 쿠키를 기반으로 요청 대상 서버를 결정합니다. - Rewirte Cookie : ALB는 사용자 정의 쿠키를 감지하면 ALB는 원래의 쿠키를 사용자 정의 쿠키로 대체 합니다. ALB에 대한 후속 요청들은 이 사용자 정의 쿠키를 전달합니다.
Persistent Connection ALB는 백엔드 서버와 적절하게 TPC 연결을 유지함, ALB에 요청이 도착하면 ALB는 백엔드와 연결이 유지된 TCP를 통해 백엔드서버로 요청을 전달함, 이로인해 TCP 핸드셰이크와 백엔드 서버의 로드를 줄일 수 있음

서버 그룹을 생성한 후 서버 그룹에 하나 이상의 백엔드 서버를 추가해야합니다.

[Server Load Balancer] - [ALB] - [Server Groups] - [Backend Servers] - [Add Backend Server]

대상이 되는 서버를 선택하고 백엔드 서버에서 열려있는 80 포트를 선택합니다. 가중치 정보는 0이 되면 해당 백엔드 서버로 요청을 전달하지 않습니다.


리스너 (Listener) 생성

[Server Load Balancer] - [ALB] - [Instances] - [Listener] - [Create Listener]

Parameter Description
Listener Protocol 리스너의 프로토콜을 선택합니다. HTTP , HTTPS , QUIC
Listener Port ALB 인스턴스가 LISTEN 하는 포트를 지정합니다. ALB는 지정된 포트에서 요청을 수신한 다음 요청을 백엔드 서버로 전달합니다. 대부분의 경우 HTTP는 80 , HTTPS는 443 포트를 사용합니다. ALB가 수신하는 포트는 고유해야합니다.
Listener Name 리스너의 이름입니다.
Idle Connection Timeout Period 1-60 초 지정한 시간 내에 요청이 수신되지 않으면 ALB는 연결을 닫습니다.
Connection Request Timeout Period 1-180초 요청 제한 시간 내에 백엔드 서버로 부터 응답이 수신되지 않으면 ALB는 클라이언트에 HTTP 504 오류 코드를 반환합니다.
Compression 모든 파일 유형은 Brotli 압축을 지원합니다. 
Gzip 압축을 지원 하는 파일 유형 
- text/xml
- text/plain
- text/css
- application/javascript
- application/x-javascript
- application/rss+xmlapplication/atom+xmlapplication/xmlapplication/json
Add HTTP Header Fields 지원되는 헤더
- Add X-Forwarded-For to Retrieve Client IP: 클라이언트 IP 주소를 검색합니다.
- Add SLB-ID to Retrieve ALB ID: ALB 인스턴스의 ID를 검색합니다.
- Add X-Forwarded-Proto to Retrieve Listening Protocol: 수신 프로토콜을 검색합니다.
- Add X-Forwarded-Port to Retrieve Listening Port: 수신 포트를 검색합니다.
- Add X-Forwarded-Client-srcport to Retrieve Client Port: 클라이언트 포트를 검색합니다.

앞서 생성한 Server Groups 를 선택합니다.


ALB 검증

ALB의 로드 밸런싱 동작을 확인해보겠습니다. 우선 ALB의 주소를 확인합니다.

ALB 인스턴스의 주소로 curl 명령어를 통해 HTTP 접근을 해보면 번갈아가며 접속되는 것을 확인할 수 있습니다. ALB에 의해서 로드밸런싱이 진행되어 2대의 ECS 인스턴스로 부하가 분산되는걸 확인할 수 있습니다.


Forwading Rule Config

ALB의 리스너는 특정 규칙을 가지고, 다른 서버그룹으로 분배하는 기능을 가지고 있습니다.

다만 ALB 인스턴스를 생성할 때 인스턴스의 Edition에 따라 지원하는 기능이 다릅니다. 아래표에서 Edition 별 지원하는 전달 규칙을 확인할 수 있습니다.

항목 Basic Standard / WAF
인바운드 전달 규칙 도메인 이름 , 경로 , HTTP 헤더 도메인 이름 , 경로 , HTTP 헤더, 쿼리 문자열, HTTP 요청 방법, 쿠키, 소스IP
인바운드 동작 Forward , Redirect Forward , Redirect , 고정 응답 반환 , 재작성 , 헤더 추가 , 헤더 제거, 트래픽 제한, 미러 트래픽 , CORS
아웃 바운드 전달 규칙 - 응답 상태 코드 , 응답 해더
아웃바운드 동작 - 헤더 추가 , 헤더 제거

요청하는 URL의 경로가 /dev/ 라면, dev-sg에 포함된 ECS 인스턴스 백엔드로 전달하는 규칙을 생성할 수 있습니다. 이렇게 ALB는 HTTP , HTTPS에 대하여 확장된 기능을 제공하여 원하는 형태로 백엔드 서버에 요청을 전달하는 부하분산이 가능합니다.


NLB Config

Alibaba Cloud에서 제공하는 서비스 중 NLB 서비스를 생성해 보겠습니다. UDP 프로토콜 중 SNMP를 이용하여 부하분산을 진행합니다.


NLB (Network Load Balancer) 생성

[Server Load balancer] - [NLB] - [Instance] - [Crate NLB]

Parameter Description
Region NLB 인스턴스를 만드는 지역을 선택합니다.
Network Type NLB 인스턴스에 대한 네트워크 유형입니다. Intranet , Internet
VPC NLB 인스턴스를 배포하는 VPC 선택
Zone NLB는 다중 영역 배포를 지원합니다.
IP Version IPv4
Instance Name NLB 인스턴스의 이름을 지정합니다.
Resource Group NLB 인스턴스가 속한 리소스 그룹을 선택합니다.
Service-linked Role NLB 인스턴스를 처음 생성할 때 NLB 인스턴스에 대한 서비스 연결 역할을 생성하려면 서비스 연결 역할 생성을 클릭해야합니다.

서버 그룹 (Server Group) 생성

[Server Load balancer] - [NLB] - [Server Groups] - [Create Server Group]

Server Group 생성은 ALB와 동일하기 때문에 생략하며, Create 중 다른 옵션들만 설명합니다.

Parameter Description
IPv6 Support IPv6 활성화 여부를 선택합니다.
Enable Connection Draining Connection Draining 활성화 여부. Connection Draining 이 활성화된 경우 백엔드 서버가 제거되거나 백엔드 서버가 상태확인에 실패한 경우에도 지정된 제한 시간 동안 백엔드 서버에 대한 연결이 열린상태로 유지 됩니다.
Client IP Preservation 클라이언트 IP 주소를 유지할지 여부를 지정합니다. 클라이언트 IP 보존이 활성화된 경우 백엔드 서버는 클라이언트 IP 주소를 검색할 수 있습니다.
Enable All-Port Forwarding All-Port Forwarding 활성화 여부를 지정합니다. 모든 포트 전달을 활성화한 후에는 백엔드 서버를 추가할 때 포트를 지정할 필요가 없습니다. NLB 인스턴스는 Frontend 포트를 기반으로 backend 서버에 요청을 전달합니다.

Health Check 설정과 관련된 옵션이 있는데 비활성화 해줍니다. SNMP는 UDP 프로토콜을 사용하기 때문에 헬스체크 옵션을 해제 했습니다. Health Check 옵션은 HTTP , TCP 프로토콜에 대해서만 지원이 가능합니다.

ALB에서와 마찬가지로 서버 그룹을 생성한 후 서버 그룹에 하나 이상의 백엔드 서버를 추가해야합니다.

[Server Load Balancer] - [NLB] - [Server Groups] - [Backend Servers] - [Add Backend Server]


리스너 (Listener) 생성

[Server Load Balancer] - [NLB] - [Instances] - [Listener] - [Create Listener]

Parameter Description
Listener Protocol 리스너의 프로토콜을 선택합니다. TCP , UDP , TCPSSL
Listen by Port Range 이 기능을 사용하도록 설정하면 NLB 인스턴스는 포트 0에서 포트 65535로 수신하고 NLB 인스턴스의 IP 주소로 수신된 요청을 해당 백엔드 포트로 전달합니다. 포트 매핑은 지원되지 않습니다.
Listener Port 요청을 수신하고 백엔드 서버로 라우팅하는 데 사용되는 프런트엔드 포트를 지정합니다. 일반적으로 사용되는 포트를 선택하거나 포트 번호를 입력할 수 있습니다. 유효한 값: 1~65535.
Listener Name 리스너의 이름을 지정합니다.
Idle Connection Timeout Period 유휴 UDP 연결에 대한 제한 시간을 지정합니다. 제한 시간 내에 요청이 수신되지 않으면 NLB는 현재 연결을 닫습니다. 요청이 수신되면 NLB는 새 연결을 설정합니다.
Limit on New Connections 새 연결 수를 제한할지 여부를 지정합니다.
Enable Proxy Protocol 프록시 프로토콜을 활성화할지 여부를 지정합니다. 프록시 프로토콜이 활성화되면 클라이언트 IP 주소가 백엔드 서버로 전달됩니다.

앞서 생성한 Server Group 을 선택합니다.

위 그림과 같이 NLB가 생성되었으며, 서버그룹에 ECS-1 , ECS-2 가 속해 있습니다.


NLB 검증

snmpget 명령어로 NLB DNS 주소로 시스템 이름을 요청하게 되면 ECS-1 , ECS-2 의 이름이 번갈아 가면서 응답하게 됩니다. NLB를 통해 부하 분산되는 것을 볼 수 있습니다.


Conclusion

ALB는 HTTP와 HTTPS에 특화되어 상세한 제어가 가능한 로드 밸런서이며, NLB는 TCP , UDP 에 대하여 빠른 처리 속도를 지원하는 로드밸런서 입니다. 상황에 맞게 필요한 로드밸런서를 사용하여 서비스에 이용할 수 있으며, 과거 버전인 CLB 사용은 되도록이면 지양하는 편이 좋을듯 합니다. 알리바바 클라우드에서는 ALB와 NLB에 대한 여러 시나리오를 제공하고 있으며, Docs의 자습서를 통해 여러 시나리오에서 어떤 타입의 LB를 사용할지 연습이 필요할 듯합니다.


Reference

 

SLB overview - Server Load Balancer - Alibaba Cloud Documentation Center

Server Load Balancer (SLB) is a service that distributes incoming traffic across backend server groups to increase the throughput of your applications. SLB can also be used to eliminate single points of failure (SPOFs) and improve the availability of appli

www.alibabacloud.com

 

 

What is ALB? - Server Load Balancer - Alibaba Cloud Documentation Center

Application Load Balancer (ALB) is an Alibaba Cloud service that runs at the application layer and is optimized to balance traffic over HTTP, HTTPS, and Quick UDP Internet Connections (QUIC). ALB is highly elastic and can scale on demand to process large v

www.alibabacloud.com

 

 

What is NLB? - Server Load Balancer - Alibaba Cloud Documentation Center

Alibaba Cloud Network Load Balancer (NLB) is a Layer 4 load balancing service intended for the Internet of Everything (IoE) era. NLB offers ultra-high performance and can automatically scale on demand. An NLB instance supports up to 100 million concurrent

www.alibabacloud.com

 

 

FAQ about ALB - Server Load Balancer - Alibaba Cloud Documentation Center

ChinaChina (Chengdu), China (Qingdao), China (Beijing), China (Guangzhou), China (Hangzhou), China (Ulanqab), China (Shanghai), China (Shenzhen), China (Zhangjiakou), and China (Hong Kong)Asia PacificPhilippines (Manila), Indonesia (Jakarta), Japan (Tokyo)

www.alibabacloud.com

 

 

NLB tutorials - Server Load Balancer - Alibaba Cloud Documentation Center

Search How helpful was this page? $!csrfToken.hiddenField What might be the problems? More suggestions? Send Feedback Thank you! We've received your feedback.

www.alibabacloud.com

 

 

ALB tutorials - Server Load Balancer - Alibaba Cloud Documentation Center

Search How helpful was this page? $!csrfToken.hiddenField What might be the problems? More suggestions? Send Feedback Thank you! We've received your feedback.

www.alibabacloud.com

 

Comments