현재 가지고 있는 프로젝트 마무리 단계에 접어들었다.
이번에는 시스템 환경에서 현재 클라이언트에서 -> gateway로 직접 요청 하고 있는 시스템에서 ELB를 달아보려고 한다.
aws에서 제공하는 로드 밸런서는 CLB, ALB, NLB, GWLB가 있다.
현재 시스템엔 클라이언트가 edge server에 직접 요청하는 식이고 route되는 역할을 하는 gateway 서버가 보호되지 않고있다.
내가 필요로 하는 그림은 이렇다. gateway server를 하나 더 생성해서 edge 서버를 두개로 만들고, Load Balancer 가 요청을 분산시키도록 하려고 한다.
(gateway server : 8080 port)
내가 필요한건,시스템 환경 중 LB만 노출될 수 있도록 만들고 싶고
로드밸런서는 요청 분산 작업만 처리하도록 설계하고 싶다. (route는 gateway가 처리하도록 작업을 분리했기 때문)
그러므로 CLB보다 최신인 ALB와 NLB중 프리티어로 제공하고 있는 ALB를 사용해 만들어보겠다.
(ALB는 HTTP전용이고 micro service에 적합한 컨테이너 기반 애플리케이션이기 떄문)
** 추가 위의 server 들은 모두 docker container 화가 되어 EC2에 배포되어있음
EC2 스냅샷 → AMI 생성
AMI에서 ec2 시작
볼륨을 보면
기본으로 ami ebs 스냅샷이 들어가있음
ebs 스냅샷 id가 ami 이미지 id와 동일
이 정보로 ec2 시작
putty로 접속해서
docker image ls
로 pull 받은 이미지들 리스트를 비교해서 확인
EBS 복제 잘 됐음 확인 가능
로드밸런서를 생성한다.
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으로 넣어주어야함
생성 완료 !
이제 로드밸런서 호스트 이름으로 사용 가능
현재 두번째 게이트웨이 서버는 image run 상태 아니므로 run 돌려주고
AE-ALB-주소로 요청을 날려보자
putty를 봐도 번갈아가면서 요청이 들어가는 것을 확인할 수있고
서비스의 모든 api가 정상 동작함
(그렇지만 여기서 문제는 LB에서 타깃그룹의 health 체크가 안되고 있는데,
검색해보니까 서버의 keep-alive 설정 시간이 로드밸런서가 서버의 건강상태를 체크하는 시간보다 짧아서 그럴수있다고 한다. (설정을 통해 늘릴 수 있음) 톰캣의 경우 server.tomcat.keep-alive-timeout 조정)
끝!