강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
꿔니님의 클러스트링 강좌
조회 : 5,073  



(기사등록일 : 2001-07-30 18:41:51)

'Mission Critical' 이란 말을 무지 무지 많이 들은적이 있다! 기업의 중대한 업무 사용되는 장비의 광고에는 항상 이런 문구가 들어있다. 아마 왠만한 시스템관리자는 지겨운 말일 것이다. 시스템관리자의 가장 큰 고민은 무엇인가? 서버가 다운되지 않고 항상 한결같이 잘 돌아가 모든 서비스가 완벽하게 이루어지는 것일것이다. 물론 일부에선 그런 환경이 만들어져 자신의 한가해지길 바라는 시스템관리자도 있겠지만 말이다.

하지만 시스템관리자 못지 않게 시스템다운에 민감한 사람이 또 있다. 바로 인터넷업체의 사장님들이다. 내가 알고 있는 인터넷 업체의 사장님들은 술을 마시고도 집에 들어가기 전 게임방에 들려서 자신의 회사 사이트에 확인해보고 집으로 들어가는가 하면 자다가도 일어나서 사이트의 접속하기도 했다.

시스템관리자, 사장님 모두 시스템의 다운을 항상 걱정하고 있다. 그렇다고 시스템을 무한정 확장하고 비싼 관리 소프트웨어를 사용할 수도 없는 일이다. 바로 이런 필요에 의해 발생한 것이 바로 클러스터링이다. 실제로 일정 수준 이상의 규모가 있는 업체의 대부분의 서버가 클러스터링이 되어 있다. 그러면 이런 클러스터링이 무엇을 의미하는지, 그리고 어떻게 사용되고 있는지 자세히 알아보도록 하겠다.

이번 글에서 자세하게 알아볼 것은 클러스터링 기술 중 로드밸런싱, 즉 부하조절이라는 부분이라는 것도 있지 말자!



(기사등록일 : 2001-07-30 18:43:15)

클러스터는 여러개의 시스템이 하나의 거대한 시스템으로 보이게 만드는 기술이다.
이렇게 하는 기술에는 여러 가지가 있기 때문에 각 기술의 특징을 잘 이해하는 것이 클러스터링 기술을 잘 활용할 수 있는 방법이다.

컴퓨터 클러스터링은 Digital VAX 플랫폼을 시초로 1980년대부터 다양한 형태로 만들어지기 시작했으며,
이러한 클러스터는 디스크 공간 같은 하드웨어 자원을 공유할 수 있었고,
여러 사용자에게 컴퓨팅 자원을 제공할 수 있었다.



(기사등록일 : 2001-07-30 18:44:38)

클러스터링은 어떻게 보면 병렬 처리 기술의 일부에 속한다. 다른 기술과의 차이점은 자원을 공유하거나 복제하는 수준에 달려있다. 가장 단순한 구조는 한 마더보드에 여러개의 프로세서를 유지하고 다른 기술을 공유하는 것이다. 가장 높은 수준은 분산프로세싱이 여러개의 컴퓨터를 사용하되, 시스테밍 단일 서버로 취급되지 않는 것이다. 다음에 병렬프로세싱에 관련된 비슷한 기술들이 있다.

  • SMP
  • NUMA
  • MPP
  • 분산프로세싱

SMP(Symmetric Multiprocessing) : 대칭형 다중처리

SMP는 운영체계와 메모리를 공유하는 여러 프로세서가 프로그램을 수행하는 것을 말한다. SMP에서는 프로세서가 메모리와 입출력 버스 및 데이터 path를 공유하며, 또한 하나의 운영체계가 모든 프로세서를 관리한다. 보통 2개부터 32개의 프로세서로 이루어지며, 어떤 시스템은 64개까지 프로세서를 공유한다.

SMP시스템은 보통 MPP시스템에 비하여 병렬 프로그래밍이 훨씬 쉽고, 프로세서간 작업 분산(workload balance)시키는 것은 훨씬 용이하지만, 확장성은 MPP에 비하여 취약하다. 또한 많은 사용자가 동시에 데이터베이스에 접근하여 일을 처리하는 OLTP 작업에서도 강점을 보인다.

SMP 컴퓨터에서 운영 체제 자체는 애플리케이션을 구성하는 개별적인 프로세스를 사용 가능한 CPU간에 분배한다. Windows NT는 가중치가 매우 높은 스레드를 기반으로 하고, 리눅스는 가중치가 매우 적으므로, 구가지 모두 SMP하드웨어에 아주 적합하다.

