검수요청.png검수요청.png

컴퓨터 클러스터

위키원
Asadal (토론 | 기여)님의 2019년 8월 11일 (일) 02:37 판 (같이 보기)
이동: 둘러보기, 검색

클러스터(cluster)는 같은 속성을 가진 대상을 여러 개 모아서 하나의 대상으로 한 것이라는 의미이다. 컴퓨터 클러스터(computer cluster)라고 한다. 클러스터는 컴퓨터 운영체제(OS), 컴퓨터의 하드웨어, 통계 데이터 등 여러 분야에서 사용된다.

개요

컴퓨터 클러스터는 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합을 의미한다. 클러스터의 구성 요소들은 일반적으로 고속의 근거리 통신망으로 연결된다. 서버로 사용되는 노드에는 각각의 운영 체제가 실행되는데, 컴퓨터 클러스터는 저렴한 마이크로프로세서와 고속의 네트워크, 그리고 고성능 분산 컴퓨팅용 소프트웨어들의 조합으로 태어났다. 클러스터는 일반적으로 단일 컴퓨터보다 더 뛰어난 성능과 안정성으로 비슷한 성능과 안정성을 제공하는 단일 컴퓨터보다 훨씬 더 효율적이다. [1]

등장 배경

시장에서 구할 수 있는 저렴한 상용 제품 여러대를 조합하여 더 빠르고 안정적인 시스템을 만들고자 했던 생각이 시발점이 되어 다양한 아키텍처와 구성방법이 발전해왔다. 컴퓨터 클러스터링 접근법은 일반적으로 시장에서 쉽게 가용한 제품들을 고속의 근거리 통신망으로 연결한다. 그리고 컴퓨팅 노드들을 클러스터 미들웨어 라는 소프트웨어 계층에서 관리한다. 이 소프트웨어 계층은 노드들의 상부층에 위치하여 사용자들이 단일 시스템 이미지 개념으로 하나의 커다란 컴퓨팅 단위로 처리할 수 있도록 한다. 중앙 집중적인 관리 접근법은 노드들을 잘 조화된 공유 서버들로 만들어 준다. 이 방법은 많은 노드들을 사용하는 점대점이나 그리도 컴퓨팅과는 다르게 분산 컴퓨팅의 특성으로 차이점이 있다. 컴퓨터 클러스터는 간단히 두 개의 개인용 컴퓨터를 연결하는 두 노드 시스템일 수도 있고, 수천대를 연결한 매우 빠른 슈퍼컴퓨터 일수 있다. 기본적인 클러스터 구성 방법은 전통적인 슈퍼컴퓨터를 비용 면에서 효율적인 제품으로 대체하기 위해 몇 개의 개인용 컴퓨터들을 이용한 beowulf방식이다. 초창기 133개의 노드들로 구성된 Stone Soupercomputer 프로젝트는 컴퓨터 클러스터 개념이 실현가능 하다는 것을 증명했다. 비교적 낮은 비용으로 고성능을 이루기 위하여 리눅스와 병렬 가상 머신 툴킷과 메시지 전달 인터페이스 라이브러리를 사용했다. 비록 클러스터들은 작은 수의 개인용 컴퓨터들을 단순한 네트워크로 연결하였지만 높은 수준의 성능을 이룰 수 있었다. 현재는 해 마다 발표하는 TOP500에 등재된 슈퍼컴퓨터들 사이 상당수의 시스템은 컴퓨터 클러스터들이다. [2]

특징

장점

컴퓨터 클러스터는 웹 서비스와 같은 일반적인 비즈니스 목적에 대한 요구부터 많은 계산이 요구되는 과학 계산에 이르기까지 다양한 용도로 구성될 수 있었다. 이에 높은 가용성을 제공한다. "작업 부하 분산" 클러스터는 시스템의 전반적인 성능을 향상시키기 위하여 계산 부하량을 여러 노드에서 분담하여 병렬 처리하도록 구성 하는 방식이다. 웹서버 클러스터의 예를 들면, 각기 다른 부류의 요구들을 각기 다른 노드에서 처리하도록 할당시켜줌으로써 전반적인 응답시간을 최소화 할 수 있다. 하지만 어플리케이션에 따라 작업 부하를 분산하는 방법은 크게 다를 수가 있다. 단순히 라운드 로빈 방법을 사용하는 웹 서버와 과학 계산을 하는데 사용하는 클러스터의 시스템과는 다른 방식이다. 또한 "높은 가용성" 클러스터는 시스템의 가용성을 높이기 위한 방법중 하나이다. 하나의 노드에 장애가 생겼을 때 연결된 다른 노드의 컴퓨터가 서비스를 이어받아 계속 서비스 되도록 한다. 그리고 자체 제작이 가능하다. 많은 수치 모델들은 좀 더 고품질의 결과를 얻기 위하거나 빠른 결과를 얻기 위하여 대규모 계산을 수행해야 하거나 대규모 데이터를 처리해야 한다. 이를 위하여 주로 워크스테이션이 활용되고 있으나 단일 워크스테이션으로는 충분한 성능을 제공받지 못하거나 잠재적으로 성능 부족을 느낀다. 병렬 컴퓨터는 이의 해결 방안으로 좋은 선택이 될 수 있다.

