베하~~~안녕하세요 BetterMonday 팀입니다. 오늘은 LB에대해 간단하게 알아보고, 만들어보는 시간을 가지도록하겠습니다. 아주아주 중요한 내용이니 다들 한번씩 봐주시면 감사하겠습니다.
그럼~~~~~~~~슈웃~~~~~~~~~~!
Load Balancer란?
로드 밸런싱은 들어오는 요청을 여러 가상 머신에 분산하여 더 높은 수준의 가용성을 제공합니다
흔히 서비스가 지속되는 정도를 가용성이라고 하는데, 트래픽이 이렇게 몰리는 것을 막아 가용성을 보존하고,
트래픽 병목 현상을 예측하고 막을 수 있는 것이 로드밸런서가 됩니다.
로드밸런싱은 네트워크 또는 서버에 가해지는 부하를 분산 해주는 기술을 의미합니다. 로드밸런싱 기술을 제공하는 서비스 또는 장치는 클라이언트와 네트워크 트래픽이 집중되는 서버들 또는 네트워크 허브 사이에 위치합니다.
### Load balancer flow
1. 클라이언트의 브라우저에서 example.net입력
2. 클라이언트에 설정된 메인 DNS서버로 example.net의 IP 주소 문의
3. 메인 DNS서버는 [example.net](http://example.net) 주소를 관리하는 별도의 DNS서버에 IP주소를 문의
4. 별도 관리 DNS서버는 로드밸런서의 IP(가상IP)주소를 메인 DNS 서버에게 알려줌
5. 메인 DNS서버는 획득한 VIP주소를 클라이언트에게 전송
6. 클라이언트에서 로드밸런서의 VIP주소로 HTTP요청
7. 로드밸런서는 별도 로드밸런싱 방법을 통하여 서버에게 요청을 전송
8. 서버의 작업 결과를 받은 로드밸런서는 전달받은 http 결과를 클라이언트에게 전송
로드 밸런스 알고리즘
로드 밸런싱 알고리즘은
1. 라운드 로빈(요청이 들어온 대로 순차적인 처리),
2. 최소 접근법(최소 라우팅 서버를 우선적으로 배치),
3. Min missis(특정 서버에 장애가 생기면 ip 해시를 재할당 하는 방식),
4. Hashing(특정 클라이언트가 접속하면 특정 서버로 라우팅 해주는 방식) 등이 있습니다. 로드 밸런서는 크게 2가지로 나뉠 수 있습니다.
L4 Load Balancer / L7 Load Balancer입니다.
기본적으로, L4 Load Balancer는 IP 정보와 Port 정보를 참조해서 라우팅 합니다. L7 Load Balancer는 L7 위에서 동작하기 때문에 IP, Port 이외에도 *URI, Payload, Http Header, Cookie* 등의 내용을 기준으로 부하를 분산합니다.
그래서 콘텐츠 기반 스위칭이라고도 합니다. L4 Load Balancer는 단지 부하를 분산시키는 것이라면, L7 Load Balancer는 요청의 세부적인 사항을 두고 결제만 담당하는 서버, 회원가입만을 담당하는 서버 등으로 분리해서 가볍고 작은 단위로 여러 개의 서비스를 운영하고 요청을 각각의 서버에 분산할 수 있는 것입니다.
L7 Load Balancer는 L4 Load Balancer와 다르게 데이터를 분석해서 처리가 가능하기 때문에 악의적이거나 비 정상적인 콘텐츠를 감지해 보안 지점을 구축할 수도 있는 장점이 있고, 그 만큼 자원 소모가 크다는 단점이 있습니다.
실습 및 테스트
간단한 테스트를 위해 우선 VM 두개를 생성해주었습니다.
공용아이피를 설정해주었고 CentOS 기반으로 진행하겠습니다.
저번시간에는 컴파일로 Apache를 설치하였지만 이번에는 부하분산이 잘되는지 테스트만 할 것이기 때문에 yum으로 Apache 설치를 진행하였습니다.
sudo -i
yum install -y httpd
(저희는 테스트상 편의를 위해 sudo -i 명령어를 통해 루트사용자로 작업하였습니다.
원래라면 sudo 명령어를 앞에 붙여 작업하는 것이 안전합니다. ex: sudo yum install -y httpd )
systemctl 명령어를 사용하여 아파치가 잘 돌아가는지 확인해줍니다.
systemctl start httpd
systemctl status httpd
VM의 공용 IP로도 접속이 잘 되네요!
여기까지가 로드밸런스 테스트를 위한 기초 작업입니다. VM2도 똑같이 만들어 주시면 됩니다.
※연결이 안될 시 VM-네트워킹-인바운드 규칙에서 80포트를 추가해주세요
부하분산이 잘 되는지 확인하기 위해 IP주소로 접속하였을때 뜨는 창을 편집해주겠습니다.
다음 명령어를 통해 html 폴더로 이동해준 후 index.html 파일을 만들어 줍니다.
여기서 VM1과 VM2의 index.html 파일을 다르게 만들어주는 것이 포인트 입니다.
cd /var/www/html
vi index.html
systemctl restart httpd
다음과 같이 index파일이 정상적으로 적용 된 것을 볼 수 있습니다.
이제 Loadbalancer를 연결해 보도록 하겠습니다.
다음과 같이 리소스 그룹, LB의 이름, 지역, SKU 등을 설정해주고 다음으로 넘어갑니다.
프런트 엔드 IP 구성 추가 버튼을 누르게 되면다음과 같은 창이 나오게 되는데, 여기서 이름과 공용 IP주소를 설정해줍니다.
여기서 만들어주는 공용 IP주소로 접속을 할 것 입니다.
다음으로 넘어가면 백앤드풀을 연결해줄 차례입니다. 백 엔드풀에 VM을 연결하려면 공용IP가 없는 VM이여야 합니다.
따라서 아까 테스트를 위해 지정해주었던 공용 IP를 해제 해주겠습니다.
다음과 같이 VM의 네트워킹탭에 네트워크 인터페이스를 클릭합니다.
IP구성 -> ipconfig1 클릭
연결끊기 -> 저장
공용IP설정을 마치고 백앤드풀 설정으로 돌아와 백앤드풀 추가를 눌러줍니다.
가상 네트워크를 지정해주고 가상머신을 추가합니다.
인바운드 규칙탭으로 넘어와 부하분산 규칙 추가 를 눌러준 후 다음과 같이 설정합니다.
아웃바운드 규칙 탭으로 넘어와 아웃바운드 규칙 추가 를 누른후 다음과 같이 설정합니다.
설정이 끝난 후 검토 및 만들기를 진행합니다.
만들어진 LB의 프런트엔드IP를 주소창에 입력하고 새로고침(F5)를 누릅니다.
다음과 같이 부하분산이 잘 되는 것을 확인할 수 있습니다.
이번시간에 저희가 준비한 내용은 여기까지입니다. LB를 간단하게 만들고, 테스트하는 법까지 알아보았습니다.
다음시간에 만나요 베바~~~~~~~~~
※출처 : https://nesoy.github.io/articles/2018-06/Load-Balancer
'CSP (Cloud Service Provider) > Azure' 카테고리의 다른 글
Azure VMSS란? (0) | 2022.05.31 |
---|---|
Azure Bastion이란? (0) | 2022.05.27 |
Azure Devops를 통해 협업하기(3) (0) | 2022.05.07 |
DB 생성과 접속 (0) | 2022.05.03 |
WAS : Tomcat설치 (0) | 2022.04.29 |
댓글