지금까지 네트워크 구성과 NAT 서버 구축, 웹서버까지 구축이 되었다면 이제 Elastic Load Balancing에 대해 살펴볼 차례입니다.
로드밸런싱이란 개념은 기존 온프레미스에서부터 존재해 왔습니다. 일명 L4 스위치, L7 스위치라고 불렸는데, L이라는 뜻은 OSI 7 Layer 의 ‘Layer’에서 가져왔습니다.
L4 스위치는 Layer 4(Transport Layer)의 프로토콜인 TCP, UDP 등을 스위칭합니다. TCP와 UDP 그리고 RTP 등의 헤더를 사용하여 FTP, HTTP, TFTP, SMTP 등의 프로토콜 중 어떤 것을 우선시해서 스위칭할 지 판단할 수 있습니다. 여러대의 서버에 똑같은 컨텐츠를 탑재하는 경우는 L4에서 서버의 부하를 체크해서 가장 여유있다고 판단되는 쪽으로 보내게 됩니다. AWS Elastic Load Balancing의 ‘Network Load Balancer’ 가 L4 스위치의 역할을 한다고 보면 되겠습니다.
L7 스위치는 OSI의 Layer 7, 즉 애플리케이션 레이어에서 동작하는 것으로 이메일의 문자열로 내용을 파악한다거나 HTTP의 URL, FTP의 파일명, 쿠키 정보 등을 분석해서 정교한 로드 밸런싱이 가능해졌습니다. AWS의 ‘Application Load Balancer’ 가 L7 스위치의 역할을 한다고 보면 됩니다.
이번 글에서는 ALB(Application Load Balancer)나 NLB(Network Load Balancer)가 아닌 CLB(Classic Load Balancer)를 사용하겠습니다. CLB는 ALB와 NLB가 출시되기 전 사용하던 로드밸런서입니다. 보통 ALB나 NLB가 비용, 또는 성능면에서 CLB보다 우수하다고 알려져 있지만 CLB는 L4와 L7 모두에서 작동하는 범용성이 있고 다루기 용이합니다. 3개의 로드밸런서를 비교하는 표가 아래에 나와있습니다.
그럼 지금부터 로드밸런서를 생성하겠습니다.
1. 먼저 EC2 콘솔로 접속한 후 [Load Balancers] 탭을 클릭, [Create Load Balancer]를 클릭합니다.
2. 세가지의 Load Balancer 중에 Class Load Balancer를 생성하겠습니다. [Create]를 클릭합니다.
3. Load Balancer name에 사용할 로드밸런서의 이름을 적어줍니다. Create LB inside에는 해당하는 VPC를 선택하면 됩니다. 나머지는 그대로 두고 넘어갑니다.
4. Select Subnets 에서 생성해놓은 6개의 서브넷 중 public subnet 2개를 선택한 후 [Next: Assign Security Groups]를 클릭합니다.
5. Assign a security group 에서 Create a new security group을 체크하고, Security group name과 Description를 작성합니다. [Next: Configure Security Settings]를 클릭합니다.
6. 로드밸런서로의 트래픽을 안전하게 구성하려면 HTTPS 또는 SSL 프로토콜을 사용하라는 알람이 뜹니다. 여기서는 생략하고 [Next: Configure Health Check]를 클릭합니다.
8. 로드밸런스의 Health Check를 설정하는 단계입니다. 로드 밸런서는 EC2 인스턴스에 트래픽을 제대로 전달하는지 자동으로 Health Check를 실행합니다. Ping은 네트워크를 통해 특정한 호스트에 트래픽이 도달할 수 있는지를 테스트하는데 쓰이며, Ping을 실행할 프로토콜, 포트, 경로를 설정할 수 있습니다. 여기서는 전부 디폴트로 두고 [Next: Add EC2 instances]를 클릭합니다.
9. NAT 인스턴스를 제외하고 웹서버 인스턴스 2개를 체크한 후 [Next: Add Tags]를 클릭합니다.
10. 추가할 Tag를 지정합니다. 여기서는 Name이라는 키를 만들어서 로드밸런서 이름을 넣어주겠습니다. [Review and Create]를 클릭합니다.
11. 설정 값들을 다시 한번 확인하고 [Create]를 클릭합니다.
12. 로드 밸런서가 생성되었습니다. Type으로 로드밸런서 유형을 확인할 수 있고, Status로 연결되어 있는 인스턴스에 트래픽이 잘 전달 되는지 확인할 수 있습니다.
13. 로드밸런서의 instances 탭에서 상태를 확인할 수 있습니다. 위 화면에서는 “InService”로 정상으로 나오지만, 이글을 따라하는 분들은 “OutOfService”로 나올 것입니다. 그 이유는 인스턴스에 설치한 Apache 웹서버의 기본 경로에 index.html 파일이 없어서 Health Check가 불가능하기 때문입니다. 웹서버의 기본 경로에 index.html 파일을 임의로 넣어주거나, index.html 파일 없이 연결 상태를 전송계층에서 확인하려면 Health Check 프로토콜을 TCP로 변경하면 됩니다. 여기서는 WinSCP을 이용해 index.html 파일을 웹서버 기본 경로에 넣어 주었습니다.
14. 인스턴스 두개가 모두 정상적으로 로드밸런서와 연결 되었다면 DNS name을 (A record)를 제외하고 복사합니다.
15. 브라우저에 복사한 DNS name을 붙여넣고 접속하면 index.html 파일의 내용이 출력됩니다.
16. index.html 없이 TCP 로 Health Check를 하였다면 위의 테스트 페이지가 뜨게 됩니다.
다음 글에서는 ROUTE53을 이용해 무료 도메인을 로드 밸런서와 연결하는 방법을 알아보겠습니다.
SA팀 황문주