2~4개의 프로세서를 가지는 SMP 시스템은 구축하기 쉬우나 그 이상은 힘든데, 이것은  SMP 시스템자체가 단일의 I/O와 메모리를 공유해야 하기 때문이다. 이것이 바로 시스템의 병목현상을 일으키는 주 원인이기 때문에 오히려 이 이상의 CPU확장은 성능 저하의 원인이 될 수도 있다. 실제로 2CPU SMP 시스템과 4CPU SMP 시스템의 성능차이는 실제로 크지 않다.

위와 같이 설명되어지는 것이 일반적인 서적이나 매뉴얼에 나와 있는 설명이다. 실제로 이런 설명을 이해할 수 있는 사람은 몇 명되지 않을 것이다. 그럼 SMP는 무엇인가? 하나의 일을 여럿이서 나누어서 하는 것이다. 그러나 일을 주는 사람과 일을 받아 나가는 사람은 한 사람밖에 없는 것이다. 그러므로 중간에 일을 실제로 하는 사람이 많으면 일을 주고 받는 사람이 지치게 될 수밖에 없을 것이다.

* OLTP : OLTP[오엘티피]는 일반적으로 은행이나, 항공사, 우편주문, 슈퍼마켓, 제조업체 등을 포함한 많은 산업체에서 데이터 입력이나 거래조회 등을 위한 트랜잭션 지향의 업무을 쉽게 관리해주는 프로그램이다.

NUMA (Non-Uniform Memory Access) : 비균등 메모리 억세스

SMP System에서 가장 큰 문제점은 I/O와 메모리 엑세스의 병목 현상이었다. 즉 일주는 사람과 다 된일을 받아가는 사람이 너무 바빠서 중간에 실제적으로 많이 확보인 인부를 활용하지 못하는 상황이다. 하지만 이런 경우 각각의 인부에게 한사람씩 더 주어 자신의 일을 미리 미리 받고 자신이 하고 난 일을 임시로 보관해 둘 수 있는 장소가 있다면 이런 문제는 해결 될 수 있을 것이다.

바로 이런 SMP의 단점을 해결한 것이 바로 NUMA 기술이다. NUMA는 몇 개의 마이크로프로세서들 간에 중간 단계의 공유메모리를 추가함으로써, 모든 데이터 액세스가 주버스 상에서 움직이지 않아도 되도록 하는 것이다.

NUMA는 하나의 상자 속에 있는 클러스터로 생각할 수 있다. 클러스터는 대체로 마더보드 상의 하나의 공유 메모리 (L3 캐시라고도 부른다)로 향하는 로컬버스에, 서로 연결된 네 개의 마이크로프로세서들로 구성된다. 이 유니트는 모든 클러스터들을 서로 연결하는 공용 버스 내에서 SMP를 구성하기 위하여 비슷한 유니트에 추가될 수 있다. 이러한 시스템은 대체로 16~256개의 마이크로프로세서를 가지고 있다. SMP 시스템에서 실행되는 응용프로그램에게는, 모든 개별 프로세서 메모리들이 하나의 단일 메모리인 것처럼 비쳐진다.

프로세서가 어떤 메모리 주소에 있는 데이터를 찾을 때, 그것은 마이크로프로세서 그 자체에 붙어 있는 L1 캐시를 먼저 찾은 다음, 근처에 있는 다소 큰 L2 캐시 을 찾는다. 그 다음에는 다른 마이크로프로세서 인근에 있는 원격 메모리의 데이터를 찾기 전에, NUMA 구성에 의해 제공되는 제3의 캐시를 찾는다. NUMA에게는, 이러한 클러스터들 각각이 서로 연결된 네트웍 내에 있는 하나의 노드들 처럼 비쳐진다. NUMA는 모든 노드들 상에 있는 데이터를 계층 체계로 유지한다.

MPP (Massive Parallel Processing)

MPP 시스템은 보통 하나의 CPU, 하나의 Memory, 하나의 OS로 구성된 여러 Node들의 집합으로 구성되어 있다. MPP 시스템은 단일 OS하에서 운영되지 않으므로 Hardware Coherency를 사용할 수 없으며 Message-passing방법을 사용한 Software Coherency를 사용한다. Software Coherency는 Hardware Coherency에 비해 수백 내지는 수천배의 지연시간(latency)을 허용하며, 따라서 수백 내지 수천개의 프로세서를 사용하여 시스템을 구성하기가 쉽다. 이러한 지연시간으로 인해 MPP 시스템상에서 높은 Performance를 얻을 수 있는 어플리케이션은 각 노드간에 교환되는 데이터를 최소화 할 수 있도록 잘 분리되는 것이라야 한다.