단점

클러스터의 문제점에는 관리의 어려움과 프로그램의 어려움을 들 수 있다. 이러한 문제점은 다수의 컴퓨터로 구성되어 있다는 것에 한한다. 즉 다수의 컴퓨터를 관리하고 일반적인 문제들을 해결하는데 상대적으로 많은 노력이 필요하다는 것이다. 다행히 관리의 어려움을 해결하기 위한 많은 툴들이 공개되어 있으며 이러한 툴들을 이용하여 상당 부분 관리에 필요한 노력을 줄일 수 있다. 그리고 기존 워크스테이션에서 수행되는 프로그램들은 단일 컴퓨터에서 수행할 수 있도록 프로그램되어 있다. 이를 시리얼 프로그램이라고 한다. 그러나 클러스터를 비롯한 병렬 컴퓨터에서는 병렬 프로그램을 사용해야만 한다. 인터넷을 통한 병렬화된 프로그램을 구할 수는 있지만 공개된 병렬 프로그램이 없다면 직접 프로그램을 병렬화 해야한다. 이것은 경우에 따라 많은 노력을 필요로 한다. [2]

종류

클러스터의 분류를 정의하는 방법은 매우 다양하다. 일반적으로는 클러스터의 활용 목적에 따라 분류한다. 이에따르면

  • 고계산용 클러스터(HPC)
  • 부하분산 클러스터(LVS)
  • 고가용성 클러스터(HA)

고계산용 클러스터(HPC)

HPC 클러스터는 고성능의 계산 능력을 제공하기 위한 목적으로 제작된다. 주로 과학 계산용으로 활용도가 높으며 HPC 클러스터를 구성하는 모든 컴퓨터들은 네트워크에 연결되어 있어서 상호간 통신이 가능하므로 다수의 프로세서가 협동적으로 문제를 푸는 환경을 제공하게 되는데 이 기반을 활용하여 문제를 병렬로 푸는 것은 전적으로 프로그램 수준에서 이루어 진다. 따라서 클러스터 구축만 아니라 프로그램 병렬화가 같이 이루어져야 한다.

부하분산 클러스터(LVS)

대규모의 서비스를 제공하기 위한 목적으로 제작되며 주로 웹서비스등에 활용가치가 높다. 이러한 방식은 인터넷 이용자로 하여금 하나의 컴퓨터 즉 로드밸런서로부터 서비스를 제공받는 것으로 여겨지게 한다. 그러나 실제 서비스 제공은 로드밸런서에 연결되어 있는 서비스 노드들에 의하여 이루어진다. LVS 클러스터 또한 만약 정적인 데이터만을 서비스하는 웹클러스터라면 각 서버들은 Load Balancer 와의 통신도 가능해도 된다. 또는 그 중간적인 형태 또한 가능하다. 즉 클러스터의 위상에 있어서는 다양한 형태로의 변형이 가능하다. LVS 클러스터의 웹요청 처리과정은 1. 로드밸런서에게 인터넷으로부터 웹요청이 들어온다. 2. 로드밸런서는 정해진 알고리즘에 따라 서비스를 수행할 server를 선택하고 웹요청을 forwarding 한다. 3. forwarding된 웹요청은 선택된 server에게 전달된다. 4.웹요청을 받은 서버는 이에 대한 응답을 로드밸런서에게 전달한다. 5.로드밸런서는 받은 데이터를 웹요청을 한 컴퓨터에게로 재 전송한다. 부하분산용 클러스터중에서도 이러한 방식을 NAT 라고 한다. 장점은 server가 어떤 OS 이던 상관이 없다는 것이다. 그리고 IP Tunneling 방식은 웹요청이 들어오면 요청패킷을 캡슐화 하여 클러스터내의 노드들에게 전송해준다. 이것은 응답이 로드밸런서를 거쳐 나가지 않아 하나의 로드밸런서가 매우 많은 server를 거느릴수가 있다. 그러나 클러스터 내의 server들이 캡슐화된 패킷을 해석해야만 가능하므로 현재는 리눅스에서만 가능하다. 마지막으로 DR 방식은 클러스터의 확장성을 높이기 위하여 IP NAT 방식과 IP Tunneling 방식의 장점만을 가져온 방식이다. 즉 서비스 요청이 들어오면 패킷을 최소한으로 빨리 가공하여 리얼서버에게 보내면 리얼서버는 다른 루트를 통하여 응답을 보낸다. 라우터가 요청패킷에 MAC 어드레스를 추가하여 유일한 리얼서버를 결정할 수 있게 해준다. 이것을 위해 모든 노드들이 단일 세그먼트에 존재하여야 한다.

