로드 밸런싱

김성현·2021년 1월 23일
0

aws공부

목록 보기
6/10

로드 밸런싱(Load balancing)

  • 네트워크 기술의 일종으로 네트워크 트래픽을 하나 이상의 서버나 장비로 분산하기 위해 사용되는 기술
    로드 밸런싱을 수행하는 소프트웨어나 하드웨어를 로드 밸런서(Load Balancer)라고 한다.
  • Scale-Up을 통해 CPU, 메모리, 디스크 등의 기능을 업그레이드 한다.
    기존 보다 높은 성능을 보유한 웹 서버로 시스템을 업그레이드함으로써 문제를 해결하는 방법으로 필요로하는 성능이 높아질수록 비용이 기하급수적으로 늘어나는 단점이 있다.

  • Scale-Out을 통해 저렴한 노드 여러 개를 하나의 Cluster로 구성하는 방식
    Cluster 내 하나의 노드에 문제가 발생하여도 웹 서비스가 중단되지 않으므로 가용성이 높은 웹 서비스를 구성할 수 있다. Scale-Out 방식의 웹 서비스 구성이 주로 사용되며, 네트워크 트래픽을 서비스의 Port 단위로 제어하고, 트래픽을 분산처리함으로써 높은 가용성과 부하 분산을 통한 고효율 웹 서비스를 제공한다.

로드 밸런싱 방식

  • Round Robin
    Real 서버로의 Session 연결을 순차적으로 맺어주는 방식
    연결되어 있는 Session 수에 상관없이 순차적으로 연결시키는 방식으로 Session에 대한 보장을 제공하지 않는다.

  • Hash
    Hash 알고리즘을 이용한 로드 밸런싱 방식
    Client와 Server 간에 연결된 Session을 계속 유지해 주는 방식으로 Client가 특정 Server로 연결된 이후 동일 서버로만 연결되는 구조로 Session에 대한 보장을 제공

  • Least Connection
    Session 수를 고려하여 가장 작은Session을 보유한 서버로 Session을 맺어주는 연결 방식
  • Response Time
    서버 간의 Resource와 Connection의 차이가 있는 환경에서 사용되는 방식으로 응답시간을 고려하여 빠른 응답시간을 제공하는 서버로 Session을 맺어주는 방식이며, Session에 대한 보장을 제공하지 않는다.

Amazon Elastic Load Balancing

  • 단일 가용 영역 또는 여러 가용 영역에서 Amazon EC2 인스턴트 및 컨테이너, IP주소 같은 동일한 서비스를 제공하기 위해 준비된 여러 대상으로 애플리케이션 및 네트워크 트래픽을 자동으로 분산시킨다.
  • 서비스의 목적에 따라 세 가지의 로드 밸런서 중 하나의 서비스를 선택하여 사용할 수 있으며, 이를 통해 애플리케이션의 내결함성 보장을 위해 필요한 고가용성, 부하분산, 자동확대/축소, 강력한 보안 기능을 제공한다.

ELB 종류 및 유형

구분내용적합 서비스
Application Load BalanceerOSI 모델 7계층(Application)에서 작동하며, HTTP, HTTPS와 같은 고급 로드 밸런싱 서비스에 적합, 마이크로 서비스 및 컨테이너 기반 애플리케이션, 최신 애플리케이션 서비스에 최적화된 로드 밸런싱 제공, SSL/TLS 암호화 및 프로토콜 사용하여 보안성 보장HTTP/HTTPS 서비스
Network Load BalancerOSI 모델 4계층(Transport Layer)에서 작동하며, TCP 트래픽의 로드 밸런싱 서비스에 적합, 짧은 지연 시간과 초당 수백만 개의 요청 처리가 가능하며, 가용 영역 당 1개의 정적 주소를 사용하면서 트래픽의 변동이 심한 서비스에 최적화TCP 트래픽 로드 밸런싱 및 짧은 지연 시간
Classic Load BalancerOSI 모델 4계층(Transport Layer), 3계층(Network Layer)에서 작동, EC2-Classic 네트워크 내에 구축된 애플리케이션을 대상으로 제공EC2-Classic 네트워크 구축된 애플리케이션



