[LoadBalance] gateway server 앞에 ALB 적용하기

vector13·2022년 11월 22일
0

현재 가지고 있는 프로젝트 마무리 단계에 접어들었다.
이번에는 시스템 환경에서 현재 클라이언트에서 -> gateway로 직접 요청 하고 있는 시스템에서 ELB를 달아보려고 한다.

1 aws의 로드밸런서

aws에서 제공하는 로드 밸런서는 CLB, ALB, NLB, GWLB가 있다.

2 내가 필요한 로드밸런서

현재 아키텍처

현재 시스템엔 클라이언트가 edge server에 직접 요청하는 식이고 route되는 역할을 하는 gateway 서버가 보호되지 않고있다.

이번 목표 아키텍처

내가 필요로 하는 그림은 이렇다. gateway server를 하나 더 생성해서 edge 서버를 두개로 만들고, Load Balancer 가 요청을 분산시키도록 하려고 한다.
(gateway server : 8080 port)

조건


내가 필요한건,시스템 환경 중 LB만 노출될 수 있도록 만들고 싶고
로드밸런서는 요청 분산 작업만 처리하도록 설계하고 싶다. (route는 gateway가 처리하도록 작업을 분리했기 때문)

Application Load Balancer 로 결정

그러므로 CLB보다 최신인 ALB와 NLB중 프리티어로 제공하고 있는 ALB를 사용해 만들어보겠다.

(ALB는 HTTP전용이고 micro service에 적합한 컨테이너 기반 애플리케이션이기 떄문)
** 추가 위의 server 들은 모두 docker container 화가 되어 EC2에 배포되어있음

3 gateway server 하나 더 생성

3-1 gateway server Ec2로 AMI 생성

EC2 스냅샷 → AMI 생성

3-2 AMI로 2nd-gateway-server EC2 생성

AMI에서 ec2 시작




볼륨을 보면

기본으로 ami ebs 스냅샷이 들어가있음
ebs 스냅샷 id가 ami 이미지 id와 동일

이 정보로 ec2 시작

putty로 접속해서
docker image ls로 pull 받은 이미지들 리스트를 비교해서 확인

EBS 복제 잘 됐음 확인 가능

4 ALB 세팅

로드밸런서를 생성한다.

internet-facing: 외부 ,Internal : 개인 트랙픽 용 이므로 internet-facing을 선택


로드밸런서 이름을 지정한게 hostname 에 포함되므로 짧지만 알아보기쉽게 지정했음

그리고 로드밸런서에 접근위해 IPv4 사용

네트워크 매핑에서는 실행할 VPC 지정하고

서브넷 개수와 AZ 지정해야함 (abcd 다해줬음)

보안그룹 생성하고 연결


보안 그룹을 생성해서 : 나중에 EC2에서 LB의 보안그룹으로만 인바운드를 막을 계획이다

Target group : 타깃 그룹 생성


아까 만든 2nd gateway server 와 gateway server를 연결해줄거임 —> 인스턴스 눌러서 생성

이때 처음에 http 기반의 LB이므로 80포트로 넣었지만 gateway 서버는 8080로 동작하고있으므로!! 8080으로 넣어주어야함

생성 완료 !

이제 로드밸런서 호스트 이름으로 사용 가능

5 테스트

2nd gateway server — docker run

현재 두번째 게이트웨이 서버는 image run 상태 아니므로 run 돌려주고


AE-ALB-주소로 요청을 날려보자

두 gateway의 log 확인

putty를 봐도 번갈아가면서 요청이 들어가는 것을 확인할 수있고
서비스의 모든 api가 정상 동작함

(그렇지만 여기서 문제는 LB에서 타깃그룹의 health 체크가 안되고 있는데,
검색해보니까 서버의 keep-alive 설정 시간이 로드밸런서가 서버의 건강상태를 체크하는 시간보다 짧아서 그럴수있다고 한다. (설정을 통해 늘릴 수 있음) 톰캣의 경우 server.tomcat.keep-alive-timeout 조정)

끝!

profile
HelloWorld! 같은 실수를 반복하지 말기위해 적어두자..

0개의 댓글

관련 채용 정보