- AMI에서 제공하는 OS 이미지다.
- ELB 스토리지를 추가한다.
- 오른쪽, 종료시삭제에 체크가 되어있어도, ELB를 스토리지를 보관할 수 있는 방법이 있다.
- 이후 MobaXterm으로 접속해준다.
- 이때, 유저 이름을 ec2-user로해야 접속할 수 있다.
- IP주소로 웹페이지에 접속도 가능하다.
WEB02생성
- opt-in 해서 최근버전의 인스턴스생성 UI로 진행해본다.
- 스크롤을 내려서 AMI를 설정한다.
- 많은 Ubuntu버전을 사용할 수 있고 이중 18.04버전을 사용해준다.
- 인스턴스유형을 프리티어인 t2를 사용한다.
- 가용영역이 총 4가지가 있다.
- 각각 100Km정도 떨어져 있다고 한다. 그래서 만약 천재지변으로 인한 이슈가 생겨도, 어느정도 거리로 떨어져있는 서버는 영향이 적을 것이다. 이는 모두 가용성을 위한 설정이다.
- 보안그룹은 기존에 설정한 SG-WEB을 사용한다.
- 스토리지를 위와 같이 설정한다.
- 위 루트볼륨들을 사용할 수 있다.
- 성능은 io2 > io1> gp3> gp2 순서대로 빠르다.
- 위 4가지 루트볼륨이 SSD를 사용한다.
- 편집을 누르면 파일시스템도 선택할 수 있다.
사용자 정의 데이터에 apaache2 (httpd)를 설치해준다.
- 인스턴스가 잘 생성되었다. 만약 화면에 안나온다면 새로고침 버튼을 누르면 된다.
- 사용자명령어로 입력한 화면은 아니지만 아파치가 잘 설치되기는 했다.
- 로드밸런서는 여러 서버의 상태를 체크하고, 부하가 너무 많다면 골고루 분배하여 부하를 줄이고, 서버가 작동불가상태라면 회선을 끊고, 서버가 복구되면, 다시 회선을 연결하여 멤버에 포함하는 작업을 한다.
- 이는 서버의 무중단 서비스를 위함이며
- 고가용성 (High Ability)를 위함이다.
- EC2 콘솔에서의 로드밸런서 화면이다.
- 로드밸런서의 종류는 현재 위 3가지가 있고,
- 이전세대 로드밸런서 항목을 선택하면 Classic Load Balancer 한가지가 또 나온다.
- 이 이전 로드밸런서는 곧 서비스 종료를 앞두고있기 떄문에 넘어가도록 한다.
- (ALB) L7, Application Layer, 최상위 레이어에서 분산을 해주는 로드밸런서이다.
- 이전 실습에서, Firefox, Chorme, InternetExplorer 등 어플리케이션을 구분해서 분산해줄 수 있다.
- (NLB) L4, Transport Layer에서 데이터를 분산해주는 프로토콜이다.
- Port번호로 부하를 분산해줄 수 있다. (L4스위칭 기능)
- 이 NLB를 생성해본다.
- 이름은 Network Load Balancer라는 뜻으로 ELB-NLB로 설정한다.
Scheme 체계
- Internet facing(인터넷 경계): 밖에서 들어오는 접속을 로드밸런싱한다.
- Internet(내부) : 내부의 접속을 로드밸런싱한다.
IP주소 유형
- IPv4 : IPv4 만 로드밸런싱한다
- DualStack : IPv4, IPv6둘다 서비스
Network Mapping
- 기본VPC는 전세계가 똑같이 가지는 기본설정 VPC이다.
- NLB가 로드밸런싱 하기 위해서는, 가용역역이 같은 곳에 있어야 한다.
- 현재 인스턴스는 2a와 2b에 존재햔다.
- 두 영역을 체크해준다.
Listener and Routing
- 현재 L4스위치기 때문에 Port스위칭를 설정하게 된다.
- 오른쪽 Default Action(기본 작업) 에서 대상그룹을 설정할 수 있지만, 설정이 없다면 아래 링크를 눌러 생성할 수 있다.
대상그룹 생성
- 웹서버이기 떄문에, TCP포트 80(HTTP)를 로드밸런싱한다.
- 현재 VPC는 하나밖에 없고, WEB01, WEB02가 존재하는 VPC를 설정한다.
헬스체크
- 접속신호를 보내서, 적합한 상태 신호로 반응하는지 확인한다.
- 간격을 30초로해서 상태체크를 진행한다. 만약 3번 연속으로 반응에 실패하게 되면,
Fail
상태로 만든다.Fail
상태에 빠지면, 문제가 생긴 서버와Circuit breaker
가 작동하여 불필요한 트래픽의 낭비를 최소화 시킨다.- 정상 임계값과 비정상입계값은 서버마다 다르고, 경력에 의한 경험으로 나오는 설정이다. 현재는 그냥 기본값으로 놔두도록 한다.
- 아까 설정한 VPC의 인스턴스들이 나온다.
- 두 인스턴스들을 체크하고 아래 보류중인 것으로 포함 버틍을 누른다.
- 대상보기에 두 인스턴스가 올라옴을 확인하고, 대상그룹 생성을 진행한다.
- 생성 확인
- 이제 대상그룹을 만들었으니 새고로침을 누르고 설정해준다.
- 나왔다.
- 이제 요약(Summary)를 확인하고 로드밸런서를 생성한다.
- 활성중인것을 확인하다.
- 대상그룹 -> TG-NLB 체크박스 체크 -> 아래 화면에서 대상을 눌렀을 떄, 아래 두 인스턴스의 상태가 Healthy, Un healthy로 나온다.
- 로드밸런서의 DNS이름을 복사해서 웹브라우저로 들어간다.
- WEB01에 접속했다.
- 새로고침을 눌러도 화면이 바뀌지 않는다.
- 이것은 RoundRobin이 아니기 떄문이다. 우리는 실습때 RoundRobin으로 번갈아가며 접속되는것을 확인했지만 , AWS에서는 안되는것이 정상이다.
- 여러 웹 브라우저를 시도해서 모바일 버전에서 WEB02에 들어갈 수 있었다.
ALB VS NLB
- ALB
- Round Robin : 순차적 접근 방식
- NLB
- Least Connection : 세션이 가장 적은쪽에 연결을 시도해주는 방식
대상그룹
- Edit Attribute로 속성을 편집할 수 있다.
- 여기서 Sticky Session을 설정할 수 있다.
- 이번엔 로드밸런서에서 ALB를 생성한다.
- 또 대상그룹TG-ALB를 생성해서 연결해준다.
- 위 이미지를 보면 두 인스턴스가 Healthy로 연결되어있다.
- ALB는 특이하게 보안그룹이 필요하다. 그래서 인바운드 규칙으로 HTTP만 오픈한 SG-ALB를 생성하여 연결한다.
- 로드밸런서 DNS주소로 접근하면 두 서버에 접근할 수 있다.
인스턴스IP주소로 직접접근
- WEB01과 WEB02의 IP주소로 직접 들어가면 웹 서버에 접속할 수 있다.
- 그러나 우리는 ALB를 통해서만 접속할 수 있는 웹서버를 만들어야 한다.
- 따라서 HTTP 보안규칙을 모두 삭제하고, 새로 만들어준다.
- HTTP를 모두 삭제하고 남은 규칙들이다.
- 위와같이 HTTP 규칙을 새로 생성한다.
- 접근 소스 설정을 보안그룹의 SG-ALB를 통해서만 접근할 수 있도록 만들어준다.
- SG-ALB가 적용된 ELB-ALB를 통해서만 HTTP포트로 접근할 수 있게된다.
- 직접 접근은 안되고 있다.
- abc.com/food -> WEB01
- abc.com/sale -> WEB02
- 위와 같은 방법을 경로기반 라우팅인데, 주로 도커나 쿠버네티스에서 사용한다.
WEB02(Ubuntu)서버 접속
- 서버에 접속할 때, 이름을
Ubuntu
로 접속해야 한다.WEB01
sudo mkdir /var/www/html/food
: food 폴더를 만들었다. 이게 주소가 될 것이다.sudo tar -xvf aws.tar -C /var/www/html/food/
: tar 아카이브 파일을 오른쪽 경로에 압축해제한다.
- x : 압축 해제 옵션
- v : 압축해제하는 과정출력
- f : 파일 이름으로 파일 정의
- -C : 목표 경로를 주겠다는 옵션
WEB02
sudo mkdir /var/www/html/sale
sudo tar -xvf azure.tar -C /var/www/html/
- 똑같이 만들어준다.
대상그룹 생성
- 이름은 TG-FOOD로 대상그룹을 만들어준다.
- WEB01만 대상그룹으로 추가해준다!
- 똑같이 WEB02도 TG-SALE로 만들어준다.
로드밸런서 수정
- 규칙을 위와 같이 삽입한다.
- 오타가 있다 foot -> food
결과 확인
- DNS주소 + /food
- DNS주소 + /sale
- 주소에 경로를 추가하여 경로기반 라우팅을 설정하였다.
대상그룹 생성
- WEB01은 똑같이 설정하고 이름을 TG-FIREFOX로 한다.
- 똑같이 WEB02를 설정하고 이름을 TG-MOBILE로 한다.
로드밸런서 설정
- 아까는 경로였지만 이번에는 HTTP 헤더로 설정을 진행한다.
- Mobile을 이렇게 설정하고 FIREFOX도 똑같이 해본다.
- EC2 인스턴스 삭제
- 로드밸런서 삭제
- 대상 그룹 삭제
- 사용자그룹 및 사용자 삭제