ELB 주요 특징

  • 상태 확인 서비스(Health Check)
    ELB와 연결된 인스턴스의 연결 상태를 수시로 체크하여 인스턴의 OS나 애플리케이션의 문제로 인해 연결 장애나 서비스의 가능 여부에 대한 Health Check를 지속적으로 수행한다.
    Health Check가 실패하는 경우 해당 인스턴스로 트래픽을 전달하지 않는다.


    HTTP와 HTPPS 상태 확인 빈도, 실패 임계치, 성공 시 응답 코드를 임의 설정 가능하며, 자세한 상태 확인과 실패 원인은 API를 통해 확인은 물론 AWS 콘솔에도 표시된다.

  • Sticky Session
    Elastic Load Balancing을 통해 트래픽을 부하 분산하는 경우 기본적으로는 Round Robin 방식으로 트래픽 분산을 한다. 이 경우 한번 연결된 Session은 다음 연결 시 그대로 연결되지 않으며, 다음 번 연결 시 다른 인스턴스로 연결될 수 있어서 애플리케이션의 Session을 유지할 수 없게 된다. 특히 세션 유지가 필요한 백오피스 웹 사이트(그룹웨어 등)의 경우 연결이 끊어지거나 웹 사이트의 로그인 및 인증 정보를 유지할 수 없게 된다.


    Stick Sessin을 사용하면 처음 연결된 Client에 별도의 HTTP 기반의 쿠키 값을 생성하여 다음번 연결 요청에 대해 처음 접속했던 서버로 계속 연결하도록 트래픽을 처리하게 한다.

  • 고가용성 구성
    단일 가용 영역 또는 여러 가용 영역에 있는 여러 대상(Amazon EC2 인스턴스, 컨테이너 및 IP 주소)에 걸쳐 트래픽을 자동으로 분산할 수 있다.
    고가용성 구성을 위해 Route53과 같은 Amazon Web Services의 다른 서비스와의 연계를 통해 가용성 서비스를 제공할 수 있다.


    -SSL Termination 및 보안 기능
    웹 사이트에 SSL 인증서를 적용하여 HTTPS와 같은 방식으로 암호화 통신을 하기 위해서는 개별 웹 서버에 별도의 공인인증서를 구매 후 적용하여 한다. 이 경우 개별 인증서를 각 인스턴스에 직접 적용은 물론 인증서 만료에 따른 갱신 등 관리가 필요하다.


    또한 개별 EC2 인스턴스에서 SSL 암호화 및 복호화를 직접 처리하므로 인스턴스에 암호화 및 보고화 처리를 위한 추가 부하가 발생되게 된다. ELB의 SSL Termination 기능을 사용하면 개별 인스턴스에 SSL 인증서를 직접 설치할 필요가 없고 ELB에 공인인증서 또는 ACM(Amazon Certificate Manager)에서 무료로 발급받을 수 있는 사설 인증서를 등록함으로써, SSL 인증서를 이용한 HTTPS 활용 트래픽 암호화 및 복호화 서비스를 제공할 수 있다.