MPP 시스템은 Hardware Coherency나 Shared Memory를 구현해야 할 필요가 없기 때문에 시스템 개발자에게는 구현하기 쉬운 장점이 있으나 어플리케이션 개발자는 Coherency구현을 위한 Message Passing 및, 퍼포먼스를 위한 어플리케이션 분산등을 고려하여 작성하여야하는 어려움이있다. 이러한 이유로 인해 데이터 공유가 필수적이고 빠른 응답시간을 요구하는 OLTP 어플리케이션들은 MPP 시스템에 적합하지 않으며, 빠른 응답시간을 요구하지 않고 어플리케이션의 각 시스템에서 데이터 요구가 분리되어 있는 의사결정 지원 시스템(DSS : Decision Support System), VOD(Video On Demand) 시스템등에 MPP시스템이 유용하다.

대규모의 병렬 시스템은 주로 계산 위주의 고급 연산에 사용되고, 현재 세계에서 가장 빠른 컴퓨터는 수학적 모델을 통해 핵 폭발을 시뮬레이터하는 MPP 시스템이다.

 

 비 교 항 목

    S M P

    M P P

    N U M A

 구  조

시스템 버스와 같은 인터커넥션을 통해 프로세스, 메모리, I/O 등의 시스템 자원을 균등하게 공유하는 구조

개별 프로세스, 메모리, I/O 등의 시스템 자원을 가지는 노드들을 독점된 상호 연결로 결합한 구성

복수개의 CPU 보드를 연결하여 통합된 멀티 프로세서 시스템을 만드는 구조

 운영 형태

하나의 OS 커널이 존재
표준 개방형 OS 지원 

각 노드별로 OS 커널 존재
표준 개방형 OS 지원 안함. 

표준의 개방형 OS 지원

InterConnection

멀티 프로세싱, 멀티 쓰레드 , 메모리 공유 프로그래밍 / 통신 방식 

데이터 병렬 처리 또는 메시지 패싱 프로그래밍 방식

글로벌 메모리 공유 방식

데이터 전달방식

공유 메모리에 직접 접근

명시적인 메시지 전달

공유 메모리 접근 및 로컬 캐쉬 메모리 사용

원격데이터 접근

 자동

주소 변환, 메시지 전달

 패킷 전송

 프로그래밍

프로그래밍 용이
표준화된 개발 툴이 다양 

프로그래밍이 어려움.
불완전한 병렬 SW 제공 

프로그래밍이 용이

 확장성

업무량 증가 또는 추가시 단위 SMP 내에서 CPU, 메모리 등을 증설 가능

일정 규모까지 시스템 노드 내에서 증설 가능 또는 시스템 노드를 증가

일정 규모까지 시스템 노드 내에서 증설 가능 또는 시스템 노드 증가

 안정성

HW 이중화 및 이중 운영 기능
장애 발생의 자동 감지 및 장애 부분 절단 가능
디스크 미러링 

HW 이중화 및 상호 감시
장애의 자동 감지 및 자동 절환
디스크 미러링 

 

 Application

다양한 유틸리티 지원

극히 제한됨

 

 가  격

 저, 중가

 고가

 중, 고가



(기사등록일 : 2001-07-30 18:48:55)

클러스터는 노드와 관리자로 구성되어 있다.
노드는 프로세싱 자원을 제공하는 시스템이고, 클러스터 관리자는 노드를 서로 연결하여 단일 시스템처럼 보이게 만드는 로직을 제공한다.

  • 클러스터노드
    클러스터 노드는 클러스터의 실질적인 작업을 처리하는 것을 말한다.
    일반적으로 클러스터 노드는 클러스터에 속하도록 구성해야 한다.
    클러스터의 역할과 업무에 따라 해당 소프트웨어는 독특하게 제작된 것일 수도 있고, 일반적인 소프트웨어 일 수도 있다.
    역할에 따른 특정 소프트웨어라면 공학 계산을 위한 각 노드에 맞는 프로그램일 수도 있으며, 일반적인 소프트웨어는 로드밸런싱을 위한 클러스터라면 아파치 같은 소프트웨어를 들 수 있을 것이다.

  • 클러스터관리자
    리눅스의 커널이 모든 프로세서에 대한 스케쥴과 자원관리를 하는 것처럼 클러스터 관리자 역시 이런 관리자의 역할로써 각 노드에 대한 자원분배 및 관리를 할 수 있는 기능을 가지고 있다.
    기본적으로 한계의 관리자가 필요하지만 때에 따라서는 클러스터 노드가 클러스터 기능을 하기도 하며, 대규모 환경의 경우에는 여러대의 클러스터 관리자가 있기도 하다..


