반응형
SMALL
7장 네트워크 트래픽을 분산시켜 주는 로드 밸런싱
1. 로드 밸런싱(Load Balancing)
로드 밸런싱(Load Balancing)
- 로드 밸런싱이란, 네트워크 기술의 일종으로 네트워크 트래픽을 하나 이상의 서버나 장비로 분산하기 위해 사용되는 기술
- 로드 밸런싱을 수행하는 소프트웨어나 하드웨어를 로드 밸런서(Load Balancer)
- 로드 밸런싱 서비스를 통해 외부에서 발생되는 많은 인터넷 트래픽을 여러 웹 서버나 장비로 부하를 분산하여 처리
일반적인 웹 트래픽 증가에 대한 처리 방식은 크게 두 가지이다.
첫 번째, Scale-Up을 통해 CPU, 메모리, 디스크 등의 기능을 업그레이드 하는 방식
- 기존보다 높은 성능을 보유한 웹 서버로 시스템을 업그레이드함으로써 문제를 해결하는 방식으로 필요로 하는 성능이 높아질수록 비용이 기하급수적으로 늘어나는 단점
- 하나의 서버에서 웹 서비스를 제공하여 서버 중지 및 장애로 인해 웹 서비스 가용성에 문제
두 번째, Scale-Out을 통해 저렴한 노드 여러 개를 하나의 Cluster로 구성하는 방식
- Cluster로 구성하는 경우 Cluster 내 하나의 노드에 문제가 발생하여도
- 웹 서비스가 중단되지 않으므로 가용성이 높은 웹 서비스를 구성할 수 있다.
- 로드 밸런싱은 Scale-Out 방식의 웹 서비스 구성에 주로 사용되며,
- 네트워크 트래픽을 서비스의 Port 단위로 제어하고, 트래픽을 분산 처리함으로써 높은 가용성과 부하 분산을 통한 고효율 웹 서비스를 제공
2. 로드 밸런싱의 방식
Round Robin(RR: 라운드 로빈 방식)
- Real 서버로의 Session 연결을 순차적으로 맺어주는 방식이다.
- 연결되어 있는 Session 수에 상관 없이 순차적으로 연결시키는 방식으로
- Session 에 대한 보장을 제공하지 않는다.
Hash
- Hash 알고리즘을 이용한 로드 밸런싱 방식이다.
- Client와 Server 간에 연결된 Session을 계속 유지해 주는 방식
- Client가 특정 Server 로 연결된 이후 동일 서버로만 연결되는 구조
- Session에 대한 보장을 제공한다.
Least Connection(최소 연결 방식)
- Session수를 고려하여 가장 작은 Session을 보유한 서버로 Session을 맺어주는 연결 방식이다.
- Session 에 대한 보장을 제공하지 않는다.
Response Time
- 서버 간의 Resource와 Connection의 차이가 있는 환경에서 사용되는 방식
- 응답시간을 고려하여 빠른 응답시간을 제공하는 서버로 Session 을 맺어주는 방식
- Session 에 대한 보장을 제공하지 않는다.
3. Amazon Elastic Load Balancing
Amazon Elastic Load Balancing(ELB)
- Amazon Elastic Load Balancing은 단일 가용 영역 또는 여러 가용 영역에서
- Amazon EC2 인스턴스 및 컨테이너, IP 주소 같은 동일한 서비스를 제공하기 위해
- 준비된 여러 대상으로 애플리케이션 및 네트워크 트래픽을 자동으로 분산시킨다.
- Elastic Load Balancing은 서비스의 목적에 따라 세 가지의 로드 밸런서 중 하나의 서비스를 선택하여 사용
- 이를 통해 애플리케이션의 내결함성 보장을 위해 필요한 고가용성, 부하분산, 자동 확대/축소, 강력한 보안 기능을 제공한다.
구분 내용 서비스명 Amazon Elastic Load Balancing 설명 확장성, 성능, 보안성을 통한 애플리케이션 내결함성을 제공하는 로드 밸런서 주요 특징 - 수신되는 트래픽을 여러 EC2 인스턴스에 자동 배포
- 애플리케이션의 내결함성을 확보하며, 네트워크 트래픽을 원할하게 대상으로 자동 분산 처리 기능 제공
- 고가용성, 자동 조정 및 강력한 보안 서비스 제공
- Application Load Balancer, Network Load Blalancer, Classic Load Balancer 중 세가지 유형의 로드 밸런서를 지원하며, 애플리케이션의 필요에 따라 로드 밸런스프리티어
(Free Tier)- 클래식 및 애플리케이션 로드 밸런서 간에 공유되는 탄력적 로드 밸런서 750시간을 프리티어(Free Tier)제공
- 클래식 로드 밸런서의 데이터 처리 15GB, 애플리케이션 로드 밸런서 15GB를 프리티어(Free Tier)제공
4. ELB의 종류 및 유형
ELB의 종류 및 유형
- Amazon Elastic Load Balancing은 애플리케이션의 요구사항에 따라
1. Application Load Balancer
2. Network Load Balancer
3. Classic Load Balancer
- 중 하나의 유형을 선택하여 로드 밸런싱 서비스를 사용할 수 있다.
구분 내용 적합 서비스 Application
Load Balancer- OSI 모델 7계층(Application)에서 작용하며, HTTP, HTTPS와 같은 고급 로드 밸런싱 서비스에 적합 - 마이크로 서비스 및 컨테이너 기반 애플리케이션, 최신 애플리케이션 서비스에 최적화된 로드 밸런싱 제공, SSL/TSL 암호화 및 프로토콜 사용하여 보안성 보장 HTTP/HTTPS 서비스 Network
Load Balancer- OSI 모델 4계층(Transport Layer)에서 작동하며, TCP 트래픽의 로드 밸런싱 서비스에 적합 - 짧은 지연시간과 초당 수백만 개의 요청처리가 가능 가용 영역 당 1개의 정적 주소를 사용하면서 트래픽의 변동이 심한 서비스에 최적화 TCP 트래픽 로드 밸런싱 및 짧은 지연시간 Classic
Load Balancer- OSI 모델 4계층(Transport Layer), 3계층(Network Layer)에서 작동 - EC2-Classic 네트워크 내에 구축된 애플리케이션을 대상으로 제공 EC2-Classic 네트워크 구축된 애플리케이션 - ELB를 생성하는 것이 로드 밸런싱 서비스를 인터넷에 연결할 것인지 아닌지에 따라 Internet-facing 여부를 선택하게 된다.
- 이 항목 선택 여부에 따라 ELB가 Internal ELB, External ELB로 구분된다.항목 External ELB Internal ELB
항목 External ELB Internal ELB 인터넷 연결 연결 가능 연결 불가 사용 가능 IP Public IP, Private IP Private IP 접속 가능 영역 인터넷, VPC 내부 VPC 내부
5. ELB의 주요 특징
5-1. 상태 확인 서비스(Health Check)
- Elastic Load Balancing(ELB)와 연결된 인스턴스의 연결 상태를 수시로 체크
- 인스턴스의 OS나 애플리케이션의 문제로 인해 연결 장애나 서비스 가능 여부에 대한 Health Check를 지속적으로 수행한다.
- 이러한 Health Check가 실패하는 경우 해당 인스턴스로 트래픽을 전달하지 않는다.
- 이를 위해 HTTP와 HTTPS 상태 확인 빈도, 실패 임계치, 성공 시 응답 코드를 임의 설정 가능하며, 자세한 상태 확인과 실패 원인은 API를 통해 확인은 물론 AWS 콘솔에도 표시된다.
- TCP 방식으로 Health Check를 수행하는 경우 서비스 Port의 오픈 여부 및 연결 가능 여부를 확인
- HTTP나 HTTPS 방식은 특정 웹 페이지의 접속 시도에 따른 **응답 코드(200)**가 정상 반환 여부를 확인해서 Health Check 성공/실패 여부를 판단한다.
5-2. Sticky Session
- Elastic Load Balancing을 통해 트래픽을 부하 분산하는 경우 기본적으로는 Round Robin 방식으로 트래픽을 분산한다.
- 이 경우 한 번 연결된 Session은 다음 연결 시 그대로 연결되지 않으며,
- 다음 번 연결 시 다른 인스턴스로 연결될 수 있어서 애플리케이션의 Session을 유지할 수 없게 된다.
- 특히 세션 유지가 필요한 백오피스 웹 사이트(그룹웨어 등)의 경우 연결이 끊어지거나 웹 사이트의 로그인 및 인증 정보를 유지할 수 없게 된다.
- Stick Session을 사용하면 처음 연결된 Client에 별도의 HTTP 기반의 쿠키 값을 생성하여 다음 번 연결 요청에 대해 처음 접속했던 서버로 계속 연결하도록 트래픽을 처리하게 된다.
5-3. 고가용성 구성
- Elastic Load Balancing은 단일 가용 영역 또는 여러 가용 영역에 있는 **여러 대상(Amazon EC2 인스턴스, 컨테이너 및 IP 주소)**에 걸쳐 트래픽을 자동으로 분산
- 특히 고가용성 구성을 위해 Route53와 같은 Amazon Web Services의 다른 서비스와의 연계를 통해 가용성 서비스를 제공할 수 있다.
5-4. SSL Termination 및 보안 기능
SSL Termination 사용 전
- 웹 사이트에 SSL 인증서를 적용하여 HTTPS와 같은 방식으로 암호화 통신을 하기 위해서는 개별 웹 서버에 별도의 공인인증서를 구매 후 적용하여야 한다.
- 이 경우 개별 인증서를 각 인스턴스에 직접 적용은 물론 인증서 만료에 따른 갱신 등 관리가 필요하다.
- 또한 개별 EC2 인스턴스에서 SSL 암호화 및 복호화를 직접 처리하므로 인스턴스에 암호화 및 복호화 처리를 위한 추가 부하가 발생되게 된다.
SSL Termination 사용 시
- ELB의 SSL Termination 기능을 사용하게 되면 개별 인스턴스에 SSL 인증서를 직접 설치할 필요가 없다.
- ELB에 공인인증서 또는 ACM(Amazon Certificate Manger)에서 무료로 발급받을 수 있는 사설 인증서를 등록함으로써
- SSL 인증서를 이용한 HTTPS 활용 트래픽 암호화 및 복호화 서비스를 제공할 수 있다.
- ACM(Amazon Certificate Manager)을 사용하는 경우 추가적인 인증서 발급 비용은 무료이며 별도의 인증서 관리도 필요 없다.
- 그리고 인스턴스의 암호화 및 복호화에 따른 부하를 줄일 수 있다.
SSL은 무엇이고 왜 중요한가요?
- SSL 인증서란 클라이언트와 서버간의 통신을 제 3자가 보증을 해주는 문서이다.
- 브라우저(사용자의 컴퓨터)와 서버(웹사이트) 사이의 암호화된 연결을 수립하는 데 사용됩니다.
TLS: 전송 계층 보안(Transport Layer Security)
- TLS은 SSL의 향상된, 더욱 안전한 버전입니다.
- SSL이 더욱 일반적인 용어이기 때문에 DigiCert는 보안 인증서를 여전히 SSL로 언급
HTTPS: 하이퍼 텍스트 전송 프로토콜 보안(Hyper Text Transfer Protocol Secure)
- HTTPS는 SSL 프로토콜을 기반으로 돌아가는 프로토콜 중 하나다.
- 웹사이트가 SSL/TLS 인증서로 보호되는 경우 HTTPS가 URL에 표시됩니다. 사용자는 브라우저 표시줄의 자물쇠 기호를 클릭해 발급 기관 및 웹사이트 소유자의 상호를 포함한 인증서의 세부 정보를 볼 수 있습니다
6. 실습 : 웹 서버 구성 및 웹 페이지 연결 테스트하기
- Amazon Elastic Load Balancing의 사용 방법을 배우기 위해 2대의 웹 서버를 생성하고 로드 밸런스 테스트를 위한 웹 페이지를 작성한다.
- 이후 ELB를 구성하고, 인스턴스를 추가하여, 특정 서버의 서비스 실패 시 Elastic Load Balancer의 동작 여부와 서비스 복구 후 동작 방식에 대해 실습을 진행한다.
1. AWS에서 [서비스] → [컴퓨팅] → [EC2]로 이동
2. [인스턴스] 메뉴에서 [인스턴스 시작] 버튼을 누르고 [AMI 선택] 페이지에서 "Amazon Linux 2 AMI" 선택
3. [인스턴스 유형 선택] 페이지에서 "t2.micro"를 선택 후 [다음: 인스턴스 세부 정보 구성] 버튼을 클릭
4. [인스턴스 세부 정보 구성] 페이지에서 [인스턴스 개수]를 "2"로 지정하고 [네트워트] 항목에서 "Tutorial-vpc"를 선택하고, [서브넷] 항목에서 "Tutorial Public"을 선택하고, [퍼블릭 IP 자동 할당]을 "활성화"로 선택 후, [다음: 스토리지] 버튼을 클릭
5. [스토리지 추가] 페이지에서 [다음: 태그 추가] 버튼을 클릭한다.
6. [태그 추가] 페이지에서 [다음: 보안 그룹 설정] 버튼 클릭
7. [보안 그룹 구성] 페이지에서 "기존 보안 그룹 선택"을 클릭 후 "woong-test-securitygroup" 을 선택하고 [검토 및 시작] 버튼을 클릭
8. [인스턴스 시작 검토] 페이지에서 [시작] 버튼을 클릭 후 "기존 키 페어 선택"을 선택하고 [인스턴스 시작] 버튼을 클릭
9. 5~10분 후 [인스턴스] 메뉴를 클릭하여 신규로 생성된 인스턴스 2개를 확인
10. SSH Client(PuTTY)를 이용하여 서버 접속 후 다음과 같은 명령을 실행하여 웹 서버를 설치하고 웹페이지를 생성
sudo yum install httpd
sudo systemctl start httpd
11. 인스턴스의 퍼블릭 DNS를 확인 후 웹 브라우저로 웹 서비스 접속 가능 여부를 확인한다.
꼭 HTTP 상태 확인하자
12. SSH Console로 이동 후 다음과 같이 chkconfig 명령을 사용하여 서버 부팅 시 웹 서버가 자동으로 시작될 수 있도록 설정한다.
sudo chkconfig httpd on
13. 로그인 중인 ec2-user로 웹 서버의 기본 루트 페이지의 파일을 수정 변경 가능하도록 설정하기 위해 /var/www 디렉터리의 소유권 및 권한을 변경한다.
- 다음의 명령을 사용해서 www라는 그룹을 추가하고 /var/www에 대한 소유권과 권한을 부여한다.
sudo groupadd www
sudo usermod -a -G www ec2-user
exit
14. EC2를 SSH console로 다시 접속한다. SSH Client 를 이용하여 서버에 다시 접속 후, 다음과 같이 서버의 접속 권한을 수정한다.
cd /var/www
sudo chown -R root:www /var/www
sudo chmod 2775 /var/www/html
15. Nano Editor를 활용하여 index.html 을 신규로 생성 후 1번 서버는 "Test Website - EC2 Instance 1"을 입력 저장하고, 2번 서버는 "Test Website -EC2 Instance 2"로 입력 후 저장한다.
cd html
nano index.html
7. 실습 : ELB 구성하기
- Amazon Elastic Load Balancing을 구성하고 인스턴스를 연결하여 로드 밸런싱 서비스가 어떻게 동작하는 지를 실습하고 확인한다.
- 본 실습에 사용되는 애플리케이션 로드 밸런서는 월 750시간과 15GB 트래픽에 대해 프리티어(Free Tier)를 제공한다
1. AWS [서비스] → [컴퓨팅] → [EC2] 에서 [로드 밸런서] 를 클릭 후 [로드 밸런서 생성] 버튼을 누른다.
2. [로드 밸런서 유형 선택] 페이지에서 "Application Load Balancer"의 [생성] 버튼을 클릭한다.
3. [Basic configuration] 페이지 [name] 항목에 "WOONG-ELB"를 입력하고 [체계]는 "Internet-facing"을 선택 후 하단 [VPC]에서 "woong-test-vpc"를 선택하고 가용 영역을 2개 선택한다.
4. [보안 그룹]은 "woong-test-securitygroup"을 선택한다.
5. Listeners and routing 에 Create target group 을 누른다.
6. "Toturial-ELBGroup"을 Target group name 에 입력하고, Advanced health check settings 에서 Timeout 은 "2" Interval 은 "10" 으로 설정하고 [Next] 버튼을 누른다.
7. 등록된 2개의 인스턴스를 선택하고, "Include as pending below" 버튼을 클릭 후, [Create target group] 을 클릭한다.
8. 생성한 target group 을 선택 후, [create load balancer] 버튼을 클릭한다.
9. 2~5분 후, [로드 밸런서] → [대상 그룹]으로 이동 후 신규로 생성된 대상 그룹을 선택 후 [대상] 탭에서 인스턴스의 상태를 확인한다.
10. [로드 밸런서]로 이동 후 등록된 로드 밸런서를 선택하여 신규로 생성된 ELB의 DNS 이름을 확인 후 복사한다.
11. 복사한 ELB의 DNS 이름을 웹 브라우저에서 접속하여 웹 페이지가 정상적으로 접속되는지 확인한다.
8. 실습 : 서비스 실패 시 ELB 테스트하기
- 서비스 중인 서버 한 대가 중지되었을 때 로드 밸런싱 서비스가 어떻게 동작하는지 확인하자.
1. [인스턴스] → [인스턴스]로 이동 후 1번 서버를 선택하여 [인스턴스 상태] → [중지]를 클릭한다.
2. [로드 밸런서] → [대상 그룹]의 [대상] → [등록된 대상] 에서 1번 서버의 상태가 "unused"로 변경됨을 확인한다.
3. ELB의 DNS 이름을 웹 브라우저에 입력하여 웹 사이트 접속 후 여러번 차례 새로고침
4. [인스턴스] → [인스턴스]로 이동 후 1번 서버를 선택하고 [인스턴스 상태] → [시작] 버튼을 클릭하여 1번 서버를 시작한다.을 수행하여 2번 서버만 연결됨을 확인한다.
5. [로드 밸런서] → [대상 그룹]의 [대상] → [등록된 대상] 에서 1번 서버의 상태가 "healthy"로 변경됨을 확인한다.
6. 다시 DNS 접속하여 EC2 Instance 1 이 나오는지 확인한다.
9. 실습 : ELB 세션 연결 고정(Sticky Session 활성화)하기
- ELB의 도메인 DNS로 웹 페이지 접속 시 새로고침을 하면 접속되는 서버가 계속 변경됨을 확인할 수 있다.
- 이는 기본적인 ELB 연결 방식 Round Robin 방식이므로 위와 같이 동작한다.
- 웹 사이트의 로그인을 유지하기 위한 Sticky Session 활성화 방법을 알아보자.
1. ELB의 DNS 이름을 웹 브라우저에 입력 후 웹 사이트 접속을 한다.
2. [로드 밸런서] → [대상 그룹]에서 "Toturial-ELBGroup"을 선택 후 하단의 [속성 편집] 버튼을 클릭한다.
3. [속성 편집] 항목에서 [고정]의 "활성화"를 체크 [고정 지속 시간]은 "10분"으로 지정 후 [저장] 버튼을 클릭한다.
4. ELB의 DNS 이름으로 사이트 접속하여 새로고침을 수행하면서 웹 사이트가 고정 되는지 확인한다.
반응형
LIST
'Clould > 아마존 웹 서비스' 카테고리의 다른 글
아마존 웹 서비스 (AWS Discovery Book) #8 (0) | 2022.08.29 |
---|---|
아마존 웹 서비스 (AWS Discovery Book) #5 (1) | 2022.08.29 |
아마존 웹 서비스 (AWS Discovery Book) #4 (0) | 2022.08.28 |
아마존 웹 서비스 (AWS Discovery Book) #3 (0) | 2022.08.27 |
아마존 웹 서비스 (AWS Discovery Book) #2 (0) | 2022.08.26 |