고가용성 클러스터(HA)

지속적인 서비스 제공을 목적으로 제작되었으며 주로 미션 크리티컬한 업무에 이용된다. 만약 로드밸런서가 고장났을때 클러스터는 전체가 무용지물이 될 것이다. 또한 서버들 중 server2가 고장난다면 일부 사용자는 원하는 데이터를 제공받지 못할 것이다. 이러한 문제점을 극복하기 위하여 구성된 것이 고가용성 클러스터이다. 로그밸런서의 고장에 대처하기 위해 현재 사용되고 있는 방법은 heart beat와 fake를 이용하는 방법이다. heart beat 는 로드밸런서와 하나의 백업서버간 주기적으로 통신을 하여 이상유무를 체크한다. 로드밸런서의 고장이 발견되면 fake 라는 프로그램은 로드밸런서가 점유하고있는 IP 를 백업서버로 이주시켜 계속 서비스를 수행시켜준다. 또한 server2의 고장은 로드밸런서에 의하여 주기적으로 잠시되고 고장 발생시 웹요청을 server2로 포워딩 하지 않음으로써 서비스를 지속적으로 수행하게 된다.

그외의 분류

1. 노드의 소유권에 따라

  • Dedicated Clusters
  • Nondedicated Clusters

2. 노드의 하드웨어에 따라

  • Clusters of PCs or Piles of PCs
  • Cluster of Workstations
  • Clusters of SMPs

3. 노드의 운영시스템에 따라

  • Linux Cluster
  • Solaris Clusters
  • NT Clusters
  • AIX Cluster
  • Digital VMS Clusters
  • HP-UX Clusters
  • Microsoft Wolfpack Clusters

4. 노드의 구성에 따라

  • Homogeneous Clusters
  • Heterogeneous Clusters

[2]

활용

통신 기술

클러스터에 관한 연구에 대표적인 UC Berke-ley NOW 프로젝트에서 원격 시스템의 메모리에서 데이터를 가져오는 것이 네트워크를 사용하지 않고 디스크에서 데이터를 가져오는 것보다 더 빠르다는 것을 보여주므로 최근의 고성능 네트워크의 역할이 커졌음을 보여준다. 이러한 ATM과 Myrinet과 같은 고속의 네트워크의 발달로 클러스터 컴퓨터에서도 슈퍼 컴퓨터에 견줄만한 성능을 얻게 되었다. 하지만 이 패킷 프로세싱의 오버헤드로 성능 저하를 가져오게 되어 이러한 네트워크 오버헤드를 극복하기 위해 고속 통신 기술에 대한 연구가 진행되고 있다.

파일 시스템 기술

클러스터 파일 시스템은 이를 구성하는 여러개의 프로세싱 노드들이 고속의 네트워크에 연결되어 있다는 점에서 분산 파일 시스템과 유사하며, 동시에 여러 클라이언트에서 요구를 처리한다는 점에서 병렬 파일 시스템과 유사한 부분이 존재한다. 하지만 병렬 파일 시스템은 파일 공유를 위한 설계가 되어있고 이때문에 클러스터 파일 시스템의 대부분은 파일을 여러 서버에 분산시키는 스트라이핑 기법을 이용해 병렬적인 입출력 효과를 얻음으로 처리량을 개선하고자 한다. UC 버클리의 NOW 프로젝트에서 수행한 분산 파일 시스템인 xFS에서는 모든 자료의 저장과 캐시의 관리를 하나의 중앙집중화된 파일 서버가 담당하는 서버 시스템의 한계를 극복하고자 했다. 데이터 분산은 LFS를 사용한 소프트웨어 RAID를 구현하여 서버와 클라이언트의 구별을 없애고 어느 노드에서도 데이터를 저잘하고 캐싱하여 관리 할 수 있게 했다. 파일의 메타 데이터를 분산 저장함으로써 서버에서의 병목 현상을 방지한다. 일종의 분산 파일 시스템인 Swift는 기존의 RAID 시스템을 소프트웨어적으로 구현한 것으로 여러 파일 서버들에 파일들을 스트라이칭 시키므로 입출력 성능 향상과 패리티 정보 추가로 신뢰성이 높은 파일을 제공하게 된다. 클러스터 시스템을 위한 파일 시스템은 효율적인 데이터 관리를 위해 대규모 데이터를 여러 노드에 분산하여 저장하고 일관성 있게 접근이 가능한 메커니즘을 제공하여야 한다.[3]

각주

  1. 컴퓨터_클러스터〉, 《위키백과》
  2. 2.0 2.1 2.2 〈[ttps://blog.pages.kr/108 리눅스를 이용한 클러스터링 구축법]〉, 《날으는물고기》
  3. 프로그래밍환경연구팀 선임연구원, 〈클러스터 컴퓨팅 기술동향〉, 《ettrends》

참고자료


  검수요청.png검수요청.png 이 컴퓨터 클러스터 문서는 하드웨어에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.