[Networks] AWS 로드 밸런싱 - ALB
Resource | Name | Detail Setting |
VPC | My-VPC | IPv4 CIDR : 20.0.0.0/16 |
ELB-VPC | IPv4 CIDR : 10.0.0.0/16 | |
Public Subnet | ELB-Public-SN-1 | IPv4 CIDR : 20.0.0.0/24, ap-northeast-2a |
ELB-Public-SN-1 | IPv4 CIDR : 20.0.0.0/24, ap-northeast-2a | |
My-Public-SN | IPv4 CIDR : 20.0.0.0/24, ap-northeast-2a | |
Public Routing Table | ELB-Public-RT | Subnet : ELB-Public-SN-1, ELB-Public-SN-2 IGW : ELB-IGW |
My-Public-RT | Subnet : My-Public-SN IGW : My-IGW |
|
IGW | ELB-IGW | At My-VPC |
My-IGW | At ELB-VPC | |
EC2 | My-EC2 | connect : My-Public-SN |
ELB-EC2-1 | connect : ELB-Public-SN-1 / HTTP, SNMP | |
ELB-EC2-2 | connect : ELB-Public-SN-2 / HTTP, SNMP | |
Security Group | ELBSG | (HTTP, TCP, 80) (SSH, TCP, 22) (사용자 지정 UDP, UDP, 161) |
로드 밸런서가 없는 상황 먼저 보도록 하겠습니다.
My-EC2의 퍼블릭 IPv4 주소를 확인하고 이 주소로 ssh 접속을 합니다.
curl <ELB-EC2-1의 퍼블릭 IPv4>
curl <ELB-EC2-1의 퍼블릭 IPv4>/dev/index.html
snmpget -v2 -c public <ELB-EC2-1의 퍼블릭 IPv4> 1.3.6.1.2.1.1.5.0
curl, snmpget 명령어를 통해 로드 밸런서 없이 개별 시스템으로 직접적으로 요청하는 상황을 확인해봅니다.
ALB를 통한 로드 밸런싱을 확인해보겠습니다.
[EC2 - 로드 밸런싱 - 로드 밸런서 - 로드 밸런서 생성]
로드 밸런서 목록에서 ALB를 선택합니다.
Load balancer name : ALB-TEST
VPC : ELB-VPC
Mappings
- ap-northeast-2a : ELB-Public-SN-1
- ap-northeast-2c : ELB-Public-SN-2
Security groups : ELB-SG
Listener : HTTP, 80
Target group
- Name : ALB-TG
- Target Type : Instance
- Protocol : HTTP
- Port : 80
- Health checks(기본값 유지) - target : 2 ELB instances
ALB의 상태가 provisioning에서 active, 대상 그룹의 대상 인스턴스 상태가 initial에서 healthy로 바뀔 때까지 기다립니다.
이제 My-EC2 인스턴스에 접속해서 ALB의 DNS 주소로 curl 명령을 통해 HTTP 접근을 해보면 ELB-EC2-1과 ELB-EC2-2로 번갈아 가면서 부하 분산이 됩니다.(기본적으로 ALB의 로드 밸런싱은 라운드 로빈 방식을 취합니다. 이는 변경 가능합니다.)
이렇게 ALB가 HTTP 접근을 두개의 EC2에 번갈아가며 부하 분산 시키는 것을 확인했습니다. 여기서 만약 ELB-EC2-1에는 /dev/ 경로 페이지가 존재하지만 ELB-EC2-2에는 없으며, 반대로 /mgt/ 경로 페이지는 ELB-EC2-2에만 존재하는 상황에서, ALB의 DNS 주소로 이 /dev/ 경로 페이지를 접근해보면 어떻게 될까요?
ELB-EC2-1와 ELB-EC2-2의 /var/www/html 경로에 각각 dev, mgt 라는 이름의 디렉토리를 만들어주고 그 안에 index.html이라는 이름의 파일을 작성해줍니다. 아래의 명령어를 입력하면 이 작업을 수행합니다.
/index.html로만 접근을 할 때는 ALB가 ELB-EC2-1, ELB-EC2-2로 정상적으로 분산이 되는 것을 확인할 수 있습니다. 하지만 /dev/index.html로 접근을 할 때는 ELB-EC2-2에는 이 경로 페이지가 존재하지 않기 때문에 404 Not Found이 출력되었습니다.
이를 해결하기 위해 경로 기반 라우팅을 사용합니다. URL 경로 정보를 확인하여 원하는 대상으로 라우팅을 할 수 있는 기능입니다. 즉 /dev/ 경로 페이지는 ELB-EC2-1 로만 전달할 수 있게 됩니다.
[EC2 - 로드 밸런싱 - 대상 그룹 - 대상 그룹 생성] 으로 들어가서 Dev-Group이라는 이름의 대상 그룹을 생성해줍니다. VPC는 ELB-VPC로 합니다. 대상을 등록하는 페이지에서 /dev/ 경로 페이지가 존재하는, ELB-EC2-1만 선택하여 대상으로 등록해줍니다. 같은 방식으로 ELB-EC2-2만 대상으로 등록되있는 Mgt-Group도 생성해줍니다.
로드 밸런서 ALB-TEST에서 기존의 리스너를 편집해줍니다. ( 규칙 보기/편집 클릭)
위 사진과 같이 규칙을 편집해줍니다.(조건 -> 경로 -> /dev/* 혹은 /mgt/*)
위의 사진을 보면, 경로 기반 라우팅이 잘 작동함을 확인할 수 있습니다.
댓글
이 글 공유하기
다른 글
-
[Networks] Store and Forward Transmission
[Networks] Store and Forward Transmission
2023.05.15 -
[Networks] URI와 PURL
[Networks] URI와 PURL
2023.03.09 -
[Networks] OSI 7 계층 정리
[Networks] OSI 7 계층 정리
2022.01.17 -
[AWS] 엔드포인트 실행 결과 비교
[AWS] 엔드포인트 실행 결과 비교
2022.01.12