<Elastic Load Balancer>
- 확장성 vs 고가용성
- Asia Pacific Region에 Availability Zone이 4개 있는 것이 고가용성
- Availability Zone 하나에 어떤 이상이 생겨서 서버를 못 돌려도 다른 Availability Zone에서 돌리면 됨 -> 안정적인 서버 운영
- 확장성은 수평적 확장성(Horizontal Scalability)과 수직적 확장성(Vertical Scalability) 두 종류가 있음
- 수평적 확장성은 인스턴스를 AMI이로 여러 개 만들어 내는 걸 얘기하고 수직적 확장성은 t2.micro 말고 t2.large t2.2xlarge 처럼 인스턴스는 하나인데 그 성능을 높이는 것을 말함
- load balancer를 쓰는 이유
- 요청 분산(EC2와 연동)
- 단일 액세스 포인트 공개(Route53과 연동)
- 인스턴스에 대한 헬스 체크
- HTTPS 제공(ACM과 연동)
- 고가용성 제공
- 공개 트래픽과 내부 트래픽 관리
- ELB 종류
- Classic Load Balancer - 이제 안 씀
- Application Load Balancer - 우리가 제일 많이 사용할 예정
- Network Load Balancer
- Gateway Load Balancer
- ELB 특징
- HTTP 요청을 여러 타깃 그룹에 나눠줄 수 있음
- 한 머신 안이라도 여러 어플리케이션(컨테이너)에 나눠줄 수 있음
- HTTP/2와 웹소켓 지원
- HTTPS로 리다이렉트 지원
- URL, hostname, query string, header에 기반해서 다른 타깃 그룹으로 보낼 수 있음
- 로드밸런서 사용해보기
- 인스턴스 생성
- OS는 우분투, 인스턴스타입 t2.micro, Key pair는 SSH 안 쓰기 때문에 설정하지 않음
- security group은 기존에 있던 거 선택(http, https, ssh 열려있는 거)
- Advanced details 을 눌러 맨 아래에 있는 Uer data에 아래 내용을 채워넣고 인스턴스는 2개를 켜준다
#!/bin/bash
apt-get update
apt-get install -y nginx
cat <<EOF > /var/www/html/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Nginx</title>
</head>
<body>
<h1>Hello World!</h1>
<p>AWS deployed by Me!</p>
<p>private ip is $(hostname -f)</p>
</body>
</html>
EOF
sudo systemctl start nginx
- 인스턴스가 생성됐다
- 인스턴스 이름이 똑같아서 헷갈리니 각 name 부분에 연필모양을 눌러서 1, 2를 붙여준다
- status check에 초록불이 들어가면 실행하도록 한다
- user data에 넣어준 부분을 실행하느라 시간이 조금 걸린다
- 초록불이 들어오면 먼저 newinstance1에 들어가서 open address를 누른다
- 연결이 거부되는 이유는 https는 막혀있고 http로 들어갈 수 있는데 지금 https로 들어가서 그렇다 s를 지우고 들어가면 user data에 미리 작성했던 내용이 보인다
- newinstance2도 열어보니 프라이빗 아이피가 잘 나오고 있다
- 이렇게 동일한 인스턴스를 띄워봤고 이제 로드밸런서를 붙여보자!
- 왼쪽 카테고리에서 로드밸런서를 클릭하고 Create load balancer 를 클릭한다
- 어플리케이션 로드 밸런스 Create를 클릭한다
- 이름 정하고 Scheme, IP address type은 그대로 한다
- Network mapping은 4개 다 체크해준다
- Security groups는 미리 만들어둔 걸 쓰는데
- 인바운드 규칙은 HTTP 80번 포트고, Source가 Anywhere-IPv4 로 한 것이다
- 그 다음은 타겟그룹 설정이다 먼저 타겟그룹을 만든다
- 인스턴스 클릭 후 타겟 그룹 이름을 정해서 스크롤을 내린다
- 나머지는 다 그대로 하고 Next를 누른다
- 아까 만든 newinstance1,2 를 선택해서 중간에 있는 Include as pending below를 누르면 아래에 선택한 인스턴스가 뜬다 그러고 Create target group을 클릭한다
- 그러면 다시 로드밸런서 만드는 창으로 돌아오고 빨간박스의 새로고침 버튼을 누르면 방금 만든 타겟 그룹이 보인다 그걸 선택한 후에 스크롤을 쭉 내려서 Create load balancer 버튼을 클릭한다
- 로드밸런서가 만들어졌다 조금 기다리면 State가 Active로 바뀐다
- Active가 되면 로드밸런서를 클릭해서 들어간다
- DNS name을 복사해서 주소창에 붙여넣고 엔터를 누른다
- 인스턴스에 로드밸런스가 잘 붙은 것을 확인할 수 있다
- 프라이빗 아이피를 보면 172-31-47-182인 걸 확인할 수 있고 새로고침 누르면 172-31-42-136으로 바뀐다
- 인스턴스1과 2로 번갈아가면서 접속된다
- 만약 인스턴스 하나에 문제가 생겨서 끈다면 새로고침 해도 아이피가 바뀌지 않는다 인스턴스 하나만 돌아가고 있기 때문이다
- 그리고 target group에 가보면 하나가 unused 된 것을 확인할 수 있다
- 로드밸런서는 user가 허가된 모든 포트로 들어오는 걸 받고 ec2와는 80번 포트로만 소통한다
- 그렇기 때문에 지금 인스턴스1,2에 다른 포트는 끊고 로드밸런서를 통해 들어오는 80번 포트만 받도록 바꿔줘야 한다
- ec2-alb 라는 Security group를 새로 만들고 인바운드 규칙으로 Type은 HTTP, Source는 Custom 하고 검색창에서 쭉 내리면 Security group이 있다 그 중에 아까 만든 loadbalancersecurity를 선택하고 Security group을 생성한다
- 그 다음 인스턴스1,2 Security group을 ec2-alb 로 바꿔준다
- ec2-alb 보안그룹을 선택하고 Add 버튼을 누른다
- 기존의 보안그룹은 삭제하고 저장한다
- 이렇게 하면 이제 인스턴스에서 open address 눌러서 들어가면 들어가지지 않음
- 로드밸런서의 DNS name으로 들어가야만 접속 가능함