타겟그룹 생성
일단 로드벨런서를 EC2인스턴스에 적용하기 전에 먼저 타겟그룹을 설정해 줘야 합니다.
이는 마이크로 서비스에서 중요하게 됩니다. order그룹 1개, delivery그룹 1개, boss그룹 1개를 각각 만든다음에 그 안에 서버를 여러개 만들어서 동작하게 할 수 있습니다. 하지만 아직 모놀리식이므로 1개만 만들어도 충분합니다.
먼저 Instance를 하나 만듭니다. 그리고 tg1이라는 타겟그룹을 만듭니다. 또한, PORT를 설정하는 것은 로드벨런서에게 트래픽이 왔다고 해 봅시다. 그럼 이 트래픽을 서버의 어떤 포트로 보내줄 것이냐를 결정해 주느냐 입니다. 여기서는 당연히 8000번 포트에 서버를 실행시키고 있고 인바운드 규칙도 편집해 주었으므로 HTTP 8000로 적어주는 것이 맞습니다.
그 다음에는 Health checks입니다. 이는 서버가 죽었는지 살았는지 확인하는 것입니다. 저는 여기에다 /order/order를 적었습니다. 이의 의미는 일정 주기마다 /order/order에 요청을 보냈는데 응답이 죽으면 로드밸런서가 이 서버는 죽었구나 인지해서 더이상 트래픽을 특정 서버로 보내지 않게 됩니다.
그리고 이와 같이 연결 해 줄 인스턴스를 선택해 줍니다. 저희는 이전에 만든 EC2인스턴스를 선택해 주도록 하겠습니다.
로드 밸런서 생성
그 다음으로는 로드 밸런서중 ALB를 만들어 보도록 하겠습니다.
여기서 Application Load Balancer를 클릭하고
그 다음 설정에서 중요한 것이 Listening and routing입니다. 이는 로드 벨런서의 몇번 포트로 접속해야 하는지 설정하는 것입니다. 이를 81로 설정했고, 로드벨런서에 81번 포트로 들어오게 되면, 로드밸런서는 다시 타겟그룹의 8000번 포트로 리다이렉팅 시켜주는 원리라고 생각하시면 됩니다.
또한 기존에 만들었던 default target group을 생성할 수도 있지만, 만들었던 tg1타겟그룹을 선택해 주도록 하겠습니다.
또한 defualt Security Group수정을 진행해서 로드벨런서에게 오는 81번 포트에 대한 인바운드 규칙을 허용해 주도록 하겠습니다.
그리고 settings.py에 allowed-host에 elb의 public domain을 적어주도록 하겠습니다.
/fastcampus/fastcampus/settings.py
...
ALLOWED_HOSTS = ['ec2-43-200-2-33.ap-northeast-2.compute.amazonaws.com', 'EB1-666088492.ap-northeast-2.elb.amazonaws.com']
...
이렇게 한 다음에 EC2에서 재배포 하고 81번 포트로 접근을 하게 되면 아래와 같은 화면이 나오게 됩니다.
하지만 아직 인스턴스가 여러개다 보니까, 로드밸런서가 하나의 EC2에만 트레픽을 분산시켜줄 것입니다. 즉 인스턴스가 1개인 상황에서는 위에서 해진 타겟그룹, ABL을 설정해 준 의미가 없게 됩니다. 따라서 인스턴스를 하나 더 만들어 주도록 하겠습니다.
인스턴스를 하나 더 만들기 위해 기존의 인스턴스의 설정들을 복사하는 이미지를 생성해 보도록 하겠습니다.
그리고 이미지를 우클릭하고 그대로 인스턴스를 만든 후에 새로 만들어진 인스턴스를 기존에 만들었던 대상그룹에 register group에 추가해 주도록 하겠습니다.
그리고 모든 설정이 마무리 될 때까지 기다리고 로드벨런서의 DNS의 81번 포트 /order/order로 들어가게 되면 아래오 같은 두가지 화면이 번갈아가면서 뜨게 될 것입니다.
하나는 정상적으로 뜨고, 하나는 제대로 뜨지 않습니다. 그 이유는 아직 새로 만든 인스턴스는 아무런 설정도 해주지 않았기 때문입니다. 첫번쨰의 인스턴스 이미지로 두번쨰 인스턴스를 만들었으므로 그냥 백그라운드에서 자동으로 돌아가게만 설정해주면 계속 정상적으로 뜨게 될 것입니다.
여기서는 ALB에 대해 살펴 보았습니다. 이는 그 안에 데이터를 보고 분기 처리를 해줄 수 있다고 했었는데, 이를 다음포스팅 부터 알아보도록 하겠습니다.