공부/AWS

ELB

HY13 2020. 12. 31. 18:07

ELB(Elastic Load Balancing)

둘 이상의 가용영역에서  EC2 인스턴스, 컨테이너, IP 주소 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산한다.

이는 등록된 대상의 상태를 모니터링하여 정상 상태인 대상으로만 트래픽을 라우팅한다.

시간이 흐르면서 수신되는 트래픽이 변화함에 따라 ELB가 로드밸런서를 확장한다.

대다수의 워크로드에 맞게 자동으로 조정할 수 있다.

 

이점

1. 로드 밸런서를 사용하면 애플리케이션의 가용성(High Availablity)와 내결함성(Fault Tolerant)이 높아진다

- 가용성: 한곳이 문제가 생가면 다른 곳을 사용하여 계속 사용가능하도록

- 내결함성: 자세하게 모니터링해서 구동중에 있는 웹서버의 내부적으로 문제가 발생하면 정상적인 것을 복제하여 사용

(정상적인 템플릿을 가지고있다가 문제가 발생하면 문제가 발생한 것을 지우고 정상적인 템플릿을 복제하여 사용한다)

 

2. 애플리케이션에 대한 요청의 전체적인 흐름을 방해하지 않고 필요에 따라 로드 밸런서에서 컴퓨팅 리소스를 추가 및 제거할 수 있다.

 

3. 로드 밸런서가 정상적인 대상에만 요청을 보내도록 컴퓨팅 리소스의 상태를 모니터링하는 상태 확인을 구성할 수 있다.

 

로드 밸런서 종류

1. Application Load Balancer: HTTP, HTTPS

2. Network Load Balancer: TCP, TLS, UDP

3. Classic Load Balancer: 이전  세대

 

 

* NLB는 탄력적 IP를 설정할 수 있지만, ALB는 탄력적 IP를 설정할 수 없다.

 

 


ELB 사용전 사전준비 - 인스턴스 생성

템플릿 이점: 프로비저닝 간소화, 권한 간소화

프로비저닝: 미리 설정

 

템플릿 생성

왼쪽 메뉴에서 인스턴스-시작 템플릿을 클릭해준다.

시작 템플릿 생성 버튼 클릭

 

원하는 템플릿 이름 생성

Auto Scaling  체크박스에 체크

 

 

 

AMI - Amazon Linux 2 AMI 선택

인스턴스 유형: t2.micro

키 페어: 만약 키페어 설정을 안했으면 새 키페어 설정 클릭 후 생성 한 다음 새로고침  / 기존 키페어 있으면 키페어 선택

 

네트워크 설정

원하는 네트워크 설정 클릭

보안 그룹 선택 - 생성한 보안그룹이 없으면 생성하고 새로고침 누른다.

default 보안그룹은 보안에 취악하기 때문에 되도록이면 사용하지않는다.

 

스토리지 볼륨은 변경사항 없다.

 

리소스태그

키-값 입력과 리소스 유형에 볼륨을 추가해준다

 

고급 세부 정보

아래 부분에 사용자 데이터 추가

#!/bin/bash
yum -y install httpd 
systemctl start httpd && systemctl enable httpd

 

시작 템플릿 추가 클릭

시작 템플릿 보기 클릭

 

템플릿 생성 완료!!

 

만든 템플릿을 사용하여 인스턴스를 생성해보자.

 

왼쪽 메뉴에서 인스턴스 클릭

인스턴스 시작 드롭다운 클릭 후, 템플릿으로 인스턴스 시작 클릭

 

시작 템플릿 선택

원본 템플릿 - 방금 생성한 템플릿을 선택해준다.

가용영역을 다르게 하기 위해서 인스턴스 개수를 1로 해준다.

아래 인스턴스 세부 정보에서 바꾸고 싶은 내용이 있으면 바꿀 수 있다.

네트워크 설정 부분은 변경 사항이 있다.

 

네트워크 설정

서브넷 클릭 후 가용영역을 2a로 선택해준다.

 

고급세부정보

사용자 데이터에 echo 'WEB01' > /var/www/html/index.html 을 입력해준다.

 

템플릿으로 인스턴스 시작 클릭

시작 템플릿 보기 클릭

 

인스턴스 생성 완료!!

 

 

퍼블릭 IP주소 복사

 

