본문 바로가기
programming_kr/other

로드밸런싱과 클러스터링

by JSsunday 2022. 11. 5.
728x90

로드밸런싱(Loadbalancing)

로드 밸런싱이란 부하 분산을 위해서 가상(virtual) IP를 통해 여러 서버에 접속하도록 분배하는 기능을 말한다.

 

 

  • 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여
    서버의 로드율 증가, 부하량, 속도 저하 등을 고려하여 적절히 분산처리하여 해결해 주는 서비스입니다.
  • 로드밸런싱은 하나의 서비스를 하나 이상의 노드가 처리하는 식으로 작동합니다.
  • 서버의 로드를 클러스터링된 서버별로 균등하게 나누어 주는 서버를 말합니다.
  • 로드밸런싱을 이용하면 한 서버가 다운되더라도 이중화시킨 다른 서버에서 서비스를 지속하여,
    사용자들이 문제를 인지하지 못하게 할 수 있습니다.
  • 로드밸런싱을 위한 서비스 요청 처리 알고리즘은 다양합니다.
    랜덤, 라운드 로빈, CPU나 메모리 사용률 등과 같은 특정 범주에 따라 노드를 선택하는 등의 방법이 있습니다.
    오픈소스 로드밸런서 중 많이 사용되고 있는 것은 HAProxy입니다.
  • 로드밸런싱을 해주는 소프트웨어 혹은 하드웨어 장비를 로드밸런서라고 합니다.
  • 로드밸런서의 주 목적은 동시에 오는 수 많은 커넥션을 처리하고 해당 커넥션이 요청 노드 중의 하나로 전달될 수 있게 하는 것입니다. 그리고 단지 노드를 추가하는 것만으로 서비스가 확장성을 가질 수 있도록 합니다.

 

로드 밸런싱 장애 대비

  • 로드밸런서 서버의 이중화를 기본으로 구성합니다.

 

로드 밸런싱 장애 발생 시

  • 이중화된 Load Balancer들은 서로 Health Check를 합니다.
  • Master서버와 Standby서버을 구성하고 Master 서버가 Fail 시 Standby 서버가 자동으로 Master 서버의 역할을 합니다.
  • Standby서버는 평상시에는 대기상태로만 있다가 Master 서버가 Fail 되었을 경우만 작동을 합니다.
  • 이 구성을 Fail Over라고 합니다.

 

로드 밸런싱의 단점

  • 로드밸런서를 사용할 때 어려운 문제 중 하나는 세션 데이터를 관리하는 것입니다.
  • 클라이언트의 연결 정보를 저장하는 세션이 로드밸런싱을 통해 하나의 서버 장비에 저장이 되는 경우,
    추후 다른 서버로 접속하게 되면, 해당 클라이언트의 세션이 유지되지 않는다는 것입니다.
    즉, 서버에 액세스 할 때마다 다른 세션을 사용한다면 특정 사용자의 정보를 일관성있게 유지할 수 없게 됩니다.
  • 이러한 문제를 해결하기 위해 세션을 고정(session sticky)합니다.
  • 이 방법으로 특정 사용자의 요청이 전달될 노드를 고정시킬 수 있습니다.
    하지만 이 방법도 문제가 있다. 고정된 세션의 노드에 장애가 발생하면 고정한 의미가 없어집니다.
    장애가 발생하여 비활성화된 노드에 대한 고려가 필요합니다.

 

클러스터링(Clustering)

여러 대의 컴퓨터를 똑같은 구성의 서버군을 병렬로 연결한 시스템으로 마치 하나의 컴퓨터처럼 사용하는 것을 클러스터라고 한다.
  • 여러 대의 컴퓨터를 가상의 하나의 컴퓨터처럼 사용하게 해주는 것을 클러스터링이라고 합니다.
  • 클러스터링 환경에서는 특정 장비에 문제가 생기거나 애플리케이션에 문제가 생기더라도, 전체적인 서비스에는 영향을 주지 않게 제어할 수 있습니다.
  • 클러스터링은 Virtual IP(가상 IP) 기반으로 구현되는데, 서비스를 제공하는 실제 장비는 Physical IP를 가지고,
    데이터의 처리는 Virtual IP를 통해 처리합니다. 이렇게 내부의 시스템은 철저하게 가려 추상화하는 것이 원칙입니다.
  • 클러스터링 환경에서는 특정 장비에 문제가 생기거나 특정 장비에서 실행중인 애플리케이션에 문제가 발생하더라도 전체 서비스에 영향을 미치지 않도록 제어가 가능합니다.
  • 로드밸런서에 의해 각 클러스터링된 서버에 의해 서비스가 진행이 됩니다.

 

서버 이중화

서버 이중화란 운영중인 서비스의 안정을 위해 각종 자원을 이중 또는 그 이상으로 구성하는 것입니다.

따라서 하나의 서비스에 장애가 발생하는 경우 다른 서버를 통해 서비스를 지속가능하게 합니다.

