네트워크 부하분산 서비스인 Elastic Load Balancing(ELB)에 대해서 알아보겠습니다.
Elastic Load Balancing(ELB) : AWS에서 제공하는 로드 밸런싱 기술이며, 서버의 상태를 파악하고 데이터를 분산하여 전달하는 접점 역할을 수행합니다. 최소 2개의 AZ를 사용하며 고 가용성을 보장합니다.
ELB에는 ALB, NLB, CLB와 같이 총 3가지의 종류가 있는데 이 부분에 대해선 이 게시글을 참고하면 좋을 것 같습니다.
https://cleaning-toolbox.tistory.com/18
글로는 이해하기 힘드니 실습을 통해 알아보겠습니다.
1. AWS CloudFormation으로 들어가 아래의 URL으로 템플릿을 만들어 줍니다.
https://cloudneta-book.s3.ap-northeast-2.amazonaws.com/chapter5/5_lab1-AFOS.yaml
2. 스택이름은 자유롭게 하신 후 파라미터의 키 값은 예전에 만들어둔 키로 설정해줍니다.
3. 나머지는 패스하신 후 스택을 생성해줍니다.
4. AWS EC2서비스에 들어가 인스턴스에 3개가 생성되어있다면 성공입니다.
5. My-EC2 에서 ELB-EC2-1 과 ELB-EC2-2 로 HTTP서비스와 SNMP서비스를 확인해보겠습니다.
6. Xshell7을 실행하여 각각의 EC2인스턴스에 연결해줍니다.
7. 아래의 명령어를 통해 확인해봅니다.
# ELB-EC2-1
[ec2-user@ELB-EC2-1 ~]$ sudo su -
# 디렉터리(폴더) 트리 구조 출력
[root@ELB-EC2-1 ~]# tree /var/www/html
/var/www/html
├── dev
│ └── index.html
├── index.html
└── xff.php
cat /var/www/html/xff.php
# ELB-EC2-2
[ec2-user@ELB-EC2-2 ~]$ sudo su -
[root@ELB-EC2-2 ~]# tree /var/www/html
/var/www/html
├── index.html
├── mgt
│ └── index.html
└── xff.php
cat /var/www/html/xff.php
8. Xshell7에서 My-EC2인스턴스 창에서 아래의 명령어를 통해 확인해봅니다.
# ELB-EC2-1 ELB-EC2-2 퍼블릭IP를 변수에 지정 << 아래 EC21, EC22 IP 정보는 각자 멤버들 실습 결과 IP 정보 입력
EC21=3.34.43.172
EC22=13.209.89.210
echo $EC21
echo $EC22
# ELB-EC2-1 서비스 확인
[root@ip-20-0-0-253 ~]# curl $EC21
<h1>ELB-EC2-1 Web Server</h1>
[root@ip-20-0-0-253 ~]# curl $EC21/dev/
<h1>ELB-EC2-1 Dev Web Page</h1>
9. 다음은 ALB를 생성해보겠습니다. EC2 서비스에서 왼쪽 메뉴에 로드밸런서를 찾아줍니다.
10. 로드 밸런서 생성에서 ALB를 선택한 후 아래에 절차에 따라 천천히 생성해줍니다.
1. 기본 구성
- 이름(ALB-TEST), 인터넷 경계
- 리스너 : 프로토콜(HTTP), 포트(80)
- 가용 영역 : ELB-VPC, 2a 와 2c 선택
2. 보안 설정 구성 : skip
3. 보안 그룹 구성 : 기존보안그룹 (###-ELBSG-### , TCP 80, 22 허용) 선택
4. 라우팅 구성
- 대상 그룹(새 대상 그룹), 이름(ALB-TG), 대상 유형(인스턴스), 프로토콜(HTTP), 포트(80)
- 상태 검사 → 고급 상태 검사 설정 : 정상 임계 값(3), 간격(10), 나머지는 기본값
5. 대상 등록 : 하단 인스턴스 선택 → 등록된 항목에 추가
6. 검토 → 생성
대상 등록에서 이 부분을 꼭 놓치지 않고 진행합니다.
11. 로드 밸런서가 생성되었으면 DNS주소를 따로 복사해둡니다.
12. 다음 Xshell7에서 My-EC2로 확인 & 혹은 자신의 PC 웹브라우저에서 ALB 도메인 접속 후 새로고침을 해봅니다.
# ALB DNS 이름을 변수로 지정
ALB=ALB-TEST-1793200741.ap-northeast-2.elb.amazonaws.com # << ALB 정보는 메모해둔 DNS주소 삽입
echo $ALB
# curl 접속 테스트 - ALB 는 기본 라운드 로빈 방식으로 대상 분산
dig $ALB +short
while true; do dig $ALB +short && echo "------------------------------" && date; sleep 5; done
------------------------------
Sun Jan 24 05:51:25 UTC 2021
13.209.204.23
13.124.52.66
------------------------------
curl $ALB
curl $ALB
for i in {1..20}; do curl $ALB --silent ; done | sort | uniq -c | sort -nr
for i in {1..100}; do curl $ALB --silent ; done | sort | uniq -c | sort -nr
curl $ALB/xff.php ;echo
curl $ALB/xff.php ;echo
# for문을 실행해보시면 My-EC2가 EC21과 EC22에 비슷한 횟수로 접근하는 것을 알 수 있습니다.
# /dev/index.html 접근
curl $ALB/dev/index.html --silent
curl $ALB/dev/index.html --silent
# /mgt/index.html 접근
curl $ALB/mgt/index.html --silent
curl $ALB/mgt/index.html --silent
13. 이렇게 간단하게 ALB가 어떻게 작동하지는에 대해서 알 수 있습니다.
14. 조금 더 깊게 들어가기 위해 로드 밸런서에 리스너를 클릭 후 규칙을 편집해줍니다.
15. 새로운 규칙을 생성해줍니다.
16. 아래의 방식처럼 규칙을 생성해줍니다.
목적: HTTP header 에 이름이 user 이고 값이 beas 인 쿠키(Cookie)가 매칭되면 고정된 응답을 반환
리스너 규칙 편집 : HTTP 헤더 - Cookie 는 user=닉네임 → 고정 응답 반환 200 "Hello 닉네임"
17. Xshell7(My-EC2)에서 아래와 같이 명령어를 입력하고 결과를 확인합니다.
이것이 의미하는 바는 user로 agoo인 Cookie(쿠키)가 매칭되면 고정으로 응답이 반환됩니다.
마찬가지로 특정 IP나 특정 쿼리(문자)로도 고정 응답을 반환할 수 있습니다.
18. 이렇게 실습은 끝이나고 자원들을 삭제해주시면 됩니다.
19. 로드 밸런서를 삭제하시고 로드 밸런서 밑에 있는 대상 그룹도 삭제하시고 CloudFormation에 스택도 삭제해주시면 끝입니다.
특히 ALB에 관해서는 SAA-C02 시험에서도 자주 거론되는 주제이기에 이론적인 부분을 계속해서 추가해보도록 하겠습니다.
'AWS > 실습(입문)' 카테고리의 다른 글
AWS-입문(9주차) Wordpress & Woocommerce (0) | 2021.08.17 |
---|---|
AWS-입문(8주차) EC2 Auto Scaling (0) | 2021.07.31 |
AWS-입문(6주차) 데이터베이스 서비스 (1) | 2021.07.15 |
AWS-입문(5주차) 보안 서비스 (0) | 2021.07.12 |
AWS-입문(4주차) 스토리지 서비스 (0) | 2021.07.01 |