새 창을 열어 아이피 붙여넣은 후 WEB01이라는 문구 나오는지 확인

 


 

또 다른 인스턴스 생성

(다른 서브넷 가용영역을 선택해주기 위해서)

위와 같은 방법으로 템플릿으로 인스턴스 생성 클릭

 

네트워크 설정

서브넷: 2c로 선택

 

리소스 태그

키-값에서 값:WEB02로 수정

 

고급 세부 정보

사용자 데이터에 echo 'WEB02' > /var/www/html/index.html 을 입력해준다.

 

템플릿으로 인스턴스 시작 클릭

시작 템플릿 보기 클릭

 

인스턴스 생성 완료!!

 

퍼블릭 IP주소 복사

새 창을 열어 아이피 붙여넣은 후 WEB02이라는 문구 나오는지 확인


1. CLB

CLB 생성

 

CLB 생성

왼쪽 메뉴에서 로드벨런싱 - 로드밸런싱 클릭

로드밸런서 생성 버튼 클릭

로드벨런서 유형: Classic Load Balancer 생성 클릭

1단계)

원하는 로드 밸런서 이름 설정

고급 VPC 구성 활성화 체크박스 체크

사용 가능한 서브넷: 2a, 2c +버튼 클릭

 

2단계)

지금 만드는 보안그룹은 CLB를 위한 보안그룹

SSH를 열어봤자 22번포트로 접근할 수 없다. (80포트만 열어주자 - 보안그룹이 들어올 수 있도록)

HTTP만 열어주면된다.(HTTP는 80포트)

다음 버튼 클릭

 

3단계)

HTTPS 설정하지 않으면 경고문구가 뜨는데 무시하고 다음으로 넘어가자

 

 

4단계)

5초동안 응답 2번 실패시 fail, 10번안에 응답이 왔으면 성공

초보자는 디폴트 값으로 설정한다

다음 버튼 클릭

 

단계 5)

인스턴스 두개 체크

 

 

단계 6)

변경사항 없음

 

단계 7)

검토 후 생성

 

로드벨런서 생성완료!!


방금 만든 CLB 로드밸런서 클릭 후 설명부분을 보자.

여기서 DNS는 엔드포인트이다.

CName: 도메인과 도메인을 연결

DNS를 복사해서 새창을 열어 붙여넣기를 하면 WEB01과 WEB02가 새로고침할때마다 바뀌면서 나타난다.

=> 라운드 로빈 방식 이라고 한다. (새로고침할때마다 왔다갔다 하면서 변하는 것)

라운드 로빈방식 때문에 CLB를 거의 사용하지않는다.

 

로드벨런서를 사용하는 이유는 부하를 줄이기 위해서이지만 CLB는 라운드로빈 때문에 부하 감소에 도움이 되지 않는다.

 

 

 

 

Q) 보안그룹을 활용해서 두개의 퍼블릭 아이피(WEB01, WEB02)로 접속이 안되게 만들어보자.

왼쪽 메뉴에서 보안그룹 클릭

SG-WEB 클릭 후 인바운드 규칙 편집 클릭

 

 

SG-WEB은 불특정 다수가 들어있다

HTTP - 소스에 SG-ELB추가(불특정 다수는 못들어오고 ELB만 들어올 수 있도록 변경)

SSH - 소스유형: 내 IP로 변경(누군가가 접속 시도도 못하게 변경)

규칙 저장 클릭

 

이제 퍼블릭 아이피에 접속이 불가능하다.

CLB DNS로 접속은 가능


WEB01 또는 WEB02 만 뜨도록, 새로고침해도 움직이지 않도록 변경해보자.

(세션 고정; sticky, stickiness)

왼쪽 탭의 로드 벨런서 클릭

MY-CLB 클릭 후 아래 설명 클릭

포트 구성에서 고정 편집 클릭

고정편집에서 Load Balancer 생성 쿠키 고정 활성화를 선택하고, 원하는 만료기간을 설정해준다.

 

이제 120초(2분) 전까지는 페이지가 고정되고(stickiness), 120초 후에 변경된다.

변경된 후 다시 120초 후에 변경된다.

 

 

 

 

 

 

2. NLB

NLB는 세션이 적은 쪽으로 트래픽을 몰아준다.

리디렉션: 방향성 제시

TCP, UDP 프로토콜을 이용해 리디렉션 (부하를 피하고 분산시켜준다.)