(기사등록일 : 2001-07-30 18:51:28)

클러스트의 정의는 매우 광범위 하다. 리눅스에서는 LVS(Linux Virtual Server) 라는 이름으로 불리기도 한다. 또한 앞에서 설명한 여러 가지들도 하나의 클러스터 기술이다. 그 만큼 클러스터는 여러 가지 기능을 하고 있으며, 시스템관리자의 고민을 해결해 주고 있다. 클러스터의 주요 목적은 CPU자원을 공유하거나, 여러 컴퓨터간의 부하 조정, 가용성이 높은 시스템을 구축, 주 시스템이 다운 되었을 때를 대비한 Fail-Over 기능을 제공하는 것이다.

  • 공유 프로세싱 : HPC(High Performance Computing)
    일반적으로 리눅스 클러스터링이라고 불리는 클러스터링이다. beowulf 프로젝트로도 유명하다. beowulf는 여러 시스템의 프로세싱 능력을 조합하여 대용량의 프로세싱 능력을 갖는 하나의 시스템을 제공한다. beowulf는 여러 시스템의 프로세싱 능력을 조합하여 대용량의 프로세싱 능력을 갖는 하나의 시스템을 제공한다.

    이것은 원래 과학용 시스템이나 CPU 위주의 용도로 설계된 것인데, 이 시스템에서는 API에 따라 특별히 작성된 프로그램만 자신의 작업을 여러 시스템 사이에 분배할 수 있다. 즉, 프로그밍을 별도로 해야할 경우가 많아진다는 것이다.

    beowulf에 관한 자료는 http://www.beowulf.org 에 가면 얻을 수 있다.
     

       

[그림] 리눅스원 HFC 와 아발론 HFC

  • 부하조정 : Load Balancing
    최근에 대규모 웹사이트 구축에 필수적으로 사용되는 기술로 여러대의 웹서버 노드를 두고 중앙의 관리툴에서 부하를 분산하게 해주는 기술이다. 이 기술의 특징은 노드 간 통신이 필요 없다는 것이다. 부하 조정을 이용하면 각 노드는 자신의 용량이나 로드에 맞게 요청을 처리할 수 있기도 하고, 클러스터 관리자에서 할당한 량의 프로세스를 처리할 수도 있다.
  • Fail-Over
    Fail-Over는 부하조정과 비슷하다. 하지만 조금 틀린 것이 있는데 부하조정의 경우에는 모든 노드가 한꺼번에 동작을 하는 것이고, Fail-OVer의 경우에는 평소엔 동작을 하지 않고 Primary 서버가 문제가 발생했을 시에 백업서버로써 가동을 하는 것이다. 부하조정을 응요하면 부하조정과 Fail-Over 기능을 동시에 하게 할 수가 있다.
  • 높은 가용성
    아무리 시스템관리자가 뛰어난 실력과 부지런하다고 해도, 서버는 기계이기 때문에 간혹 문제를 발생하기도 한다. 어떤 경우에는 관리자도 어떻게 할 수 없는 상황이 발생하기도 한다. 이런 경우에 최대한 가용성을 높이기 위한 방법이 바로 클러스터링이다. 이런 높은 가용성을 만들기 위해 위의 Fail-Over 기술을 사용한다.
    가용성은 업타임(작동가능시간)의 백분율로 계산된다. 일반 서버의 경우 99%의 업타임을 갖지만, 높은 가용성을 목적으로 하는 시스템은 최대 99.99%의 업타임을 가질 수 있다. 이 시간은 일년을 기준으로 했을 때 52분 미만이면 되는 수치이다. 52분 다운이면 어머어마한 시간 인 것 같지만 실제로 이정도의 가용성을 보이는 서버는 굉장히 중요하고 손이 많이간 서버일 것이다.


(기사등록일 : 2001-07-30 18:54:06)

