Elastic Load Balancing은 둘 이상의 가용 영역에서 EC2 인스턴스, 컨테이너, IP 주소 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산합니다. 등록된 대상의 상태를 모니터링하면서 상태가 양호한 대상으로만 트래픽을 라우팅합니다. Elastic Load Balancing은 수신 트래픽의 변화에 따라 로드 밸런서 용량을 자동으로 조정합니다.
AWS
ELB란 AWS에서 제공하는 로드 밸런서이다. 서버에 트래픽이 집중된 경우 이를 다수의 서버나 다른 네트워크에 분배하여 부하를 분산시키는 역할을 한다.
ELB는 EC2 인스턴스의 상태를 확인하고 데이터, 트래픽을 분산시키는 역할을 수행하며 서버에 장애가 발생해도 사용자에게 원활한 서비스를 제공할 수 있는 환경을 유지해준다.
MY-EC2 인스턴스에 접속하여 ELB-EC2-1,2의 HTTP가 작동하는지 확인
(두 인스턴스 모두 정상적으로 서비스 중임)
ALB 유형의 로드 밸런서를 생성하고 대상그룹으로 ELB-EC2-1,2를 지정한다. (대상그룹 프로토콜도 HTTP 80)
MY-EC2 인스턴스에서 ALB의 DNS 주소로 접속하면 EC2-1과 EC2-2를 번갈아가며 접속하는 것을 확인할 수 있다!
그런데 EC2-1은 /dev 경로에만 index.html 파일을 가지고 있고, EC2-2는 /mgt 경로에만 index.html 파일을 가지고 있다. 이때 경로를 입력하여 접근하게 되면 다음과같은 에러가 발생한다.
(번갈아가며 분산처리되어 EC2-2에 존재하지 않는 경로로 접근하게됨)
이는 경로 기반 라우팅을 설정하여 해당 문제를 해결할 수 있다.
(대상 그룹을 분리하여 입력한 경로가 존재하는 인스턴스로 라우팅 하도록 설정해야한다.)
대상 그룹 2개를 추가한 뒤 경로기반 라우팅 조건을 지정해준다. (리스너 규칙에서 설정 가능)
경로를 지정한 경우 정상적으로 라우팅이 동작
경로를 지정하지 않은 경우 로드 밸런서가 두 인스턴스를 번갈아가며 요청
MY-EC2 인스턴스에 접속하여 ELB-EC2-1,2의 SNMP가 작동하는지 확인
(두 인스턴스 모두 정상적으로 서비스 중임)
$ snmpget -v2c -c <커뮤니티명> <IP> <OID>
(snmpwalk 명령을 통해 서브트리의 MIB를 모두 확인할 수도 있다.)
NLB 유형의 로드 밸런서를 생성하고 대상그룹으로 ELB-EC2-1,2를 지정한다. (대상그룹 프로토콜도 UDP 161)
확인해보면 UDP 프로토콜 161포트로 전달하는 SNMP 요청에 EC2-1과 2가 번갈아가며 응답하는 것을 볼 수 있다.
(출발지 IP가 13.124.86.0 MY_EC2의 IP주소 그대로 전달됨)
NLB는 클라이언트 IP를 보존하는 것을 확인할 수 있다!
(ALB는 클라이언트 IP를 자신의 IP로 대체하여 전달함. 대신 클라이언트 IP를 헤더에 저장하여 전달!)