Layer 4에서 제어(Layer 4에서는 TCP, UDP 포트번호 관리)

부하를 피하고 분산시켜준다.

 

NLB 생성

로드벨런서 유형: Network Load Balancer 생성 클릭

  CLB NLB ALB
대상 그룹 X O O
보안 그룹 O X O

대상 그룹: 대상 그룹에 등록된 대상으로 요청을 라우팅

보안 그룹: ALB에서 HTTPS 프로토콜 선택시 보안 그룹 선택 필수

 

 

1 단계)

- 기본구성

이름)

원하는 이름 생성

 

체계)

인터넷 경계: 인터넷을 통해 클라이언트의 요청을 대상으로 라우팅한다. (퍼블릭IP, 프라이빗 IP 모두 사용)

내부: 로드밸런서는 프라이빗 IP 주소만 사용하여 요청을 대상으로 라우팅한다.

       (로드 밸런서를 위한 VPC에 액세스하여 클라이언트의 요청만 라우팅할 수 있다)

        

IP 주소 유형)

IPv4: 클라이언트가 IPv4 주소로 로드밸런서와 통신하는 경우

듀얼스택(dualstack): 클라이언트가 로드밸런서와 통신할 때 IPv4 및 IPv6 주소를 둘다 사용하는 경우

* 로드 밸런서가 내부 로드 밸런서일 경우 IPv4 선택

(IPv6는 NAT게이트웨이가 지원되지 않으며, VPC는 IPv6에 대해 탄력적 IP 주소를 지원하지 않는다)

 

 

다음 클릭

 

 

VPC: EC2인스턴스에서 사용한 VPC 선택

가용영역: EC2 인스턴스를 시작할 때 사용한 각 가용 영역 선택한 후 가용영역에 대한 하나의 퍼블릭 서브넷 선택

             기본적으로 가용영역에 대한 서브넷의 각 로드밸런서 노드에 IPv4 주소를 할당한다.

             인터넷 경계 로드밸런서 생성하는 경우, 각 가용영역에 대해 탄력적 IP주소 선택 가능 -> 고정IP 주소 제공됨

 

리스너: 포트 80에서 TCP 트래픽 수락 - 기본값으로 유지

 

다음 클릭

 

 

2 단계)

다음 클릭 (경고 무시)

 

3 단계)

대상 그룹 이름 설정

상태검사 - 고급 상태 검사 설정 

30초에 한번씩 시도 하는데 10초동안 한번 시도할때마다 3초안에 대답을 3번 다 하면 성공, 못하면 실패

라는 뜻이다.

다음 클릭

 

 

4 단계)

스턴스 WEB01과 WEB02를 선택한 후 등록된 항목에 추가 버튼 클릭하면, 등록된 대상에 등록이 된 모습을 볼 수 있다.

다음 클릭

 

5 단계) 

다음 클릭

 

네트워크 로드 밸런서 생성 완료!!


왼쪽 목록에서 대상그룹 클릭

방금 생성한 대상그룹 클릭

상태가 healthy인지 확인해준다.

 

 

왼쪽 목록의 로드 밸런서 클릭 

MY-NLB 클릭 후 아래 설명 부분의 DNS 복사

새 창을 열어서 DNS 붙여넣기

-> WEB01 또는 WEB02만 뜬다. 

=> Least Connection 방식이라고 한다.

 

 

 

 

 

 

3. ALB

1. 경로기반 리디렉션

2. 컨텐츠 스위칭

 

ALB 생성

왼쪽 목록에서 로드벨런서 클릭

로드벨런서 생성 클릭

Load Balancer 유형: Application Load Balacer 생성  클릭

 

 

1단계)

- 기본구성

이름)

원하는 이름 생성

 

체계)

인터넷 경계: 인터넷을 통해 클라이언트의 요청을 대상으로 라우팅한다. (퍼블릭IP, 프라이빗 IP 모두 사용)

내부: 로드밸런서는 프라이빗 IP 주소만 사용하여 요청을 대상으로 라우팅한다.

       (로드 밸런서를 위한 VPC에 액세스하여 클라이언트의 요청만 라우팅할 수 있다)

        

IP 주소 유형)

IPv4: 클라이언트가 IPv4 주소로 로드밸런서와 통신하는 경우