클러스터 관리자는 클러스터 시스템에서 가장 중요한 역할을 하는 것이다. 실제로 여기서 다룰 클러스터링은 부하분산 즉 로드밸런싱에 관한 부분이다. 이것은 관리자의 부하 분산 방식에 따라 그 효과는 천차만별로 달라진다. 부하 분산 작동 방식에는 직접포워딩, IP터널링, NAT의 세가지 방식이 있다. 이 세가지에 대해서 자세히 알아보도록 하겠다.

    직접포워딩 (Direct Routing)

    1. 사용자가 서버 클러스터에서 제공하는 서비스에 접근할때, 가상 IP 주소(가상 서버의 IP 주소)로 향하는 요구 패킷이 부하분산서버로 간다.
    2. 부하분산서버(LinuxDirector)에서 패킷의 목적지 주소와 포트 번호를 검사한다.
    3. 내용이 가상 서버 서비스와 일치하면 스케쥴링 알고리즘에 따라 클러스터에서 실제 서버를 선택하고, 접속을 기록하는 해쉬 테이블에 새로운 접속을 추가한다.
    4. 부하분산서버에서 선택한 서버로 직접 패킷을 전송한다.
    5. 들어오는 패킷이 이러한 접속에 해당하고 해쉬 테이블에서 선택한 서버를 찾을 수 있으면 패킷은 다시 서버로 직접 전송된다.
    6. 서버에서 전송(포워딩)된 패킷을 받으면, 서버는 패킷에서 알리아스 인터페이스나 지역 소켓의 주소를 찾아서 요청을 처리한다.
    7. 결과를 사용자에게 직접 전송한다.
    8. 접속이 해제되거나 시간을 초과하면, 해쉬 테이블에서 연결 기록을 제거한다.
     

    부하분산 서버는 단순히 데이터 프레임의 MAC 주소만 선택한 서버로 바꾸며 이를 다시 LAN에 재전송한다. 이런 이유 때문에 부하분산 서버와 각 서버가 단일한 물리적 세그먼트안에서 연결되어야한다. 부하분산 서버를 통해 전달된 필요가 없기 때문에 빠르고 오버헤드가 적다.

    IP 터널링

    IP 터널링 (IP encapsulation)은 IP 데이터그램안에 IP 데이터그램을 넣는 기술로서, 어떤 IP 주소를 향하는 데이터그램을 감싸 다른 IP 주소로 재지향할 수 있다. IP encapsulation은 현재 엑스트라넷, 모빌-IP, IP-멀티캐스트, tunnled 호스트나 네트웍 등에 일반적으로 사용되고 있다.

    1. 사용자가 서버 클러스터에서 제공하는 서비스에 접근할때, 가상 IP 주소(가상 서버의 IP 주소)로 향하는 요구 패킷이 부하분산서버로 간다.
    2. 부하분산서버에서 패킷의 목적지 주소와 포트 번호를 검사한다.
    3. 내용이 가상 서버 서비스와 일치하면 스케쥴링 알고리즘에 따라 클러스터에서 실제 서버를 선택한다.
    4. 접속을 기록하는 해쉬 테이블에 새로운 접속을 추가한다.
    5. 부하분산서버에서 IP 데이터그램안에 패킷을 감싸 넣고(encapsulate) 실제 서버로 전송한다.
    6. 들어오는 패킷이 이러한 접속에 해당하고 해쉬 테이블에서 선택한 서버를 찾을 수 있으면 패킷을 감싸넣어 선택한 서버로 전송을 할 것이다.
    7. 서버에서 감싸넣어진 패킷을 받으면 패킷을 다시 풀고 요청을 처리한다음 최종적으로 실제 서버의 라우팅 테이블에 따라 사용자에게 직접 결과를 돌려준다.
    8. 접속이 해제되거나 시간을 초과하면, 해쉬 테이블에서 연결 기록을 제거한다.

    IP터널링을 이용하는 경우, 부하분산서버는 단지 들어오는 요청에 대하여 각기 다른 실제 서버로 할당만을 할 뿐이고 실제 서버가 사용자에게 직접 응답을 보낸다. 그래서 부하분산서버에서 더 많은 요청를 처리할 수 있으며 100개 이상의 실제 서버를 다를 수 있다. 또한 부하분산서버자체가 시스템의 병목지점이 되는 현상도 없앨 수 있다. 이렇게 IP 터널링을 이용하면 부하분산서버에서 사용할 수 있는 서버 노드의 수를 크게 늘릴 수 있다. 설사 부하분산서버가 100Mbps full-duplex(전복조) 네트웍 어댑터를 가졌어도 가상 서버의 최대 처리량은 1Gbps에 달할 수 있다.

    IP 터널링의 이러한 특성을 이용하면 아주 높은 성능의 가상 서버를 구축할 수 있으며, 특히 가상 프록시 서버에 적합하다. 프록시 서버에서 요청을 받는 경우, 인터넷에 직접 연결하여 개체를 가져오고 그것을 바로 사용자에게 보내줄 수 있다. 그러나, 모든 서버에서 "IP 터널링"(IP Encapsulation)을 지원해야한다.

    NAT (Network address translation)

    IPv4에서는 IP주소가 부족하고 보안상에 몇가지 문제가 있어서, 점점 더 많은 네트웍에서 인터넷에서 사용할 수 없는 사설 IP(10.0.0.0/255.0.0.0, 172.16.0.0/255.240.0.0 , 192.168.0.0/255.255.0.0)를 사용하고 있다. 사설망에 있는 호스트에서 인터넷에 접속을 하거나 인터넷망에서 사설망의 호스트에 접속하기 위해서 NAT(network address translation)기능이 필요하다.

    NAT는 특정한 IP 주소를 한 그룹에서 다른 그룹으로 매핑하는 기능이다. 주소를 N-to-N 형태로 매핑하는 경우를 정적 NAT라 하고 M-to-N(M>N)를 동적 NAT라고 한다. 네트웍 주소 포트 변환은 기본 NAT의 확장기능으로 여러 가지 네트웍 주소와 TCP/UDP 포트를 단일의 네트웍 주소와 TCP/UDP 포트로 변환한다. N-to-1 매핑이라고 하며 리눅스에서 IP 마스커레이딩도 이러한 방식을 이용한다.

    리눅스에서 NAT를 통한 가상 서버는 네트웍 주소 포트 변환을 통해 수행한다. 리눅스 IP 마스커레이딩 코드를 이용하며, 스티븐 클락(Steven Clarke)의 포트 포워딩 코드를 재사용하고 있다.

    1. 사용자가 서버 클러스터에서 제공하는 서비스에 접근할때, 가상 IP 주소(부하분산서버의 외부 IP 주소)로 향하는 요구 패킷이 부하분산서버로 간다.
    2. 부하분산서버에서 패킷의 목적지 주소와 포트 번호를 검사한다.
    3. 내용이 가상 서버 규칙 테이블에 따른 가상 서버 서비스와 일치하면 스케쥴링 알고리즘에 따라 클러스터에서 실제 서버를 선택한다.
    4. 접속이 이루어진 것을 기록하는 해쉬 테이블에 새로운 접속을 추가한다.
    5. 패킷의 목적지 주소와 포트가 선택한 서버에 맞게 변경되고 패킷을 해당 서버로 전송한다.
    6. 들어오는 패킷이 이러한 접속에 해당하고 해쉬 테이블에서 선택한 서버를 찾을 수 있으면 패킷을 재작성하여 선택한 서버로 전송을 할 것이다. 응답패킷이 돌아오면, 부하분산서버는 패킷의 출발 주소와 포트를 가상 서비스로 변경한다.
    7. 접속이 해제되거나 시간을 초과하면, 해쉬 테이블에서 연결 기록을 제거한다.

    NAT를 이용하면 실제서버가 TCP/IP를 지원만 하면 모두 가능하고, 실제서버를 완벽하게 숨길 수 있어 보안성을 향상 시킬 수 있으나, 확장성에 제한이 있다.일반적인 PC서버 기준으로 했을 때 서버노드가 20개 이상으로 증가할 경우 부하분산서버에서 병목이 생길 수 있다. 왜냐하면 패킷이 들어오고 나갈때마다 부하분산서버에서 패킷을 변경해야하기 때문이다. 다음과 같이 가정해보자. TCP 패킷의 평균 길이가 536Bytes 이다. 패킷 변경에 의한 지연시간은 60us(펜티엄 프로세서 기준이며 이보다 더 뛰어난 프로세서를 쓰면 지연시간이 감소될 것이다)이고 부하분한서버의 최대 처리량이 8.93MBytes/s이다. 실제 서버의 평균 처리량이 400Kbytes/s 일때 부하분산서버는 22개의 실제 서버를 스케쥴링할 수 있다.



