수퍼컴퓨터의 우수한 성능에도 불구하고 수퍼컴퓨터가 가지고 있는 보유 및 운영에 관한 단점을 해결하고자 하는 연구가 최근 수행되었는데, 그 중 하나가 클러스터(Cluster) 개념이다.
클러스터란 여러 대의 컴퓨터를 네트워크를 통해 연결하여 하나의 단일 컴퓨터처럼 동작하도록 제작한 컴퓨터를 말한다. 클러스터는 병렬 컴퓨터의 일종으로 1994년경 NASA의 Goddard Space Flight Center에서 여러 대의 486 PC를 네트워크로 연결하여 제작한 컴퓨터가 베어울프 클러스터이다.
클러스터는 사용 목적에 따라 구현 방법 및 소프트웨어가 달라지며, 클러스터의 기능과 운영이 달라진다. 따라서 클러스터는 그 사용 목적에 따라 과학 계산용 클러스터와 부하분산 클러스터로 나눌 수 있다. 과학 계산용 클러스터는 일반 범용컴퓨터로 계산하기 어려운 대규모 연산을 계산하는데 사용되고 있다. 예를 들어 기상 예측, 핵폭발 시뮬레이션, 유체역학, 입자의 분자 역학 시뮬레이션 등의 분야에 사용된다. 그러나 최근에는 클러스터 활용 범위가 넓어져서 이전에 수치 연산을 목적으로 사용되었던 클러스터를 3D 애니메이션 및 영화의 특수 효과에도 사용하고 있다.
또한 과학 계산용 클러스터는 두 가지 형태로 구현될 수 있다.
우선 모든 노드의 하드디스크에 독립적으로 운영체제를 모두 설치하여 각 노드가 시스템에 필요한 파일 및 라이브러리를 자체적으로 해결할 수 있도록 구성하는 방법이다.
또 다른 방법은 서버 노드 한 대에만 하드디스크가 존재하여 다른 노드들은 서버 노드의 파일 시스템을 사용하는 diskless 클러스터 방법이 있다. 과학 계산용 클러스터를 사용하기 위해서 MPI(Message Passing Interface)나 PVM(Parallel Virtual Machine)과 같은 라이브러리를 사용하여 코딩한 프로그램을 사용해야 한다.
이러한 라이브러리를 사용하는 이유는 클러스터내의 노드 수만큼 작업을 분할하여 네트워크를 통해 메시지를 전달함으로써 병렬처리가 가능하도록 하기 위해서이다.
두 번째는 웹서버로 사용 가능한 부하분산 클러스터이다. 컴퓨터 네트워크 및 월드 와이드 웹(World Wide Web)의 발전으로 인터넷 사용자 및 웹서버의 숫자는 기하급수적으로 증가하고 있다.
그러나 컴퓨터 네트워크의 발달에도 불구하고 웹서버에 접속하는 사용자 수가 많아짐에 따라 웹서버에 병목현상이 발생하고 있다.
예를 들어 동일 시간대에 한 웹서버에 접속하는 사용자 수가 많게 되면 웹서버는 과부하로 인하여 작동을 멈추거나 속도가 느려진다. 부하분산 클러스터는 단일 서버를 사용할 때 발생할 수 있는 부하를 다른 노드로 분산시켜 웹서버의 과부하를 해결할 수 있는 방법을 제공할 수 있다.
부하분산 클러스터는 구현 방법에 따라 DR(Direct Routing), NAT(Network Address Translation) 등으로 구현할 수 있다. DR 방식은 클라이언트에 들어온 요청을 부하분산 서버가 다른 컴퓨터에 분배하고, 요청을 할당받은 컴퓨터가 직접 응답을 하는 방법이다.
NAT 방식은 DR 방식과 비슷하지만 차이점은 클라이언트의 요청을 처리하는 컴퓨터는 응답을 부하분산 서버를 통해 목적지에 보내는 것이 다르며, NAT 방식과 DR 방식의 혼합된 형태로 구현하기도 한다.
그러나 부하분산 클러스터에서 부하분산 서버가 정지하거나 고장 발생의 경우 부하분산 클러스터가 작동을 멈추는 문제가 발생하게 된다.
이러한 문제점을 해결하는 방안으로 부하분산 서버를 감시하여 정지 및 고장 발생 시 클러스터 내의 다른 컴퓨터가 부하분산 서버 역할을 대신 할 수 있도록 하는 고가용성 클러스터가 함께 사용되기도 한다.
동작 원리 : 클러스터로 구성된 컴퓨터가 수퍼컴퓨터와 대등한 성능을 발휘하기 위해서 여러 대의 컴퓨터가 단일 컴퓨터로 동작하도록 관리해야 하며, 각 노드간에 데이터 교환이 가능하도록 설정 해야한다.
이러한 환경이 갖추어지면 어느 한 노드에서 다른 노드의 프로세스를 실행할 수 있도록 RSH(Remote Shell)이 작동할 수 있도록 해야 한다.
또한 MPI를 사용한 병렬 구조의 프로그램을 작성하여 실행시켜야 한다. 서버에서 병렬 프로그램을 실행하게 되면 MPI 데몬은 네트워크를 통해 각 노드로 작업을 분할하여 보내주며, 각 노드는 할당받은 작업을 처리하고 네트워크를 통해 결과를 서버에 돌려주게 된다.
서버는 노드로부터 받은 결과를 조합하여 하나의 결과로 만들고 그 결과를 출력하게 된다. 예를 들어 4대의 노드로 구성된 클러스터에서 1부터 n까지 더하는 병렬 프로그램을 실행할 경우, 실행중인 MPI 데몬은 프로세스를 노드 수만큼 분할하여 각 노드에 작업을 할당하며, 작업을 할당받은 노드는 작업을 처리하여 결과를 서버에 돌려주고, 서버는 각 결과를 다시 조합하여 1에서 n까지 더한 결과를 출력하게 된다.
클러스터란 여러 대의 컴퓨터를 네트워크를 통해 연결하여 하나의 단일 컴퓨터처럼 동작하도록 제작한 컴퓨터를 말한다. 클러스터는 병렬 컴퓨터의 일종으로 1994년경 NASA의 Goddard Space Flight Center에서 여러 대의 486 PC를 네트워크로 연결하여 제작한 컴퓨터가 베어울프 클러스터이다.
클러스터는 사용 목적에 따라 구현 방법 및 소프트웨어가 달라지며, 클러스터의 기능과 운영이 달라진다. 따라서 클러스터는 그 사용 목적에 따라 과학 계산용 클러스터와 부하분산 클러스터로 나눌 수 있다. 과학 계산용 클러스터는 일반 범용컴퓨터로 계산하기 어려운 대규모 연산을 계산하는데 사용되고 있다. 예를 들어 기상 예측, 핵폭발 시뮬레이션, 유체역학, 입자의 분자 역학 시뮬레이션 등의 분야에 사용된다. 그러나 최근에는 클러스터 활용 범위가 넓어져서 이전에 수치 연산을 목적으로 사용되었던 클러스터를 3D 애니메이션 및 영화의 특수 효과에도 사용하고 있다.
또한 과학 계산용 클러스터는 두 가지 형태로 구현될 수 있다.
우선 모든 노드의 하드디스크에 독립적으로 운영체제를 모두 설치하여 각 노드가 시스템에 필요한 파일 및 라이브러리를 자체적으로 해결할 수 있도록 구성하는 방법이다.
또 다른 방법은 서버 노드 한 대에만 하드디스크가 존재하여 다른 노드들은 서버 노드의 파일 시스템을 사용하는 diskless 클러스터 방법이 있다. 과학 계산용 클러스터를 사용하기 위해서 MPI(Message Passing Interface)나 PVM(Parallel Virtual Machine)과 같은 라이브러리를 사용하여 코딩한 프로그램을 사용해야 한다.
이러한 라이브러리를 사용하는 이유는 클러스터내의 노드 수만큼 작업을 분할하여 네트워크를 통해 메시지를 전달함으로써 병렬처리가 가능하도록 하기 위해서이다.
두 번째는 웹서버로 사용 가능한 부하분산 클러스터이다. 컴퓨터 네트워크 및 월드 와이드 웹(World Wide Web)의 발전으로 인터넷 사용자 및 웹서버의 숫자는 기하급수적으로 증가하고 있다.
그러나 컴퓨터 네트워크의 발달에도 불구하고 웹서버에 접속하는 사용자 수가 많아짐에 따라 웹서버에 병목현상이 발생하고 있다.
예를 들어 동일 시간대에 한 웹서버에 접속하는 사용자 수가 많게 되면 웹서버는 과부하로 인하여 작동을 멈추거나 속도가 느려진다. 부하분산 클러스터는 단일 서버를 사용할 때 발생할 수 있는 부하를 다른 노드로 분산시켜 웹서버의 과부하를 해결할 수 있는 방법을 제공할 수 있다.
부하분산 클러스터는 구현 방법에 따라 DR(Direct Routing), NAT(Network Address Translation) 등으로 구현할 수 있다. DR 방식은 클라이언트에 들어온 요청을 부하분산 서버가 다른 컴퓨터에 분배하고, 요청을 할당받은 컴퓨터가 직접 응답을 하는 방법이다.
NAT 방식은 DR 방식과 비슷하지만 차이점은 클라이언트의 요청을 처리하는 컴퓨터는 응답을 부하분산 서버를 통해 목적지에 보내는 것이 다르며, NAT 방식과 DR 방식의 혼합된 형태로 구현하기도 한다.
그러나 부하분산 클러스터에서 부하분산 서버가 정지하거나 고장 발생의 경우 부하분산 클러스터가 작동을 멈추는 문제가 발생하게 된다.
이러한 문제점을 해결하는 방안으로 부하분산 서버를 감시하여 정지 및 고장 발생 시 클러스터 내의 다른 컴퓨터가 부하분산 서버 역할을 대신 할 수 있도록 하는 고가용성 클러스터가 함께 사용되기도 한다.
동작 원리 : 클러스터로 구성된 컴퓨터가 수퍼컴퓨터와 대등한 성능을 발휘하기 위해서 여러 대의 컴퓨터가 단일 컴퓨터로 동작하도록 관리해야 하며, 각 노드간에 데이터 교환이 가능하도록 설정 해야한다.
이러한 환경이 갖추어지면 어느 한 노드에서 다른 노드의 프로세스를 실행할 수 있도록 RSH(Remote Shell)이 작동할 수 있도록 해야 한다.
또한 MPI를 사용한 병렬 구조의 프로그램을 작성하여 실행시켜야 한다. 서버에서 병렬 프로그램을 실행하게 되면 MPI 데몬은 네트워크를 통해 각 노드로 작업을 분할하여 보내주며, 각 노드는 할당받은 작업을 처리하고 네트워크를 통해 결과를 서버에 돌려주게 된다.
서버는 노드로부터 받은 결과를 조합하여 하나의 결과로 만들고 그 결과를 출력하게 된다. 예를 들어 4대의 노드로 구성된 클러스터에서 1부터 n까지 더하는 병렬 프로그램을 실행할 경우, 실행중인 MPI 데몬은 프로세스를 노드 수만큼 분할하여 각 노드에 작업을 할당하며, 작업을 할당받은 노드는 작업을 처리하여 결과를 서버에 돌려주고, 서버는 각 결과를 다시 조합하여 1에서 n까지 더한 결과를 출력하게 된다.
반응형
'서버(Server) > 인터넷과 개념' 카테고리의 다른 글
[GitLab] 깃 랩 - 무료 비공개 깃 저장소 (0) | 2018.05.26 |
---|---|
windows 10에서 telnet 사용하기 (0) | 2018.05.18 |
샤딩(sharding)과 파티셔닝(partitioning)의 차이 (0) | 2018.05.18 |
온프레미스(on-premise) , 오프프레미스(off-premises) (0) | 2018.05.15 |
소켓이란 무엇인가? (엔드 포인트) (0) | 2018.05.15 |