듀얼스택(dualstack): 클라이언트가 로드밸런서와 통신할 때 IPv4 및 IPv6 주소를 둘다 사용하는 경우

* 로드 밸런서가 내부 로드 밸런서일 경우 IPv4 선택

(IPv6는 NAT게이트웨이가 지원되지 않으며, VPC는 IPv6에 대해 탄력적 IP 주소를 지원하지 않는다)

 

- 리스너

기본값은 포트 80에서 HTTP 트래픽을 수락하는 리스터

포트 443에서 HTTPS 트래픽을 수락하는 리스너 추가 가능

 

 

- 가용영역

활성화할 서브넷을 영역당 하나 선택

로드 밸런서에 대해 듀얼 스택 모드를 사용하도록 설정한 경우에는 연결된 IPv6 CIDR 블록이 있는 서브넷 선택

(여기서는 ipv4)

 

2a, 2c 선택

 

 

2 단계)

1. 이전 단계에서 HTTPS 리스너를 생성한 경우 필수 보안 설정을 구성

SSL 인증서를 반드시 배포해야한다.

로드밸런서는 이 SSL 인증서를 사용해 연결을 종료하고 대상으로 전송하기 전에 클라이언트의 요청을 해독한다.

 

인증서 및 보안 정책을 구성하려면

  • AWS Certificate Manager를 사용하여 인증서를 생성하거나 가져왔다면 Choose a certificate from (ACM에서 인증서 선택)를 선택한 후 인증서 이름에서 인증서를 선택하십시오.
  • IAM을 사용하여 인증서를 업로드했다면 Choose a certificate from IAM(에서 인증서 선택)을 선택한 후 인증서 이름에서 인증서를 선택하십시오.

2. HTTP 리스너만 생성한 경우

경고 문구가 뜨면 무시 후 다음 클릭

 

 

3 단계)

 

해당 보안그룹 없을 시

보안 그룹은 로드 밸런서가 리스너 포트 및 상태 확인 포트에서 등록된 대상과 통신할 수 있도록 허용해야한다.

 

기존에 만들어 둔 보안 그룹 있을 시

 

 

4 단계)

대상 그룹은 기본 리스너 규칙의 대상그룹으로 사용되며, 이 규칙은 요청을 대상 그룹에 전달

대상그룹 이름: TG-ALB

대상 유형:

- 인스턴스: 인스턴스 ID 기준으로 대상 등록

- IP: IP 주소 등록

- Lambda함수: lambda함수 등록

 

여기서 인스턴스 유형 선택 - 인스턴스 WEB01, WEB02(80포트를 열고있다)

 

 

다음 클릭

 

 

 

5 단계)

대상 그룹의 대상 유형에 따라 대상을 대상 그룹에 등록하는 방법이 결정된다

 

- 인스턴스 ID로 대상을 등록

   1. 인스턴스에서 인스턴스를 하나 이상 선택

   2. 인스턴스 리스너 포트를 입력한 다음 등록된 항목에 추가 버튼 클릭

   3. 인스턴스 등록을 마치면 다음 클릭

 

- IP 주소를 등록

   1. 등록할 각 IP 주소에 대해 다음 수행

      - IP 주소가 대상 그룹 VPC의 서브넷에서 온 경우 Network에서 VPC 선택, 그렇지 않은 경우 Other private IP address 선택

      - IP에 IP 주소 입력

      - 포트에 포트 입력

    2. 목록에 IP 주소를 추가했으면 다음 클릭

 

- Lambda 함수를 등록

     1. Lambda함수에 대해 다음 중 하나 수행

        - Lambda 함수 선택

        - 새 Lambda 함수를 생성하고 선택

        - 대상 그룹을 생성한 후 Lambda 함수를 등록

 

 

인스턴스 WEB01과 WEB02를 선택한 후 등록된 항목에 추가 버튼 클릭

다음 클릭

 

6단계)

생성 클릭

 

 

로드밸런스 생성 완료!!

 

 

 

왼쪽 메뉴에 대상 그룹 클릭

방금 만든 TG-ALB 클릭

아래 대상 클릭 후 인스턴스 상태가 healthy인지 확인

 

healthy상태로 변경 되었으면 왼쪽 메뉴의 로드벨런서 클릭

MY-ALC 클릭 후 아래 설명 부분에 DNS 이름 복사 

새 창을 열어서 DNS이름 붙여넣기

