01. Java
02. git
03. Database
04. Jsp [Server]
05. HTML,CSS
07. JS
06. 미니프로젝트-2W
08. SpringFramework , SrpingBoot
19. 중간프로젝트 (1M)
10. Linux 명령어
11. AWS(v)
12. React JS [Front-end]
13. DevOps - Docker
14. App - Android
15. 최종프로젝트 (1M)
로드 밸런서는 서버의 트래픽을 분산하는 역할
고가용성
- 장애를 극복할 수 있는 능력
- 서버를 더 좋은 스펙으로 사용하는 것
- 서버부하를 분산하는 것
- EC2의 프로토콜, 포트, 엔드포인트를 확인하여 상태 확인
어플리케이션 로드밸런서(ALB)
- Http 전용 로드밸런서네트워크 로드밸런서(NLB)
게이트웨이 로드밸런서(GLB)
로드밸런서를 사용하면 MSA아키텍쳐의 호환이 가능
MSA아키텍쳐
- URL에 따른 라우팅이가능
- URL호스트에 따른 라우팅이 가능
- 쿼리스트링과 헤더에 따른 라우팅이 가능
EC2 파트
- EC2인스턴스 2개 생성
- 보안그룹 새롭게 생성 - http, ssh 허용
- user data에는 아래구문 추가
#!/bin/bash sudo apt-get update sudo apt-get install -y apache2 apache2 -version sudo service apache2 start sudo chmod 777 /var/www/html/index.html echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html
- 브라우저를 통해 EC2동작 확인
로드밸런싱 파트
- 로드밸런싱 탭으로 들어간 후 ALB클릭
- 이름은 소문자로 입력
- 네트워킹은 가용영역이 최소 2개이 상 필요하며 서브넷은 모두 선택
- 없다면 생성
- VPC로 들어가서 서브넷으로 들어가서 가용영역 설정
- 로드밸런서의 보안그룹
- HTTP만 허용하는 보안그룹 새롭게 생성
- demo-elb-security / 인바운드 0.0.0.0/0
- 리스너 라우터 그룹설정
- 대상그룹은 로드밸런서가 연결할 뒤에 있는 서버
- 대상그룹 생성 (EC2-Instance)
- 대상그룹설정에 Instance를 설정
- 프로토콜은 HTTP 80으로 유지
- 대상그룹으로 들어간 후 대상그룹에 EC2인스턴스 추가
- 등록된 대상그룹에서 인스턴스를 추가하는 작업 필요
- 로드밸런서 생성
- 엔드포인트 주소(DNS Name)를 확인하고 브라우저에서 연결
로드밸런서 요청 처리
- 로드밸런서로 들어오는 요청
- 퍼블릭 IP를 통해 접근하는 요청
- EC2의 보안그룹으로 이동
- EC2의 기존 Http요청의 0.0.0.0/0을 삭제
- 새로운 Http요청을 만드는데 아래쪽에 있는 로드밸런서 그룹 허용
- 브라우저에서는 EC2를 통해서 접근할 수 없음
- 오직 로드밸런서를 통해서 접근 가능
- 로드밸런스로 들어간 후 Listeners항목 선택
- Rules(규칙) 탭 접근
- Manage rules에선 추가적인 규칙편집 가능
- 규칙 추가
- 이름 error에 대한 요청 추가
- 규칙조건 - 경로/error
- 대상그룹으로 전달 선택
- 규칙작업정의 - 고정 응답반환
- ResponseBody에 잘못된 요청 메시지 추가
- 브라우저에서 결과 확인
로드밸런서에 요청이 들어갈 떄, 백엔드의 동일한 EC2로 연결하는 방법 제공
예를 들어, A사람이 EC1으로 연결했었을때, 동일한 클라이언트에서 요청이 들어오면 다시 EC1으로 연결
쿠키
- 애플리케이션 기반 쿠키(토큰) : 애플리케이션에서 직접 쿠키를 생성하고, 로드밸런서에 입력하여 유지시키는 방식
- 로드밸런서 발행 쿠키 : 로드밸런서가 자동으로 쿠키를 생성하고, 유지시키는 방식
- 대상그룹 > 속성 탭 > 편집
- 대상 선택 구성고정으로 활성화
- 로드 밸런서 생성 쿠키 선택
- 만약 application기반 쿠키를 사용하려면, 이름을 지정하고 프로젝트에서 해당 쿠키 발행
- 쿠키 수명주기동안 동일한 클라이언트에서는 이제 동일한 EC2로 연결됨
사용자의 트래픽에 따라 EC2의 크기를 자동으로 증감시키는 기능
Scale out - EC2 자동추가
Scale in - EC2 자동감소
오토스케일링은 템플릿으로 실행됨
템플릿 구성
- 인스턴스타입
- EBS볼륨
- 보안그룹
- 키페어
- IAM역할
- VPC
- AMI 등
- 로드밸런서만 남기고, 기존의 EC2는 모두 중단
- 대상그룹에서는 고정세션 해제
- Auto Scaling탭 - Auto Scaling 그룹
- Auto Scaling그룹 생성
- 시작템플릿 생성
- userData에 추가
#!/bin/bash sudo apt-get update sudo apt-get install -y apache2 apache2 -version sudo service apache2 start sudo chmod 777 /var/www/html/index.html echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html
- 오토스케일그룹에서 위에서 만든 템플릿을 선택하고 다음으로 넘어감
- 인스턴스 시작옵션
- 기본 VPC, 서브넷은 생성가능한 곳만 선택 (서브넷 public ip자동 할당은 필수)
- 고급옵션
- 기존 로드밸런서에 연결
- 대상그룹은 EC2-Instance선택
- 상태확인 활성화 - EC2가 다운되면 자동으로 꺼주는 기능
- 그룹 크기 및 크기 조정 정책 구성
- 크키 전부 1로 설정
- 오토 스케일링 그룹 생성
- 오토 스케일링 그룹의 활동탭에 들어가면, 자동으로 인스턴스 생성
- ALB에서 엔드포인트 주소(DNS Name)을 확인하고 브라우저에서 연결
- Connection Pool을 애플리케이션에서 직접 관리하지 않아도 RDS Proxy가 알아서 관리하기 떄문에 불필요한 리소스 낭비를 줄일수 있고, 트래픽이 급증할 때 연결 수를 제어하여 DB를 보호하는 역할 수행행