웹 서버 구성 및 웹 페이지 연결 테스트

  1. AWS에 로그인하여 [서비스] -> [컴퓨팅] -> [EC2]로 이동한다.


  2. [인스턴스]에서 [인스턴스 시작]을 눌러 AMI 선택에서 Amazon Linux 2 AMI를 선택한다.


  3. 유형은 "t2.micro"로 한다. 그 후에 다음으로 넘어간다.


  4. 생성할 인스턴스는 2개로하고 네트워크는 기존에 사용하던 vpc로한다. 그 후 보안그룹 페이지까지 넘어간다.


  5. 이전에 사용한 보안 그룹을 사용해도되고 새로 만들어서 사용해도된다. [검토 및 시작]을 한다. 그 다음 [시작하기] 키 페어는 기존에꺼를 사용하여 인스턴스를 생성한다.


  6. 새로 2개의 인스턴스가 생성되었다.


  7. Putty로 서버에 SSH 접속을 하여 "sudo yum install httpd" 명령으로 설치한다.


  8. 설치 후에 서버의 퍼블릭 DNS에 접속해서 확인한다.


  9. sudo chkconfig httpd on으로 재부팅 시에도 실행하게 만든다.


  10. www라는 그룹을 추가하여 현재 로그인 중인 계정의 2차 그룹을 www로 바꿔준다. 그러고나서 재접속한다.
    sudo groupadd www
    sudo usermod -a -G www ec2-user


  11. /var/www의 하위 디렉터리의 그룹까지 www로 바꿔준다. 그 다음에 /var/www/html 파일의 허가권을 2775로 변경한다.
    sudo chown -R root:www /var/www
    sudo chmod 2775 /var/www/html


  12. 디렉터리 html에서 "index.html"파일을 만들어서 "Test Website - EC2 Instance 1" 내용을 입력하여 저장한다. 다른 인스턴스에는 "Test Website - EC2 Instance 2" 입력한다.


  13. 다시 퍼블릭 DNS로 웹 서버에 접근해보면 아까 입력한 내용이 뜬다. 다른 인스턴스도 동일하게 설정한다.


ELB 구성하기

  1. [서비스]에서 [인스턴스]로 이동하여 왼쪽 메뉴에서 [로드밸런서]에서 [Load Balancer 생성]한다.


  2. 유형은 [Application Load Balancer]로 한다.


  3. vpc는 기존껄로 사용하고 다음으로 넘어간다.


  4. 보안 그룹 구성에서 tutorial-security 보안그룹을 설정하고 다음으로 넘어간다.


  5. 이름은 "Tutorial-ELBGroup"이라하고 상태검사에서 고급 상태 검사 설정에서 제한시간을 2초로 간격은 10초로하고 다음:대상 등록으로 넘어간다.


  6. 대상등록 페이지에서 인스턴스 2개를 체크하여 [등록된 항목에 추가]를 해주고 다음:검토로 이동한다.


  7. 내용을 확인하고 생성해준다.


  8. 생성을하고나서 [로드 밸런싱]에서 [대상그룹]에서 대상 인스턴스의 상태를 확인한다.


  9. 로드밸런서로 이동하여 생성한 로드 밸런서의 DNS를 복사해서 접속해본다.


  10. 아까 만들어둔 내용의 페이지가 번갈아 가면서 뜨면 성공


서비스 실패 시 ELB 테스트하기

  1. 인스턴스 페이지로 가서 2개 중에 하나를 중지 시킨다.


  2. 로드 밸런싱의 대상 그룹에서 대상 탭에서 인스턴스를 확인하면 1개의 인스턴스 상태가 unused로 변했다.


  3. 다시 접속해서 새로고침을 해보면 페이지가 바뀌지 않고 하나의 인스턴스만 실행됨을 확인


  4. 중지 시킨 인스턴스를 시작시킨다.


  5. 다시 돌아와서 확인해보면 unused에서 healthy로 변경됨을 확인된다. 이후에 다시 서버에 접속하면 두 서버가 번갈아가면서 페이지를 띄우는걸 볼 수 있다.


ELB 세션 연결 고정(Stickey Session)

  1. [로드 밸런싱]에서 [대상그룹]에서 해당 로드 밸런서에 우클릭하여 [속성 편집]을 진행한다.


  2. 고정을 체크하여 활성화 시키고 시간을 10분으로 입력하여 저장한다. 이 설정을 하게되면서 처음 접속한 서버의 페이지가 10분간 유지된다.

0개의 댓글