(기사등록일 : 2001-07-30 18:56:34)

무지 어려운 말이다. 스케쥴링 알고리즘. 스케쥴이라는 말은 모두 잘 알고 있을 것이다. 시간표도 하나의 스케쥴링 이니까. 실제로 클러스터 관리자의 가장 중요한 역할이다. 아무리 많은 클러스터 노드가 있다고 해도 관리자가 실제로 일을 배분하는데 뇌물을 먹고 한 노드에게만 준다던지, 아니면 아예 주지 않는 다면 그건 무용지물 인 것이다. 이렇게 일을 주는 방법에도 여러 가지가 있다 이번에는 그런 스케쥴링 알고리즘에 대해서 설명하겠다. 실제로 클러스터 관리자는 뇌물을 먹지 않으니 걱정 안해도 된다.

    Round-Robin Scheduling (라운드 로빈 스케쥴링)

    말 그대로 라운드 로빈 방식이며, 서버의 상황이나 네트웍 상황, 모든 상황을 무시한채 단순하게 요청을 전달해주는 형태이다. 실제로 서버의 사양이 모두 동일하고, 같은 네트웍 상이라면 가장 단순하고 효율적일 수도 있다.

    Weighted Round-Robin Scheduling (가중치기반 라운드 로빈 스케쥴링)

    가중치란 것은 어떤 특정한 것에 가중치를 둔다는 말이다. 서버에서도 특정서버의 스펙이 굉장히 뛰어나다던지 아니면 다른 서버보다 기타 환경이 나아 더 많은 요청을 전달하고 싶을 때 해당 서버에 가중치는 주어 더 많은 요청을 처리할 수 있도록 하는 방식이다.

    가중치가 있는 라운드 로빈 스케쥴링을 사용하면 실제 서버에서 네트웍 접속을 셀 필요가 없고 동적 스케쥴링 알고리즘보다 스케쥴링의 과부하가 적으므로 더 많은 실제 서버를 운영할 수  있다. 그러나 요청에 대한 부하가 매우 많을 경우 실제 서버사이에 동적인 부하 불균형 상태가 생길 수 있다.

    Least-Connection Scheduling (최소 접속 스케쥴링)

    최소 접속 스케쥴링은 가장 접속이 적은 서버로 요청을 직접 연결하는 방식을 말한다. 각 서버에서 동적으로 실제 접속한 숫자를 세어야하므로 동적인 스케쥴링 알고리즘중의 하나이다. 비슷한 성능의 서버로 구성된 가상 서버는 아주 큰 요구가 한 서버로만 집중되지 않기 때문에, 접속부하가 매우 큰 경우에도 아주 효과적으로 분산을 한다.

    가장 빠른 서버에서 더 많은 네트웍 접속을 처리할 수 있다. 그러므로 다양한 처리 용랑을 지닌 서버로 구성했을 경우에도 훌륭하게 작동 한다는 것을 한눈에 알 수 있을 것이다. 그렇지만 실제로는 TCP의 TIME_WAIT 상태때문에 아주 좋은 성능을 낼수는 없다. TCP의 TIME_WAIT는 보통 2분이다. 그런데 접속자가 아주 많은 웹 사이트는 2분동안에 몇천개의 접속을 처리해야 할 경우가 있다. 서버 A는 서버 B보다 처리용량이 두배일 경우 서버 A는 수천개의 요청을 처리하고 TCP의 TIME_WAIT 상황에 직면하게 된다. 그렇지만 서버 B는 몇천개의 요청이 처리되기만을 기다리게 된다. 그래서 최소 접속 스케쥴링을 이용할 경우 다양한 처리용량을 지난 서버로 구성되었을 경우 부하분산이 효율적으로 되지 못할 수 있는 것이다.

    Weighted Least-Connection Scheduling (가중치 기반 최소 접속 스케쥴링)

    가중치 기반 최소 접속 스케쥴링은 최소 접속 스케쥴링의 한 부분으로서 각각의 실제 서버에 성능 가중치를 부여할 수 있다. 언제라도 가중치가 높은 서버에서 더 많은 요청을 받을 수 있다. 가상 서버의 관리자는 각각의 실제 서버에 가중치를 부여할 수 있다. 가중치의 비율인 실제 접속자수에 따라 네트웍 접속이 할당된다. 기본 가중치는 1이다.



[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=783


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
(주) 수퍼유저