=> 라운드 로빈 방식 적용됨 - ALB는 L7(경로기반 리디렉션)이므로 CLB(L4)와는 다르다.

 

CLB에서는 라운드 로빈이 주 기능

ALB에서는 라운드 로빈은 부 기능, 주 기능은 경로기반 리디렉션

 

 


왼쪽 목록에서 인스턴스 클릭

WEB01이름을 WEB01(FOOD)로 변경

WEB02이름을 WEB02(SALE)로 변경

 

Food 는 Food 쪽으로, Sale은 Sale 쪽으로 잘 이동하는 지 확인해보자.

 

MobaXterm을 열어준다

WEB01의 퍼블릭IP를 이용하여 SSH 연결

WEB02도 같은 방법으로 SSH 연결을 시켜준다.

 

WEB01 세팅을 해보자.

만약 FOOD(식품사업부)에서 food라는 문자를 보면 잘 접속했다는 것을 확인할 수 있다.

[ec2-user@ip-172-31-8-66 ~]$ cd /var/www/html
[ec2-user@ip-172-31-8-66 html]$ ls
index.html
[ec2-user@ip-172-31-8-66 html]$ sudo mkdir food
[ec2-user@ip-172-31-8-66 html]$ ls
food index.html
[ec2-user@ip-172-31-8-66 html]$ cd food/
[ec2-user@ip-172-31-8-66 food]$ sudo vi index.html
Food                                                                     

만약Sale(판매사업부)에서 Sale라는 문자를 보면 잘 접속했다는 것을 확인할 수 있다.

[ec2-user@ip-172-31-32-255 ~]$ cd /var/www/html
[ec2-user@ip-172-31-32-255 html]$ ls index.html
[ec2-user@ip-172-31-32-255 html]$ sudo mkdir sale
[ec2-user@ip-172-31-32-255 html]$ cd sale/
[ec2-user@ip-172-31-32-255 sale]$ sudo vi index.html
Sale
[ec2-user@ip-172-31-32-255 sale]$

 

왼쪽 목록에서 대상그룹클릭

WEB01의 대상그룹 생성

대상그룹 생성 클릭

 

다음 버튼 클릭

 

WEB01 선택 

아래에 보류 중인 것으로 포함 버튼 클릭

대상 그룹 생성 클릭

 

 

WEB02 대상그룹 생성

대상그룹 생성 클릭

 

원하는 이름의 대상 그룹 입력

다음 클릭

 

WEB02 클릭 

아래에 보류 중인 것으로 포함 버튼 클릭

 

 

 

왼쪽 목록의 로드 벨런서 클릭

MY-ALB 선택

아래 부분의 리스너 클릭

 

리스너 부분에 규칙 - TG-ALB 규칙보기/편집 클릭

+규칙 삽입 클릭

경로 클릭

경로에 /food 삽입

작업추가에 전달대상 클릭

전달대상: TG-FOOD 선택

저장 버튼 클릭

 

규칙삽입 클릭

경로 클릭

경로: /sale 입력

작업 추가 클릭

전달대상 클릭

전달대상: TG-SALE

저장버튼 클릭

 

규칙 옆에 뒤로가기 버튼 클릭

 

아래 설명 부분에 DNS 이름 복사

새 창 열어서 DNS 이름 붙여넣기/food 입력

 

아래와 같이 food라는 문구를 볼 수 있다.

 DNS 이름 /sale 로 변경하면 sale이라는 문구를 확인할 수 있다.

 

 

왼쪽 목록에 템플릿 생성 클릭

시작 템플릿 생성 클릭

 

원본 템플릿 클릭

 

 

 

 

고급 세부 정보

사용자 데이터 내용에 추가 

echo 'WEB03' > /var/www/html/index.html

mkdir /var/www/html/sale

echo 'SALE02' > /var/www/html/sale/index.html

 

 

왼쪽 목록에 대상그룹 클릭

TG-SALE에 방금 만든 템플릿 추가

 

TG-SALE 클릭

대상 등록 클릭

 

 

 

 

 

 

'공부 > AWS' 카테고리의 다른 글

RDS  (0) 2021.01.04
ELB - ALB(2)  (0) 2021.01.04
IAM  (0) 2020.12.31
EBS  (0) 2020.12.30
보안그룹(Security Group) / NAT Gateway  (0) 2020.12.30