여기서는 ELB를 사용해보겠습니다.
ELB에서도 ALB와 NLB를 사용할 것입니다.
오른쪽 위의 보라색이 ALB이며
오른쪽 아래의 보라색이 NLB입니다.
또한 CloudFormation도 사용해 볼 것입니다.
코드를 기반으로 AWS 인프라 서비스를 자동으로 생성하는 서비스입니다.
IaC
선언된 코드로 자원을 생성
AWS 리소스 간 종속성 관리
인프라 관리의 자동화
템플릿
AWS 인프라를 JSON 또는 YAML 형식의 코드로 정의한 파일
스택
AWS 인프라의 집합
리소스
AWS 리소스
파라미터
스택을 생성할 때 전달하는 매개변수
이벤트
스택에서 발생하는 모든 이벤트
CloudFormation
템플릿을 해석하고 스택을 생성
CloudFormation 템플릿 작성
템플릿 업로드
스택 생성 또는 업데이트
스택 모니터링
스택 삭제
서비스 > 관리 및 거버넌스 > CloudFormation
에 들어가 스택 생성을 누릅니다.
아래의 주소를 URL에 입력하고 다음을 누릅니다.
https://cloudneta-aws-book.s3.ap-northeast-2.amazonaws.com/chapter4/elblab.yaml
이후 스택 이름과 키 페어를 지정해줍니다.
이후 아무 설정 없이 다음을 누르고 전송을 통해 스택을 생성합니다.
인프라가 제대로 설정되어 있는지 확인하겠습니다.
인스턴스로 들어가 SERVER1 인스턴스에 SSH로 접속합니다.
이후 디렉터리 트리 구조를 출력해봅니다.
tree /var/www/html
이후 xff.php 파일 정보를 확인합니다.
cat /var/www/html/xff.php
아래와 같이 되었다면 정상입니다.
SERVER2에 대해서도 똑같이 해봅시다.
이번에는 인스턴스 MyEC2로 들어가 SERVER1, SERVER2, SERVER3 인스턴스에 대해 정상적으로 작동하는지 확인해 보겠습니다.
MyEC2에 SSH로 접속합니다 이후
SERVER1에 접속해봅니다.
curl [SERVER1 주소]
curl [SERVER1 주소]/dev/
curl [SERVER1 주소]/mgt/
서버 에는 mgt폴더가 없으니 Not Found가 떠야 합니다.
이후 SERVER1의 xff.php파일에 접근해보고 SNMP 서비스를 확인합니다.
curl [SERVER1 주소]/xff.php
snmpget -v2c -c public $EC21 1.3.6.1.2.1.1.5.0
snmpget -v2c -c public $EC21 1.3.6.1.2.1.1.3.0
아래와 같이 뜬다면 정상입니다.
SERVER2, SERVER3에 대해서도 똑같이 해봅시다.
ALB를 적용하기 전에 적용할 대상을 설정해야 합니다.
서비스 > 컴퓨티 > EC2 > 로드 밸런싱 > 대상 그룹
으로 들어갑니다.
대상 그룹 생성을 누릅니다.
대상 그룹 이름과 VPC를 설정해줍니다.
이후 모든 인스턴스를 선택하고 아래에 보류 중인 것으로 포함을 누릅니다.
이후 대상 그룹 생성을 누릅니다.
적용할 대상을 설정했으니 로드 밸런스를 적용해보겠습니다.
서비스 > 컴퓨팅 > EC2 > 로드 밸런싱 > 로드 밸런서
로 들어갑니다.
그리고 로드 밸런서 생성을 누릅니다.
Application Load Balancer의 생성을 누릅니다.
이제 로드 밸런서 이름과 VPC, 매핑, 보안 그룹을 설정해 줍니다.
이후 로드 밸런서 생성을 누릅니다.
앞서 ALB가 정상적으로 작동하는지 확인하겠습니다.
MyEC2에 SSH로 접속하고 ALB의 DNS주소를 복사합시다.
이후 로드밸런서에 접속을 해봅시다.
curl [ALB의 DNS 주소]
아래와 같이 접속 할 때 다른 서버에도 요청을 보낸다면 성공입니다.
ALB의 경로 기반 라우팅 기능을 사용해 보겠습니다.
미리 알아둬야 할 사실은 SERVER1과 SERVER2가 가지고 있는 폴더와 파일이 다르다는 것입니다.
그렇기 때문에 경로 기반 라우팅을 통해 특정 파일에 대해서는 특정 인스턴스에만 요청이 가게 만들 것 입니다.
서비스 > 컴퓨팅 > EC2 > 로드 밸런싱 > 대상 그룹
으로 갑니다.
이후 대상 그룹 생성을 누릅니다.
생성과정은 위와 같으나 인스턴스는 SERVER1만 대상 그룹에 포함시킵니다.
이후 SERVER2, SERVER2을 포함하는 대상 그룹을 하나 더 만듭니다.
이후 앞서 만들었던 ALB에서 규칙을 추가해 줄 것입니다.
규칙 추가를 눌러줍니다.
이름을 설정해주고 다음을 누릅니다.
이후 아래와 같이 규칙 조건 유형을 설정하고 옵션을 설정합니다.
이후 규칙 작업 정의에서 작업 유형과 대상 그룹을 설정합니다.
다음을 누르고 생성하면 끝입니다.
위와 같은 방법으로 SERVER2, SERVER3을 대상으로 /mgt/*에 대하여 규칙을 추가해 줍시다.
이제 작동을 확인해봅시다.
아래 명령어들을 여러번 입력해봅시다.
curl [ALB의 DNS 주소]/dev/index.html --silent
curl [ALB의 DNS 주소]/mgt/index.html --silent
Not Found가 나오지 않았다면 정상 작동 하는 것입니다.
먼저 대상 그룹을 생성해 줍니다.
앞에서 만든 것과 차이가 있다면
프로토콜을 UDP로 하고 포트를 161로 설정합니다.
추가로 상태 검사 프로토콜을 HTTP로 합니다.
고급 상태 검사 설정에서 재정의를 선택하고 80을 입력합니다.
이후 모든 인스턴스를 선택하고 대상 그룹에 등록한 뒤 생성합니다.
로드 밸런서를 생성합니다
이번에는 Network Load Balancer를 생성합니다.
앞서 로드 밸런서를 생성할 떄와 같은데 리스너 및 라우팅에서 UPD를 선택하고 포트를 161로 해야합니다.
ALB에서 한 것처럼 동작 확인을 해주면 됩니다.
NLB는 기본적으로 교차 영역 로드 밸런싱이 비활성화 상태입니다. 그래서 균일하게 분배되지 않는 것을 확인할 수 있습니다.
교차 영역 로드 밸런싱을 적용하고 싶다면
로드밸런서에서 속성 탭을 클릭하고 편집을 누릅니다.
이후 교차 영역 로드 밸런싱을 활성해주고 저장해주면 됩니다.
아래 그림은 교차 영역 로드 밸런싱 적용 전과 후를 같이 보여주는 것인데 맨 위만 적용 전이며 나머지는 적용 후입니다. 모든 자원에 대해 골고루 트래픽을 분산시키는 것을 볼 수 있습니다.
ALB는 클라이언트의 주소를 자신의 개인 주소로 바꿔 서버에 요청합니다. 즉, 클라이언트의 주소를 보존하지 않습니다. 만약 클라이언트의 주소를 얻고 싶다면 HTTP헤더 XFF(X-forwarded-for)필드를 이용해야 합니다.
이와 달리 NLB는 클라잉너트의 IP주소를 보존합니다.
사용했던 모든 자원을 삭제해 줍시다.