이 글은 전공수업에서 배운 내용을 복습하는 글입니다.
네트워크 기술의 일종
● 네트워크 트래픽을 하나 이상의 서버나 장비로
분산하는 기술
● 로드 밸런서(load balancer): 로드 밸런싱을 수행하는
SW, HW
ELB는 AWS의 로드밸런서
트래픽 분산 뿐만 아니라
같은 기능을 제공한다.
세 종류가 있다.
EC2-classic 네트워크 내에 구축된 application 대상
OSI 4-layer (transport layer), 3-layer (network layer)에서 작동
OSI 4-layer (transport layer)에서 작동, TCP 트래픽 로드
밸런싱
짧은 지연 시간
OSI layer의 7번째 application layer에서 작동: HTTP/HTTPS
request → listner rule 결정 → target group에서 target 결정
트래픽을 클라이언트에서 받아서 target group의 인스턴스에 적절히 분산한다.
가용영역을 여러개 활성화 시켜서 한 가용영역이 문제가 생겨도 다른 가용영역의 인스턴스로 연결 시켜줄 수 있다!!!
○ 모든 AZ에 등록된 대상으로 트래픽 분산
○ Application load balancer에서는 항상 활성화 상태
○ Network load balancer에서는 기본적으로 비활성화 상태
예시그림 (발그림)
이번 실습은 vpc에 각각 다른 가용영역에 서브넷을 한개씩 만들고
각 서브넷 마다 인스턴스를 만든 다음 elb가 트래픽을 분산시키는지 확인하는 실습을 하겠습니다~~~
vpc로 들어갑니다.
5단계까지는 저 네모에서 각 단계에 맞는 것을 찾아서 들어가면됩니다.
먼저 vpc로 들어갑니다.
원하는 범위의 IPv4 CIDR 블록을 설정합니다.
■ IP 주소 할당 방법
■ 비트단위, 접두어 기반의 IP 주소 표준 분석 방식
■ 일련의 주소를 무리 지어 하나의 라우팅 테이블 항목에 넣어 라우팅 실행
■ 사이더 블록: A.B.C.D/N → N은 0 ~ 32, N은 주소의 왼쪽부터 세어서 공유하는 초기 비트의 수
10.0.0.0/16=> 10.0.0.0~10.0.255.255
10.0.0.0/24=> 10.0.0.0~10.0.0.255
계산해주는 사이트 >>https://www.ipaddressguide.com/cidr
아까 만든 vpc를 선택!
이 vpc에 두개의 서브넷을 만들겁니다.
하나는 10.0.1.0/24 그리고 가용영역 2a
다른 하나는 10.0.2.0/24, 가용영역 2c로 설정합니다.
다른 CIDR 블록 범위와 가용영역으로 해도 됩니다.
다만....
vpc의 CIDR 범위를 넘어가면 당연히 안됩니다.
vpc를 인터넷과 연결해줄 게이트웨이를 만듭니다. 맘에드는 이름으로 하세요
아까만든 vpc로 라우팅테이블을 만듭니다.
서브넷 연결 >명시적 서브넷 연결에서 서브넷 연결 편집 클릭
만들었던 서브넷들을 선택하고 연결 저장 을 클릭합니다.
라우팅 > 라우팅 편집에서 인터넷 게이트웨이를 추가합니다.
왼쪽 메뉴에 보안 카테고리에 보안 그룹을 클릭한 후 생성합니다.
이름과 설명을 적절하게 쓰고
vpc를 우리가 만든 vpc로 설정한 후
인바운드 규칙을 설정합니다.
Http는 인터넷 연결을 위해서
ssh는 인스턴스 연결을 위해서 필요합니다.
이제 vpc를 나오고 서비스에서 ec2로 들어간 후
인스턴스를 생성합니다.
저는 리눅스로 했습니다.실습이니까 프리티어 선택하시면 됩니다.
여기서 세부정보구성에서 네트워크를 우리가 만들었던 vpc로 설정하고
서브넷을 가용영역 2a인 것으로 설정합니다.
보안 그룹 구성에서 우리가 만들었던 보안그룹을 선택합니다.
인스턴스가 만들어졌으면 탄력적 ip를 연결합니다.
그 후 인스턴스에 lamp서버를 만들어서 테스트용으로 index.html을 만드는 과정을 수행합니다.
sudo yum update -y
sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
sudo yum install -y httpd mariadb-server
sudo systemctl start httpd
sudo systemctl enable httpd
cd /var/www
sudo chown ec2-user html
이 과정을 수행 하신후에 탄력적 ip주소로 연결했을 때
아래 화면이 뜨면 성공입니다.
저는 php파일로 아이피 어드레스를 나타내는 myip.php 라는 파일을 만들었습니다.
/var/www/html 폴더에 vi편집기로 아래 코드를 칩시다!
<?php echo "Hello! My Ip addressis:".$_SERVER['SERVER_ADDR']; ?>
다 완료했으면 인스턴스를 중지합니다.중지를 눌러야지 종료하면 안됩니다.
중지되었으면 작업 > 이미지 및 템플릿 > 이미지 생성을 누릅니다.
(아래 스크린샷의 인스턴스와 실습용 인스턴스가 다릅니다. 실습용을 중지하고 다시 켜기 귀찮아서 이미 중지되어 있는 것을 했습니다. 제 실습용 인스턴슨느 elb와 elb2입니다. 혹시 헷갈리실까봐 씁니다. )
이미지를 저장합니다.
저장된 이미지는 왼쪽 메뉴의 이미지카테고리에 AMU에서 확인할 수 있습니다.
이제 이 이미지로 똑같은 인스턴스를 만들 수 있습니다.
이미지가 만들어졌다면 인스턴스 시작을 누릅니다.
그리고 왼쪽 메뉴에서 나의 ami를 누른후 방금 만든 이미지를 누릅니다.
다시 우리가 만든 vpc를 선택하고 아까 만든 인스턴스와 다른 서브넷을 선택합니다.
그 후 탄력적 ip를 재연결 허용을 체크한 후 새로 만든 인스턴스에 연결합니다.
이 아이피에 접속해서 testpage 가 나오는지 확인해봅시다.
똑같은 페이지가 나와야 정상입니다.
그 후 중지된 인스턴스를 실행시킵니다.
즉 우리가 만든 서브넷의 인스턴스들을 모두 활성화 시킵니다.
길었습니다.... 이제 로드밸런서만들기만 남았습니다.!!!
같은 ec2서비스에서 메뉴에 로드밸런서 카테고리에서 로드밸런서를 클릭하고 로드밸런서 생성을 누릅니다.
우리가 만들어야 할 것은 applciation load balancer 입니다.
원하는 이름을 적고
로드밸런서의 타입은 internet facing으로 합니다.
internal은 private ip 만을 사용해서 내부에서 로드밸런싱을 하는 것이고
internet facing은 인터넷에서 트래픽을 받아와서 public ip와 private ip 둘다 사용해서 로드밸런싱을 하는 것 입니다.
vpc를 우리가 만든 vpc로 선택하고
우리가 만든 모든 서브넷을 체크합니다.
보안 그룹도 우리가 만든걸로 ㄱㄱ
아래가 리스너인데 이것은 제가 자세히는 모르고 더 공부해봐야겠지만 설정한 포트로 온 것을 지정한 그룹에게 전달해 주는 것을 설정하는 것으로 알고 있습니다.
create target group을 누릅니다.
target type을 인스턴스로
이름을 정하고 http 80
vpc는 우리가 만들었던 것으로.
HTTP1로 HTTP1로 하면 HTTP2도 받습니다. (라고 써있네요.)
그리고 아래에서 헬스체크 프로토콜을 http로 하고 path를 /로 한 후
advanced setting을 읽어봅시다.
여기서는 aws ELB의 기능인 헬스체크에 대한 설정을 확인할 수 있습니다.
각 항목은 읽어보면 어렵지 않게 이해하실 수 있습니다^^
그 후 Register targets으로 넘어갑시다~~!
넘어가면 아마 인스턴스 두개가 있을텐데 모두 체크합시다.
그 후 include as pending below를 누른 후
아래에 추가가 되엇는지 확인한 후 완료합니다.
자... 그럼 이제 위에 브라우저 탭에서 로드밸런서 탭으로 다시 돌아갑시다..
로드밸런서 탭으로 돌아왔다면
targetgroup에서 옆에 새로고침을 누르면 우리가 만들었던 타겟 그룹이 생깁니다.
그것을 누르고
아래에서 create load balancer 를 누르면...로드밸런서 완성입니다!!!
만들어진 로드밸런서를 클릭합니다
DNS이름을 복사한 후 브라우저주소창에 붙여넣기해봅시다.
오???우리가 만들었었던 인스턴스의 테스트페이지가 뜨네요.
그럼 뒤에 /myip.php를 눌러서 아이피를 확인해봅시다.
여러번 새로고침해봅시다.
아이피가 바뀝니다. 즉 . 로드밸런서가 트래픽을 두개의 가용영역의 인스턴스에게 분배하고 있다는 것을 알 수 있습니다.
앞에서 그렸던 것처럼 되는 것이지요.
그럼 긴 글 읽어주셔서 감사합니다.
아 그리고 만들었던 것들을 역순으로 다 삭제하는 것이. 지갑에 좋습니다.