AWS 로드 밸런싱

Joshua_s·2021년 11월 11일
0
post-thumbnail

개념정리

로드밸런싱(Load Balancing)

로드 벨런싱이란 네트워크 트래픽을 하나 이상의 서버나 장비로 분산하기 위해 사용되는 기술, 이를 통하여 외부에서 발생되는 인터넷 트래픽을 여러 소프트웨어나 장비로 분산하여 처리할 수 있음, 이를 수행하는 장비 및 소프트웨어를 로드밸런서라고 함

처리방식

1. Scale-Up
기존 보다 높은 성능을 보유한 서버로 업그레이드 함으로써 문제를 해결하는 방식, 다만 비용이 늘어난다는 단점을 가지고 있음, 하나의 서버에서 웹서비스를 제공하여 서버중지 및 장애로 인해 가용성에 문제가 발생할 수 있음

2. Scale-Out
저렴한 노드 여러개를 하나의 클러스터로 구성하는 방식으로 클러스터로 구성하면 하나의 노드에 문제가 발생하여도 웹서비스가 중단되지 않으므로 가용성이 높아진다. 보통 로드밸런싱은 Scale-Out으로 구성하며 네트워크 트래픽을 Port 단위로 제어하고 트래픽을 분산 처리함으로써 높은 가용성과 부하 분산을 통해 고효율로 제공한다

로드 밸런싱의 방식

1. 라운드 로빈(Round Robin)
Real 서버로 Session을 순차적으로 맺어주는 방식, 연결된 세션의 수와 사관없이 순차적으로 연결 시키므로 세션에 대한 보장을 제공하지 않음

2. 해쉬(Hash)
Hash알고리즘을 사용한 로드 밸런싱 방식, Client와 Server간 연결된 세션을 계속 유지해주는 방식으로 Client가 특정 Server로 연결된 이후 동일 서버로만 연결되는 구조로 세션에대한 보장 제공

3. 리스트 커넥션(Least connection)
세션 수에 고려하여 가장 작은 세션을 보유한 서버로 세션을 맺어주는 연결방식 세션에 대한 보장을 제공하지 않음

4. 리스폰 타임(Response Time)
서버간의 시소스와 커넥션의 차이가 있는 환경에서 사용되는 방식으로 응답시간을 고려하여 빠른 응답시간을 제공하는 서버로 세션을 맺어주며 세션에 대한 보장은 제공하지 않음

AWS ELB(Elastic Load Balancing)

ELB란?

ELB는 단일 혹은 여러 가용 영역에서 EC2 인스턴스 및 컨테이너, IP같은 동일한 서비스를 제공하기 위해 여러 대상으로 어플리케이션, 네트워크 트래픽을 자동 분산 시켜주는 서비스, 목적에 따라 3가지 유형으로 나뉘며 이를 통해 고가용성, 부하분산 ,자동 확대/축소, 보안기능을 제공함

ELB의 종류 및 유형

1. Applicnation Load Balancer
OSI 7계층에서 작동하며 HTTP,HTTPS와 같은 고급 로드 밸런싱에 적합한 서비스, 마이크로 서비스, 컨테이너 기반 어플리케이션등의 서비스에 최적화된 로드 밸런싱을 제공하며 SSL/TLS 암호화 및 프로토콜을 사용하여 보안성도 보장됨

2. Network Load Balancer
OSI 4계층에서 작동되며 TCP 트래픽의 로드 밸런싱에 적합한 서비스, 짧은 지연시간과 초당 수백만개의 요청 처리가 가능하며, 가용 영역당 1개의 정적주소를 사용하면서 트래픽의 변동이 심한 서비스에 최적화

3. Classic Load Balancer
OSI 4계층, 3계층에서 작동되는 서비스로 EC2-Classic 네트워크 내에 구축된 어플리케이션을 대상으로 제공하는 서비스

로드 밸런싱을 인터넷에 연결할 것인지에 따라 Internet-facing 여부를 선택하게 되는데 이는 내부 ELB와 외부 ELB로 구분되며 외부는 인터넷이 연결되며 공인,내부 IP에 사용가능하고 인터넷과 VPC 내부에서 사용됨 내부 ELB는 인터넷 연결이 불가하며 내부IP, VPC내부 영역에서 사용됨

ELB의 주요 특징