장애가 일어난 Active 서버를 내리고 대기하고 있던 Stand by 서버를 올리는 것을 fail over라고 합니다. 이를 보통 네트워크 장애 발생 시 노드 간 fail over가 실행되도록 설정했다고 말합니다.

fail over 발생 시 Active 서버에 할당한 가상 IP 주소를 제거하고 Stand by 서버에 해당 주소를 재할당하기 때문에 클라이언트는 동일한 IP주소로 그대로 접속이 가능합니다.

 

서버 이중화의 목적

  1. 장애 또는 재해시 빠른 서비스 재개를 위함
    오류가 발생하더라도 사용자는 인지못하도록 하기 위함.

  2. 원활한 서비스를 위해 한 개의 장비에서 일정량 이상의 트래픽을 처리하는 경우 응답시간이 늦어질 수 있습니다.

 

서버 이중화의 구현

HA(High Availability) 서비스와 디스크 RAID 구성, 오라클의 RAC(Real Application Clusters)등으로 구현이 가능합니다.

 

서버 이중화 솔루션이 반드시 갖추어야 할 기본 기능

  1. 데이터 복제 기능
    1번 서버에서 장애 발생 시 2번 서버가 1번 서버를 대신하여 바로 서비스하기 위해서는 양쪽 데이터는 항상 100% 동일해야 한다는 무결성을 보장해야 한다.
    이렇게 Data를 동일히 맞추기 위해서는 Data Replication(데이터 복제) 기능이 발드시 필요하다.
    이 때 Master(Read, Write) - Slave(Read) 구조를 가진다. 즉, 다수의 slave 구축으로 Read(읽기) 부하를 분산시킬 수 있다.
    Master-Slave구조에서 한 개의 Master에 여러 Slave가 있는 구조를 클러스터링 구조라고 하며 DDR구조라 한다.
  2. 장애 감시 기능
    Stand by 서버는 Active 서버가 언제 장애가 발생할지 모르니 항상 감시하고 있어야 한다.
    이러한 구성은 Active-Stand By HA 구성이라고 한다.

 

서버 이중화 구조

보통 서버 이중화의 구성은 Active-Active 구성과 Active-Standby 구성으로 나뉜다.

 

Active-Active구조

  • 부하분산의 목적으로 주로 활용
  • 서비스 단위를 나누어 분산시키기도 한다.

 

Active-Standby 구조

  • 즉각적인 failover(=swap)을 위해 주로 활용. 서버를 이중화함과 동시에 부하 분산을 하여 장애시 서비스를 이전하여 운영하는 형태다.
  • 지속적으로 Active서버에 장애가 발생했는지 확인하기 위해 Active서버와 Standby서버가 heartbeat을 주고받으며 health check를 한다.
  • Active서버에 장애 발생 시 다운된 서버를 대신하기 위하여 Standby서버로 fail over(=swap)되어 동작한다. 그 동안 개발자들은 다운된 Active에 접근하여 장애이슈처리.
  • 결국 일반적으로 Active와 Standby는 같은 기능을 함(=Mirroring Server)

 

서버 이중화 솔루션의 단점

  • 데이터가 실시간 복제된다는 점이다.
  • 실수로 반영된 데이터 혹은 바이러스에 감염된 파일도 복제가 되어 2번 서버 또한 감염이 될 수 있다는 점이다.
  • 이러한 단점을 보완하기 위해서는 백업 솔루션을 추가 도입해야할 수 있다.

정리

  • 로드 밸런싱은 여러대의 서버에 패킷의 부하 분산시켜주는 것이고 클러스터링은 여러대의 서버를 하나의 서버로 만들어 주는 것입니다. 서버 한 대가 문제가 생겼을 경우 다른 서버에서 동작할 수 있도록 하는 것입니다.
  • 클러스터링은 한서비스를 제공하는 여러개의 서버를 하나로 묶어 성능을 높여 많은양의 패킷을 처리하는 것이고,
    로드밸런싱은 여러대의 서버에 분산을 시켜주는 것입니다.
예를 들어 서버가 A, B, C가 있다고 가정합니다. A 서버에서 부하량이 높아 특정 사용자를 B서버에서 이용하게끔 로드밸런싱을 시켰습니다. 이용 중 B서버에서 문제가 생겨 서비스를 제공할 수 없게되자 클러스터링을 통해 사용자가 C 서버를 통해 서비스를 이용하게끔 제공했습니다.

 

참조
서버 이중화 및 로드 밸런싱
로드 밸런싱과 클러스터링

 

728x90

'programming_kr > other' 카테고리의 다른 글

window 환경 tomcat + apache 연동하기  (0) 2022.11.19
OAUTH 2.0 이란?  (0) 2022.10.22
REST API란?  (0) 2022.09.03
애자일(Agile Methodology) 방법론이란?  (0) 2022.08.11
DevOps란?  (0) 2022.08.08

댓글