1. 상태 확인 서비스 (Health Check)
ELB와 인스턴스의 연결상태를 수시로 체크하여 연결장애나 서비스 가능여부에 대한 체크를 지속적으로 수행함, Health Check의 실패시 해당 인스턴스로 트래픽을 전달하지 않으며 이를 위해 HTTP, HTTPS의 상태확인 빈도, 실패 임꼐치, 성공시 응답 코드를 설정 가능, 실패 원인은 API를 통해 확인이 가능하다. TCP방식의 경우 Port 오픈여부, 연결 가능 여부를 확인, 특정 웹페이지 접속 시도에 따른 응답코드가 정상 반환 여부를 확인해 Healthcheck의 성공 실패 여부를 판단한다.

2. Sticky Session
ELB는 기본적으로 라운드로빈 방식으로 트래픽을 분산한다. 이경우 한번 연결된 세션은 다음 연결시 그대로 연결되지 않으며 다음번 연결시 다른 인스턴스로 연결되어 세션을 유지할 수 없게된다(로그인 및 인증정보와 같은 정보도 끊어짐). 이를 방지하기 위해 Sticky Session을 이용하여 처음 연결된 Client와 별도의 HTTP 기반의 쿠키값을 생성하여 다음번 연결 요청시 처음 접속했던 서버로 계속 연결하도록 트래픽 처리가 된다.

3. 고가용성 구성
ELB는 단일, 여러 가용영역에 있는 여러 대상에 걸쳐 트래픽을 자동 분산할 수 있다. 특히 고가용성 구성을 위해 Route53과 같은 AWS의 다른 서비스와의 연계로 가용성 서비스를 제공할 수 있다.

4. SSL Termination 및 보안 기능
웹 사이트에 SSL인증을 적용하여 HTTPS와 같은 방식ㄱ으로 암호화통신을 하기 위해 개별 웹서버에 별도의 인증서를 구매 후 적용해야된다. 이경우 각 인스턴스에 직접 적용, 갱신, 관리가 필요하게 된다. 또한 개별 EC2 인스턴스가 직접 처리하므로 암, 복호화에 따라 추가 부하가 발생한다. SSL Termination은 이러한 것들을 대신 처리해주는 서비스이다. ACM에서 무료로 발급받을 수 있는 사설 인증서를 등록함으로써 SSL인증서를 이용한 HTTPS 활용 트래픽 암, 복호화 서비스를 제공한다. ACM은 추가적인 인증서 발급 비용이 무료이며 별고 관리도 필요없고 암, 복호화에 따른 부하도 줄일 수 있다.

AWS ELB 테스트

웹서버 구성, 페이지 연결 테스트

1. EC2로 이동-> Linux AMI-> t2.micro후 인스턴스 세부 정보 구성클릭

2. 인스턴스 개수(2개), 네트워크 항목(Tutorial-vpc), 서브넷(Tutorial Public), 퍼블릭IP 자동할당 활성화

3. 스토리지와 테그는 설정하고 싶은대로 하고 보안 그룹으로 가서 기존 보안그룹을 선택(tutorial) 인스턴스 시작

4. SSH로 접속후 httpd를 다운로드 및 시작

httpd 다운로드 : sudo yum install httpd
httpd 시작 : sudo systemctl start httpd
자동시작 : sudo systemctl enable httpd
자동시작확인 : sudo systemctl is-enabled httpd
5. 인스턴스의 퍼블릭 DNS로 접속확인

6. 콘솔로 이동후 httpd를 부팅시 자동시작으로 변경

7. www그룹을 추가하고 이것을 ec2-user에 적용

8. 서버의 접속권한 수정

9. index.html생성 후 내용을 1번 서버에는 instance1 2번은 instance2로 적용


10. 테스트 페이지를 확인 (퍼블릭 DNS)

11. 같은과정으로 instance 2 까지 확인

ELB구성

1. ec2 -> 로드밸런서 -> 로드밸런서 생성

2. Classic Load Balancer 선택

3. 인스턴스를 2개 정확하게 설정 나머지는 상황에 따라

4. DNS 이름을 주소창에 입력(새로고침을 수행하면 1번과 2번 서버가 번갈아가며 동작함을 볼 수있음**

작동 실패시 ELB 확인할 내용들

1. 인스턴스 1개를 종료하여 작동을 멈춤

2. 로드밸런서에 가보면 인스턴스 중 1개의 멈춤을 확인 할 수 있음

3. DNS로 접근한 후 새로고침을 하여도 1개의 서버만 뜨는 것을 확인

4. 다시 인스턴스 실행 (어느정도 시간이 걸림)

5. 다시 로드밸런스의 상태가 돌아온것을 확인할 수 있음

항상 공부한 후 동작을 멈추거나 삭제를 생활화 합시다

profile
devops engineer가 되기 위해

0개의 댓글