태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.


이전 글에서 클러스터 시스템의 개요와 하드웨어 선택 방법에 대해서 말씀 드렸습니다. 이번에는 본격적인 클러스터 구성의 시작인 시스템 구성 계획을 짜도록 하겠습니다.


클러스터 시스템의 최소 구성

클러스터 시스템의 구성에 대해서 생각해보겠습니다. 먼저 클러스터를 구성하는 최소한의 구성을 그려봤습니다. 이전까지 구축되어있는 대부분의 소규모 클러스터 시스템이 이런 모습을 가지고 있지 않을까 생각이 드네요.

가장 단순한 클러스터 구성

최소한으로 구성한 클러스터 시스템


구성은 아주 간단합니다. Master 1대와 Node 10 대, Switching Hub 1 개 가 전체 구성품입니다. Master 는 2개의 Lan 카드를 가지고 있습니다. 이전 글에도 적었지만, Harddisk 는 Master 에만 존재합니다. 그리고 모든 Node 는 Master 에 있는 OS 이미지를 읽어와서 자신의 메모리에 올려두고 하드디스크 처럼 사용합니다.

만약 지금 이런 시스템을 만든다면 어떤 문제가 발생할 수 있을까요? 가장 큰 문제는 네트웍 입니다. 지금 클러스터 시스템을 만든다면 아마 Quad Core CPU 를 사용해서 만들게 될 겁니다. 결국 1개의 랜선에 4대의 컴퓨터가 물려있는 것과 동일한 상황이 되는 거죠. 그래서 네트웍에 심한 부하가 걸리게 되고, 결국 CPU는 놀고 있지만, 클러스터는 성능을 발위하지 못하는 상황이 발생하게 됩니다. 제 경험상 네트웍 부하 문제는 클러스터 성능을 가장 크게 좌우 하는 문제입니다.

추천하는 소규모 클러스터 구성도

다음은 최근에 제가 구성해서 사용하던 클러스터의 구성도 입니다. 이 글에서 앞으로 설정할 시스템의 가상 구성도 이기도 합니다.

추천하는 클러스터 구성도

추천하는 클러스터 구성도. 2개의 Network 이 존재한다.


위의 구성도와 차이점은 Network 을 하나 더 추가한 것입니다. 각 Node 는 하드디스크 I/O 는 eth1 로 하게 되고, MPI 나 기타 통신은 eth0 로 하게 됩니다. 하나의 네트웍으로 전송되던 정보를 두 곳으로 분산해서 처리함으로써 클러스터가 더 효율적으로 작동하도록 했습니다.

사실이 정도 구성에서도 네트웍이 Quad Core 10대의 Node 를 완전하게 가동 시킬 수 있는지는 확실치 않습니다. 아마 사용하는 환경에 달려있을 것 같은데요. 클러스터 구성후 자신이 생각했던 것 만큼의 속도가 나오지 않으면  클러스터 구성에 생각지 못한 점이 있나 살펴봐야 합니다.

제가 있는 연구실의 클러스터는 위의 예보다 조금 더 규모가 큽니다. 모든 컴퓨터가 Quad Core CPU Dual (즉 컴퓨터당 8개의 Core 입니다.). Node 는 12대 입니다. 그래서 연구실 클러스터의 구성은 다음과 같이 되어있습니다.

연구실 클러스터 구성도

제가 있는 연구실의 클러스터 시스템 구성도


2번째 그림과 다른 점은 Node Image 를 관장하는 NodeMaster 를 별도로 두고, Storage 를 Master 에서 분리해서 따로 두었다는 것입니다. 여기서 Master 가 하는 역할은 사용자가 접속을 해서 작업하는 용도와 각 Node 에서 작동시키는 프로그램(OS가 아닙니다.)을 설치하는 것입니다. 사실 현재 대수에 비해서 조금 크게 구성한 감이 있지만, 앞으로 추가될 Node 들을 고려해서 이런 구성을 하였습니다. (참고로 위의 추천 구성으로도 별문제 없이 사용하였습니다.)

클러스터를 구성할 때 위의 그림을 백지 한장에 위의 그림을 그리고 IP 까지 적어서 기록해 두는 것이 설정하는데 많이 편합니다. 클러스터 구성작업이 단순 반복 작업이라 헷갈리기 시작하면 대책 없습니다.

이제 하드웨어 선택도 다했고, 구성도 다했습니다. 이제 다음 글부터 본격적인 클러스터 시스템 구성을 해보겠습니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 네오스



클러스터 구축 과연 필요한가?

클러스터 시스템을 만드는 글에서 이런 주제를 다루는 것이 조금 이상한 것 같지만, 꼭 생각해봐야 할 문제입니다. 클러스터가 필요하니까 여기서 이 글을 읽고 있는것 아닙니까! 라고 말씀하실 분들이 계실 지 모르지만, 여러분에게 필요한게 사실은 Queueing 시스템을 설치한 Multi Core 서버 일수도 있습니다.

과거에는 Single Core CPU 여서 여러개의 CPU 를 묶어서 Cluster 를 구성하는 것이 당연한 작업이었습니다. 하지만 지금은 Quad Core CPU 가 대중화되어있습니다. 그래서 Quad Core CPU DUAL 인 서버급 컴퓨터를 250~300만원 정도면 구입할 수 있습니다. 이 시스템과 Quad Core 를 3대~4대 붙인 컴퓨터가 있다면, 어느 것이 빠를까요? 가격대 성능은?

다나와에서 비슷한 가격대의 두 시스템 견적을 뽑아봤습니다.

  • 인텔제온 E5420*2 / Super miccro MB / RAM 2G*4 / ODD / HDD 1TB*2 / Power + CASE = 약 250만원
  • (인텔 콜어2쿼드 Q9400 / G31 MB / Ram 2*2 / ODD / HDD 1TB*2 / Lan 2개 / Power+CASE) * 3대 + 스위치허브 *2개 = 약 230만원

이 두개의 시스템을 비교해 보겠습니다. 클러스터에서 가장 중요하다고 흔히 생각되는 CPU Core 갯수로 따지면, 위는 8개, 아래는 12개 입니다. 그러면 아래 제품이 1.5배더 빠를까요? 절대 그렇지 않습니다. 위에 시스템이 더 빠를 수도 있습니다. 이유가 뭘까요?

그건 어떤 자료를 컴퓨터 내부에서 다루는 것과 네트웍을 통해서 다루는 것의 속도 차이가 아주 크기 때문입니다. 병렬계산을 하는 한 프로그램이 있습니다. MPI 를 이용하고 있구요. 이 프로그램을 위에서 8개의 CPU 를 이용해서 돌린 것과 아래에서 12개를 이용해서 돌린 것을 비교하면, 아래의 시스템이 빠를 것 같지만, Disk I/O 문제만 없다면, 위에 8개를 이용한 것이 훨씬 빠릅 수 있습니다. 네트웍과 컴퓨터 내부의 속도차이는 하늘과 땅차이기 때문입니다. 그리고 계산화학에서 사용하는 많은 계산 프로그램들이 이런 MPI 방식을 이용해서 작동합니다.

그러면 MPI 보다는 하나의 프로그램을 여러번 돌리는 것을 주로하는 생물정보학 쪽에서는 어떨까요? 제 생각에는 아래 시스템이 아주 조금 앞서거나 비슷할 것 같습니다. 그 이유는 Disk I/O 에 있습니다. Disk I/O 의 경우도 NFS 를 통해서 공유하는 것과 Native 로 사용하는 것의 속도가 아주 크게 나타납니다. 생물정보학 쪽의 대부분의 프로그램들이 Disk I/O 가 많습니다. 만약 Disk I/O 가 없이 하나의 CPU로 조금 긴 시간의 계산이 필요한 프로그램을 여러번 돌려야 한다면, 아래 시스템이 당연히 빠릅니다.

두 시스템에는 큰 차이가 더 있는데요. 바로 관리의 문제입니다. 관리가 시스템의 성능과 직접적으로 관련이 없지만, 그게 그렇지 않습니다. 클러스터 설정하고 최적화 하는게 일이니까요(그게 쉬웠다면 이글을 읽고 계시지도 않겠죠?^^).

한가지 더 생각해봐야 할 문제는 앞으로의 상황입니다. 아마 클러스터를 만들게 되면, 당장은 몇개 안되더라도 컴퓨터를 더 추가할 수 있는 상황이 됩니다. 하지만 이때도 밑에서 이야기 하겠지만, Master 컴퓨터가 좋아야 더해지는 Node 의 부하를 해결할 수 있습니다.

결국 MPI 프로그램을 돌려야 하고 예산이 300만원 정도 있다면, Quad Core Dual 인 시스템으로 가는 것이 더 좋다는 결론이 나게 됩니다. 그리고 예산이 더 생긴다면 Node 를 붙이는 방식을 따르는 것이 좋습니다.


클러스터 시스템을 위한 하드웨어의 선택

위의 글을 읽고도 클러스터를 구성하기로 결정을 내리셨다면, 이제 어떤 구성을 할 것인지를 고민해 봐야합니다. 클러스터는 전체 시스템이 용도에 맞도록 적절한 균형을 유지하는 것이 중요합니다.

하드웨어를 선택할때 가장 크게 고려해야할 점은 이 클러스터에서 작동시킬 프로그램이 무엇인가 입니다. 계산화학분야에서 사용되는 Amber 같은 프로그램은 Disk I/O 가 거의 없으므로 좋은 CPU에 비중을 두게 될 것이고, 생물정보학의 경우 Blast 같은 프로그램들을 많이 사용하게 되면 Disk I/O 가 아주 많아서 Master 의 Disk 쪽에 중점을 두어야 합니다.

저는 클러스터 시스템을 구성할때 우선 Master 를 아주 좋은 사양으로 구입하도록 추천합니다. 위에 적은 것처럼 300만원 정도의 예산이라면 Master 만 구입하시는 것을 추천드립니다. Master 는 모든 Node 를 관리하고, 데이터를 주고, 기록을 하는 곳입니다. 따라서 Master 의 성능이 떨어지면, 클러스터가 정상적으로 작동하기 힘듭니다. Master 를 구성할 때, Disk 에 대해서 고민하게 되는데, 앞으로 확장 가능성이 1%라도 있으면, RAID 시스템을 도입하길 바랍니다.

RAID 시스템은 하드디스크 여러개를 하나의 하드처럼 묵어주는 방식을 지칭하는 말입니다. 위키피디아에 잘 설명이 되어 있네요. 하드디스크를 묶어 줌으로써 속도를 향상 시켜주고 안전성을 높여주죠. RAID 카드는 종류가 많은데요. 보통 10만원 이하인 제품들은 전부 Soft RAID 입니다. 이런건 제가 말씀드린 RAID 시스템이 아닙니다. 제가 주로 사용해본 제품은 AMCC 제품인데요(과거 3ware). 이 제품은 4포트(하드디스크 4개 장착가능) 한것이 지금 55만원 정도 하네요(Amazon 같은 곳에서 구입하면 40만원 정도면 구입할 수 있을겁니다.).  저는 8개, 12개 인 RAID 시스템을 사용했었지만, 요즘은 하드가 Tera Byte 단위로 나오니 4 port 만 되도 충분하지 않을까 생각합니다. 만일 예산이 충분치 않다면, Quad Core CPU 를 2개 장착할 수 있는 메인 보드들중에 괜찮은 Hybrid 방식의 RAID 가 기본으로 달려나오는 것들이 있습니다. 이런 제품으로 우선 사용하다가 다음에 AMCC 같은 곳의 제품을 구입해서 장착해서 이용하셔도 괜찮습니다.

Disk I/O 다음으로 중요한 것이 Network 입니다. 다음글인 클러스터 시스템 구성을 보시면 아시겠지만, 네트웍 부하 때문에 클러스터가 느려지는 것을 막기 위해서 시스템 1대 당 2개의 Lan 카드를 가지기를 추천합니다. . 네트웍 장비는 infinite-band 나 미리넷, 10G ethernet 등 좋은 것이 많지만, 저같은 학생에게는 그림의 떡이고, 1G ethernet 정도면 괜찮은 것 같습니다. Lan card 를 구입한다면, intel 같은 곳의 3~4 만원 대 1G Lan 카드를 구입해야 합니다. 1만원 내외 하는 Realtek 등등에서 나온 제품들은 안전성이 떨어져서 클러스터에 좋지 않습니다(PC급 메인보드에 내장되는 Lan 카드도 이 정도 수준이니 그럴 경우 별도로 장착하셔야 합니다.). 또 저가의 Lan 카드는 네트워크 부팅을 지원하지 않아서 클러스터 구성에 사용할 수 없습니다.

클러스터를 구성하는데 성능에 중요한 CPU 나 RAM 용량 등에 대한 이야기는 안하고, 다른 이야기만 했죠? 그건 CPU 나 RAM 은 굳이 언급하지 않아도 그 중요성을 대부분 알고 있기 때문입니다. 하지만, Disk 와 Network 은 대부분 쉽게 생각하시더군요. 클러스터의 성능은 Disk I/O 와 Network 이 좌우 하는 경우가 많습니다. 이 두 부분에서 문제가 생기면 정말 대책없습니다.

한가지 팁이라면, 구입하실때 VGA 같은 것들은 모두 내장된 걸로 사세요. 그게 마음 편합니다. 그리고 하드웨어를 구입할때 최신 제품은 피하는게 좋습니다. 최신 제품은 대부분 드라이버들이 불안정 해서 클러스터가 이유없이 죽는 경우가 있습니다. 이런 경우도 정말 대책없습니다.


이번 글의 내용은 이전의 글에 있지 않은 것입니다. 생각보다 중요한 부분인데, 많이 고민하지 않고, 구축을 하시더군요. 그래서 이번에 적습니다. 혹시 지나가시던 고수님이 보셨을때 위의 내용에서 잘못된 점이 있으면, 알려주세요. 바로 고치겠습니다.

다음에는 클러스터 구성에 대해서 알아보겠습니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 네오스

이 글은 [공부] - 클러스터 시스템 만들기 글을 다시 수정하면서 적은 글입니다. 지난번 글을 쓴 이후 시간이 많이 지났고, 추가해야할 부분들이 보여서 새로 작성합니다.

연구실 클러스터
LG< | LG-LU6000 | 1/10sec | ISO-AUTO | Flash did not fire. | 2009:07:21 20:17:28


자연과학이나 공학 분야에서 공부를하고 연구를 하시는 사람들이 가장 많이 접하는 것이 클러스터 시스템일 겁니다. 어느 연구실에서는 돈을 주고 학교 전산원이나 KISTI 같은 곳의 슈퍼컴퓨터에 계정을 사서 사용하기도 하고, 각자 연구실에서 컴퓨터를 묶어서 클러스터 시스템을 직접 만들어 사용하기도 하죠. 제가 전공하고 있는 생물정보학 분야역시 클러스터 시스템이 없으면 연구가 불가능합니다.

저는 전산원의 슈퍼 컴퓨터보다 연구실의 클러스터 시스템을 사용하는 것을 선호합니다. 항상 그렇듯 관리자가 내 맘같지 않고, 하드디스크 용량에 제한이 있으니까요. 생물정보학 연구하는데 용량이 1~2G 필요한 것도 아니고 연구를 하다보면 쌓이는 자료가 1TB를 넘길때도 있는데 항상 용량 체크하고, 자료 백업한다는게 쉬운일이 아니니까요.

먼저 첫번째 글의 제목은 클러스터 시스템의 소개와 이해 입니다. 의외로 클러스터 시스템을 구성하거나 사용하시는 분 중에서도 기본 개념을 잘 모르고 시작하시는 분들이 있습니다. 이러면 구성하기 정말 어렵습니다. 여기서는 클러스터 시스템이 어떤 것인지 부터 다루겠습니다.

먼저 용어 몇가지를 정의 하고 넘어가겠습니다.(이 용어는 제가 이글에서 사용할 용어지 표준 용어는 아닙니다.) 클러스터 시스템은 크게 3부분으로 나눌 수 있습니다.

  • Cluster Master : 클러스터의 중심이 되는 컴퓨터 입니다. 클러스터가 구동되는 모든 프로그램이 설치되고, Node 컴퓨터들을 작동시키는데 사용되는 Node 의 OS 이미지를 가지고 있습니다. 그리고 사용자는 이 컴퓨터에 접속해서 모든 작업을 합니다. 소규모모의 클러스터 시스템이라면 Master는 보통 1대 입니다.
  • Cluster Node : 클러스터에서 계산을 담당 하는 컴퓨터입니다. 보통 디스크를 가지고 있지 않고, 부팅시에 Master 에서 OS 이미지를 가져와서 램에 로딩한 뒤에 작동하게 됩니다. Node 의 댓수 제한은 없지만, Master 와 Network 에 걸리는 부하를 고려해서 댓수를 한정해야 합니다.
  • Network : Cluster 와 Node 를 연결시켜 주는 시스템입니다. 랜선과 랜카드, 스위칭 허브 등으로 이루어져 있습니다. 클러스터 전체의 성능을 결정하는 아주 중요한 장비 입니다.

흔히 클러스터를 구성한다고 하면 크게 2가지 일을 해야 합니다. Master 와 Node 에 OS를 설치하고 설정하는게 첫번째고, 계산 프로그램을 각 Node 에 분산시켜줄 Queueing 시스템 구성이 두번째 입니다. 사실 Queueing 시스템의 구축은 클러스터 시스템과 분리해서 이야기 해야 하지만, 클러스터중에 Queueing 시스템 없는 경우는 없기 때문에 하나의 시스템이라고 생각해도 될 것 같습니다. 여기서 만들 시스템을 의 경우 다음과 같은 구성을 가집니다.

  • OS : CentOS (RedHat Enterprise Linux Clone) 5.3
  • Node 구성
    • Perceus 를 이용한 Diskless 방식
    • OS : CentOS 5.3
  •  Queueing System : Sun Microsystems N1 Grid Engine
    • Perceus를 이용한 Diskless 시스템 

입니다. OS 와 Node 를 운영할 시스템, Queueing 시스템의 선택은 당연히 구축하는 목적과 편리성에 맞도록 선택해야 합니다. 하지만, 제 생각에는 소규모 클러스터링 시스템에서 대부분 위의 구성이 가장 편리하다고 생각됩니다.

위의 구성중에 Diskless 라는 말이 있습니다. 이것은  Master에만 하드디스크를 두고 Node는 하드디스크 없이 Network File System (NFS) 를 이용해서 Master의 특정 디렉토리를 자신의 하드디스크 처럼 이용하는 방식입니다. 모든 Node 가 하나의 이미지를 사용하므로 시스템의 수정이나 Update 가 편리하다는 장점이 있습니다.

OS는 CentOS로 결정하였습니다. Gentoo, Ubuntu, SuSE, RedHat Enterprise Linux(RHEL), Fedora Core 등 정말 많은 배포본이 있습니다. 하지만 현재 대부분의 계산용 프로그램들이 RHEL을 기준만들어지고, 안전성 면에서도 뛰어나기 때문에 여기서는 RHEL의 Clone 인 CentOS를 선택했습니다.

Queueing System 으로는 Mosix, OpenPBS, Torque, SunGrid Engine 등이 있는데, 관리하기에 가장 편하다고 생각되는 Sun Microsystems Grid Engine 을 사용하겠습니다.

현재 CentOS 5.3, Perceus 1.5.2, SunGridEngine 6.2 update 3  가 가장 최신 버젼입니다. 여기서 문제가 되는것이  Perceus 1.5.2 입니다. 제가 두 곳의 시스템을 구축했을때 한 곳에서는 1.5.0 이 정상적으로 작동하지 않았습니다. 문제가 되었던 시스템이 Dell 이라는 세계에서 가장 많은 컴퓨터를 파는 밴더 제품이었습니다. 그래서 저는 아직 1.4.4 버젼을 이용하고 있습니다.

리눅스 클러스터를 만드는 방법은 정말 많습니다. 이 중에서 제가 주변 사람들에게 배우고 판단하기기에 가장 편리하고 빠르게 구축할 수 있는 방법을 선택했습니다. 실제 구축 이야기는 다음 글에 계속 됩니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 네오스
이곳은 제가 적은 클러스터 만들기의 질문과 답을 하는 곳입니다. 댓글로 질문을 올려주시면, 답을 달아드리겠습니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 네오스
Perceus 활용 2번째 시간입니다. 이번에는 Module 기능을 이용해서 passwd 와 group 설정을 해보겠습니다.

cluster 를 구축하면 가장 귀찮은 일이 사용자와 그룹을 동기화 하는 것입니다. NIS 같은 것들도 쓰고, 저 같은 경우 Perceus 를 처음 사용할 때는 passwd 파일과 group 파일을 노드 이미지에 넣어서 사용했었습니다.

하지만, 이 작업을 Perceus 에 있는 passwdfile, groupfile module 을 이용하면 간단하게 할 수 있습니다. 우선 이 두 모듈은 처음 활성화 할 때, master 의 /etc/passwd, /etc/group 파일을 이용합니다. 그래서 모듈 활성화 하기 전에 시스템의 설정을 해야 합니다.

module 을 activation 시키는 것은 지난번 ipaddr 과 같습니다.
# perceus module activate passwdfile init/all
# perceus module activate groupfile init/all
과 같이 하면 됩니다. Module 을 활성화 시키면 다음 두 파일이 생성됩니다.
/etc/perceus/modules/groupfile/all
/etc/perceus/modules/passwdfile/all
앞서 말씀 드린 것 처럼 이 파일은 /etc/passwd 와 /etc/group 파일을 복사해 놓은 것입니다. 이제 node 들을 다시 시작하면 group 과 passwd 가 적용됩니다. 생성된 디렉토리의 구조를 보신 분들은 눈치채셨겠지만, node 그룹별 vnfs 파일별 로 설정하는 것도 가능합니다. 더 자세한 내용은 perceus 메뉴얼을 보세요.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 네오스
Perceus 를 사용하다 보면, 참 편리하다. 라는 생각을 하게 됩니다. 하지만, 역시 어딜 가나 있는 2% 부족한 부분이 존재하는데요. 이런 부분들을 보충하기 위해서 Perceus 에서는 Module 이라는 기능이 존재합니다. 이런 Module 을 하나씩 활용해 봅시다.

이번에 활용해볼 Module 은 ipaddr 입니다. ipaddr 은 Perceus 작동과정에서 각 Node 에 자동으로 부여되는 IP 를 특정 정적 IP 로 설정하기 위해서 사용됩니다. 또한 기본 장치인 eth0 외에 eth1 과 같은 장치역시 추가할 수 있습니다.

Perceus 에서 ipaddr 모듈을 활성화하기 위해서 다음 명령어를 실행합니다.
# perceus module activate ipaddr
명령어를 실행하면, /etc/perceus/modules/ipaddr 파일이 만들어 집니다. 이 파일에서 각 Node 에 대한 설정을 하게 됩니다. 설정 방식은 단순합니다. 다음과 같은 형식으로 파일에 추가하시면 됩니다.
* eth0:[default]/[default] eth1:[default]/[default]/[default]
n001 eth0:10.0.64.1/255.255.0.0 eth1:192.168.10.1/255.255.255.0
n002 eth0:10.0.64.2/255.255.0.0 eth1:192.168.10.2/255.255.255.0
n003 eth0:10.0.64.3/255.255.0.0 eth1:192.168.10.3/255.255.255.0
형식은
[Node name] [device]:[IP]/[Netmask]/[Gateway] [device]:[IP]/[Netmask]/[Gateway]
입니다. Gateway 는 선택 사항입니다.


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 네오스
  1. 클러스터 이해하기
  2. 시스템 구성과 CentOS 설치하기
  3. Perceus 설치하기
  4. Perceus 설정하기
  5. Perseus Node 설정하기
  6. Sun Grid Engine 설치하기
이번에는 Queueing System 을 설치할 차례입니다. Queueing System 은 사용자가 돌리려는 프로그램을 현재 아무런 일도 하고 있지 않는 Node를 찾아서 자동으로 실행시켜 주는 프로그램을 말합니다. Cluster 에 가장 중요한 프로그램이라고 할 수 있는데요. 다양한 Queueing System 이 존재합니다. OpenPBS, Torque, Sun Grid Engine 중 우리는 Sun Grid Engine 를 설치할 것입니다.

알림 : 앞으로 할 모든 내용은 root 권한에서 이루어 진다는 가정을 하고 있습니다.

SGE 의 구성
SGE 는 전체 시스템을 몇가지 host 로 나눠서 관리하고 있습니다. 기본적으로 알아야 할 몇 가지를 알아보면
  • Administrator Host : 전체 시스템을 구성하는 여러가지 설정들을 할 수 있는 Host. Cluster 를 구성하는 모든 컴퓨터들은 이 admin host 로 지정하게 된다.
  • Submit Host : Queueing 시스템에 Job 을 넣는데 사용되는 컴퓨터. 여기서는 Cluster Master 가 이 역할을 하므로 Cluster Master 를 Submit Host 로 지정한다.
  • Executive Host : Queue 에서 job 을 가져와서 실행하는 컴퓨터. Cluster Node 들이 이 것에 해당한다. Cluster Master 에서도 Job 을 실행하고 싶으면, Cluster master 도 이것으로 등록하면 된다.
SGE 를 실행하는데 사용할 계정 설정
SGE를 root 계정으로 작동시키는 것 보다 별도의 계정으로 동작시키는게 좋습니다. 여기서 SGE가 사용할 계정은 sge 로 정합니다. 그리고 sge 가 사용할 uid 는 20202 로 하겠습니다.
# useradd  -u 20202 sge

파일 받기 및 압축 풀기
SGE 공식 홈페이지 에서 왼쪽 메뉴중 Get GE Binaries 에서 안정 버젼인 GE 6.2 Binaries 을 선택합니다. 6.2 버젼은 이전 버젼과는 달리 common 과 platform-specific binary 가 한 파일에 묶여 있습니다. 여기서는 62  Bit 를 기준으로 하므로 ge62_lx24-amd64.tar.gz 파일을 받습니다.

받은 파일의 압축을 풀면 다음의 2가지 파일이 나옵니다.
  • ge6.2/ge-6.2-bin-lx24-amd64.tar.gz
  • ge6.2/ge-6.2-common.tar.gz
이 파일은 특별한 과정 필요없이 압축만 풀면 사용할 수 있도록 되어있습니다. 받은 파일을 설치경로로 이동한 뒤에 압축을 풀도록 합니다. 여기서는 "/home/sge" 에 설치하도록 합니다.
# mkdir /home/sge
# cp /root/ge6.2/ge-6.2-bin-lx24-amd64.tar.gz /home/sge
# cp /root/ge6.2/ge-6.2-common.tar.gz /home/sge
# cd /home/sge
# tar xfz ge-6.2-bin-lx24-amd64.tar.gz
# tar xfz ge-6.2-common.tar.gz

/etc/service 수정
SGE 이 작동하기 위해서는 어떤 Port 를 이용해서 Daemon 들 사이에 통신을 할 것인가를 알려주어야 합니다. SGE 는 이 내용을 사용자가 /etc/service 파일에서 지정하게 되어있습니다.다음 내용을 /etc/service 파일에 넣어 줍니다.
sge_qmaster     536/tcp
sge_execd       537/tcp

/etc/hosts 수정
CentOS 를 설치하게 되면 hostname 이 127.0.0.1 과 같이 묶여 있습니다. 이 경우 SGE 설치과정에서 에러가 납니다. 그래서 /etc/hosts 파일을 열어서 이를 수정해 줍니다. hostname 을 127.0.0.1 이 아닌 다른 IP (eth0 의 IP 등)와 맞춰주면 됩니다. 저는 다음과 같이 설정했습니다.
127.0.0.1       localhost.localdomain   localhost
10.0.0.1     master  master.neosgen.net

SGE_ROOT 지정
환경설정 변수에 SGE_ROOT 를 지정해야 합니다. RedHat 계열의 시스템(RHEL, CentOS)의 경우 다음 내용을 가진 파일을 /etc/profile.d/sge.sh 에 추가합니다.
SGE_ROOT=/home/sge
export SGE_ROOT
환경 설정을 반영하기 위해서 다음 명령을 수행 합니다.
# source /root/.bashrc

SGE Que Master 설정
설치는 "/home/sge/install_qmaster" 를  실행하면 됩니다.
# cd /home/sge
# ./install_qmaster
첫 화면에서 License  가 나오고 이 내용에 동의하면, 다음부터 설정 창으로 넘어가게 됩니다. 설정과정은 특별한 이유가 없다면 기본 값을 따라 가면 됩니다. 입력 중에 Choosing a Grid Engine admin user name 항목 입력이 있습니다. 여기에는 앞에서 설정한 sge 계정을 지정해 줍니다.
Choosing a Grid Engine admin user name
--------------------------------------

Please enter a valid user name >> sge

Installing Grid Engine as admin user >sge<

Hit <RETURN> to continue >>
그리고 중간에 잘못 입력한 것이 있으면 Ctrl+C 를 눌러서 중단시키고 ./install_qmaster 를 다시 실행시키면 됩니다.

Adding admin and submit hosts 항목에서 사용할 node 들의 정보를 추가해도 되고, 이후에 추가 하셔도 됩니다. 여기서는 나중에 하겠습니다. Queue Master 의 기본 설정이 끝난 것입니다.

설정파일 등록
기본 설정이 끝나면 생성된 설정파일이 사용자가 로그인 할때 항상 실행되게 해야 합니다. 여기서는 profile.d 에 sge 설정을 직접 등록하겠습니다.
# cp /home/sge/default/common/settings.sh /etc/profile.d/sge.sh
Queue Master 설정이 끝났습니다.

perceus vnfs image 에 sge 설정 추가 및 /etc/service 수정
이제 각 Node 를 sge의 queue 에 추가해야 합니다. 우선 해야 할 일은 앞서 설정한 파일의 결과로 나온 sgeexecd 파일을 node가 처음 켜질때 자동으로 실행하도록 하는 것입니다.
# perceus vnfs mount centos-5.2.x86_64
# cp /opt/sge/default/common/sgeexecd /mnt/centos-5.2.x86_64/etc/init.d/sgeexecd.p536
# ln -s ../init.d/sgeexecd.p536 /mnt/centos-5.2.x86_64/etc/rc3.d/S50sgeexecd.p536
# ln -s ../init.d/sgeexecd.p536 /mnt/centos-5.2.x86_64/etc/rc5.d/S50sgeexecd.p536
cp /opt/sge/default/common/settings.sh  /mnt/centos-5.2.x86_64/etc/profile.d/sge.sh
그리고 Master 에서 했던 것과 똑같이 services 파일을 수정해야 합니다. 위의 내용을 참고해서 /mnt/centos-5.2.x86_64/etc/services 파일을 수정하시기 바랍니다.

이제 vnfs 이미지를 unmount 하고 변경값을 적용시키기 위해서 각 node 를 재부팅합니다.

Administrator host 추가
master 와 각 node 를 사용하기 위해서 queue 에 submit host 나 administrator host 로 등록을 해야 합니다. 방법은 다음과 같습니다.
# qconf -ah n0001
n0001 added to administrative host list
위와 같은 방법으로 모든 node 를 등록해 줍니다.

Submit Host 추가
Queue 에 Job 을 넣기 위해서는 사용하는 컴퓨터가 Submit Host 로 등록되어 있어야 합니다. 다음 명령어로 Master 를 submit host 에 추가합니다.
# qconf -as master
위에서 master 부분은 당연히 master 노드의 이름으로 바꾸셔야 합니다.

Queue 에 Node 추가
node 에서 프로그램을 실행하기 위해서 queue 에 executive host 로 각 node 들을 등록해야 합니다. executive host 를 등록하기 위해서는 다음 명령어를 실행합니다.
# cd /home/sge
# ./install_exec
master 설정 때 처럼 기본값으로 진행하시면 큰 문제 없습니다.

이제 설정이 마무리 되었습니다. SGE 의 자세한 사용법은 인터넷을 찾으시면 많이 나옵니다.^^
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 네오스
클러스터에 병렬연산을 하기 위해서 꼭 설치해야 되는게 MPI Library 입니다. MPI 라이브러리에는 다양한 종류가 있는데요. 가장 많이 사용되는게 MPICH, LAM MPI, OpenMPI 정도 인 것 같습니다.

여기서는 이중 OpenMPI 를 설치해 보겠습니다.

설치환경
  • OS : CentOS 5.1 (updated 2008. 4. 12)
  • Arch : x86_64
  • 설치경로 : /opt/openmpi
  • 컴파일러
    • CC : icc
    • CXX : icpc
    • F77 : ifort
    • FC : ifort
파일받기
파일은 OpenMPI 홈페이지에서 받을 수 있습니다. 현재 최신버젼은 1.2.6 입니다.

설치
설치과정은 단순합니다.
# ./configure --prefix=/opt/openmpi --enable-mpi-threads
# make all
# make install
기본적인 thread 기능만을 활성화 한 상태 입니다. progress-thread 의 경우 아직 문제가 있는 것 같습니다. 또한  intel compiler 와 같이 사용할 경우 정상적인 실행이 되지 않았습니다.

환경설정
OpenMPI 를 사용하기 위한 환경 변수 설정을 합니다. 다음 내용을 가진 /etc/profile.d/openmpi.sh 파일을 만들어 줍니다.
OPENMPI_PATH=/opt/openmpi
MPI_HOME=${OPENMPI_PATH}
if ! echo ${PATH} | /bin/grep -q ${OPENMPI_PATH}/bin ; then
        PATH=${OPENMPI_PATH}/bin:${PATH}
fi
Library 경로를 ld 경로에 추가시켜 줍니다.
# echo "/opt/openmpi/lib" > /etc/ld.so.conf.d/openmpi.conf
# ldconfig
다음과 같은 결과가 나타나는지 확인하면 됩니다.
# ldconfig -p | grep mpi
        libopen-rte.so.0 (libc6,x86-64) => /opt/openmpi/lib/libopen-rte.so.0
        libopen-rte.so (libc6,x86-64) => /opt/openmpi/lib/libopen-rte.so
        libopen-pal.so.0 (libc6,x86-64) => /opt/openmpi/lib/libopen-pal.so.0
        libopen-pal.so (libc6,x86-64) => /opt/openmpi/lib/libopen-pal.so
        libmpi_f90.so.0 (libc6,x86-64) => /opt/openmpi/lib/libmpi_f90.so.0
        libmpi_f90.so (libc6,x86-64) => /opt/openmpi/lib/libmpi_f90.so
        libmpi_f77.so.0 (libc6,x86-64) => /opt/openmpi/lib/libmpi_f77.so.0
        libmpi_f77.so (libc6,x86-64) => /opt/openmpi/lib/libmpi_f77.so
        libmpi_cxx.so.0 (libc6,x86-64) => /opt/openmpi/lib/libmpi_cxx.so.0
        libmpi_cxx.so (libc6,x86-64) => /opt/openmpi/lib/libmpi_cxx.so
        libmpi.so.0 (libc6,x86-64) => /opt/openmpi/lib/libmpi.so.0
        libmpi.so (libc6,x86-64) => /opt/openmpi/lib/libmpi.so
        libmca_common_sm.so.0 (libc6,x86-64) => /opt/openmpi/lib/libmca_common_sm.so.0
        libmca_common_sm.so (libc6,x86-64) => /opt/openmpi/lib/libmca_common_sm.so
#



참고 자료
  • http://www.open-mpi.org/
  • http://www-unix.mcs.anl.gov/perfvis/software/viewers/jumpshot-4/node34.html
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 네오스
  1. 클러스터 이해하기
  2. 시스템 구성과 CentOS 설치하기
  3. Perceus 설치하기
  4. Perceus 설정하기
  5. Perseus Node 설정하기
  6. Sun Grid Engine 설치하기
생물정보학 분야에서 연구를 하다보면 가장 많이 필요한 장비가 자료를 저장할 좋은 Database 서버와 자료를 만드는대 사용되는 클러스터 같습니다. 슈퍼컴퓨터가 있으면 제일 좋겠지만, 그게 어디 한두푼 하나요. 국내에 있는 수퍼컴퓨터 센터를 이용하려고 해도 일게 석사한테 빌려주지도 않을 것 같고, 요즘은 개인용 데스크탑 CPU 도 정말 잘 나와서 이것들을 잘 묶으면 멋진 성능을 발위해주니 클러스터를 직접 구성해서 사용하는게 가장 속편하고 좋은것 같습니다.

최근에 회사의 리눅스 클러스터를 다시 구성했습니다. 원래 클러스터를 구성해주시던 분이 영국으로 유학을 가셔서 그냥 사용하고 있다가 문제가 생겨서 다시 구성을 하게 되었는데요. 자료를 찾다보니 딱히 잘 정리되 있는게 없더군요. 거기다 회사 클러스터가 서버는 64비트고 노드는 32비트여서 설치하는데 그나마 있는 자료들도 별로 소용이 없더군요. 그래서 클러스터 구성하는 글을 하나 써봅니다. 이기종간의 클러스터 설정을 성공을 했는데, 무지막지한 삽질이 들어가야 해서, 그냥 동일한 배포본을 이용하라고 권해드리지만, 제가 삽질하면서 얻은 이기종간의 클러스터 구성시의 주의할 점도 명시하겠습니다.

첫번째 글로 클러스터를 구성에 대한 대략적이야기와 OS, Queueing 프로그램에 대한 개념과 앞으로 어떤 것들을 선택해서 설치할 지를 정하겠습니다.

먼저 용어 몇가지를 정의 하고 넘어가겠습니다.(이 용어는 제가 이글에서 사용할 용어지 표준 용어는 아닙니다.)

  •  Job : 사용자가 클러스터에서 돌리기원하는 계산프로그램.
  •  Queue : 클러스터가 계산하을 하기 위한 Job이 쌓이는 저장소.
  •  Queueing System : Queue 를 관리하는 프로그램. Mosix, OpenPBS, SunGridEngine 등 다양한 방법이 있습니다.
  •  Cluster Master : 클러스터의 중심이 되는 컴퓨터 입니다. 사용자는 이 컴퓨터에 접속해서 Queue 에 Job 을 추가합니다.
  •  Cluster Node : 클러스터에서 계산을 하는 컴퓨터 입니다. Master 는 대부분 하나겠지만, Node 는 여러대겠죠?
클러스터를 구성한다고 하면 크게 2가지 일을 해야 합니다. Master 와 Node 에 OS를 설치&설정하는게 첫번재고, 계산 프로그램을 각 Node 에 분산시켜줄 Queueing 시스템 구성이 두번째 입니다. 결론을 부터 이야기 하자면
  • OS : CentOS (RedHat Enterprise Linux Clone)
  • Node 구성
    • Package : Perceus
    • Diskless :
  • Queueing System : Sun Microsystems N1 Grid Engine
  • MPI Library : OpenMPI
입니다.

OS 와 시스템 구성 방법의 선택은 당연히 "편리성" 입니다. 생물정보학의 대부분의 프로그램은 Linux 기반으로 작동이 되고, Cluster 로 가장 안정적으로 돌아가는 운영체제가 Linux 이니 당연히 Linux 를 선택해야 합니다. 전체 Cluster 를 구성하는 방법은 Diskless 방식 입니다. 이것은 Master 에만 하드디스크를 두고 Node 들은 하드디스크 없이 Network File System (NFS) 를 이용해서 Master 의 특정 디렉토리를 자신의 하드디스크 처럼 이용하는 방식입니다. 이 방식은 Node 를 관리할때 Master 에 있는  이미지만 수정하면 된다는 장점이 있습니다.

이제 수 많은 Linux 배포판 중에 어떤 것을 선택할 것인가가 문제입니다. GentooLinux, UbuntuLinux, SuSE Linux, RedHat Enterprise Linux(RHEL) , Fedora Core 등 정말 많은 배포본이 있습니다. 여기서는 RHEL 을 사용하기로 합니다. 하지만 RHEL 을 구입할 필요 없이 RHEL 의 clone 인 CentOS 를 이용합니다. RHEL 을 선택한 이유는 Diskless 시스템을 구성하는데 사용할 패키지인 Warewulf 가 CentOS 를 기준으로 만들어졋기 때문입니다.

Queueing System 으로는 Mosix, OpenPBS, SunGrid Engine 등이 있는데, 이 중에서 Sun Microsystems Grid Engine 을 사용하겠습니다.

2008. 4. 14일 현재 CentOS 는 5.1 이, Perceus 1.2.7이 , SunGridEngine 은 6 update 10 이 최신버져입니다.

리눅스 클러스터를 만드는 방법은 정말 많습니다. 이 중에서 제가 주변 살마들에게 배우고 판단하기기에 가장 편리하고 빠르게 구축할 수 있는 방법을 선택했습니다. 실제 구축 이야기는 다음 글에 계속 됩니다.

다음 이야기 <시스템 구성과 CentOS 설치하기>

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 네오스
  1. 클러스터 이해하기
  2. 시스템 구성과 CentOS 설치하기
  3. Perceus 설치하기
  4. Perceus 설정하기
  5. Perseus Node 설정하기
  6. Sun Grid Engine 설치하기

Perceus 는 Infiscale 에서 만든 Diskless 클러스터 구축용 프로그램 패키지 입니다. 이런 프로그램이 나오기 전에는 복잡하고 어려운 과정을 거쳐야 했지만, 이제는 쉽게 구축할 수 있습니다. Diskless Cluster 를 구축하는데 사용되는 tftp, dhcp 서버를 별도로 설치할 필요도 없고, node 구성부터 등록까지 자동으로 처리해 줍니다.

CentOS 의 설치에 대한 내용은 별도로 언급하지 않겠습니다. 여기서 사용한 시스템은 CentOS 5.1 이며, 2008년 4월 10일자로 "# yum update" 명령을 통해서 갱신된 버젼입니다. CentOS 설치시에 SELinux 와 방화벽 설정을 끄시길 바랍니다. SELinux는 사용하지 않으셔야 하며, 방화벽은 Perceus 설치 끝내고 정상적으로 작동이 되는 것을 확인하고 다시 활성 시키는게 정신건강에 좋습니다.^^


Perceus 를 설치를 위한 Host 설정


Perceus 설치하기 전에 몇 가지 설정을 먼저 합니다. 우리가 구성하는 시스템은 랜카드를 2개 가지고 있습니다. 외부 인터넷과 연결되는 eth0 와 내부 클러스터 노드들과 연결되는 eth1 카드 입니다. 이중  eth1 카드를 설정해야 합니다.

CentOS 에서 eth1 카드에 대한 환경 설정 파일은 /etc/sysconfig/network-scripts/ifcfg-eth1 에 존재합니다. 이 파일을 열어서 다음과 같은 내용으로 바꿔 줍니다. 이때 HWADDR= 로 시작하는 라인이 있으면 그 라인을 다음 내용 뒤에 추가합니다.
DEVICE=eth1
BOOTPROTO=static
BROADCAST=10.0.255.255
IPADDR=10.0.0.1
NETMASK=255.255.0.0
NETWORK=10.0.0.0
ONBOOT=yes
TYPE=Ethernet
그리고 네트워크를 재시작 합니다.
# /etc/init.d/network restart

Perceus 설치를 위한 관련 라이브러리 설치

Perceus 가 동작하기 위한 관련 라이브러리들이 먼저 설치되어 있어야 합니다(너무 당연하가요?^^;). 먼저 yum 에서 제공되는 것들을 설치 합니다.
# yum -y groupinstall "Development Tools"
# yum -y install nasm
# yum -y install perl-DBI
이제 source rpm 파일을 building 하기 전에 다음 명령을 실행합니다.
echo "%debug_package %{nil}" > /root/.rpmmacros
이제 추가 패키지로
  • bash-completion
  • perl-IO-Interface
  • perl-Net-ARP
  • perl-Unix-Syslog
를 설치해야 합니다. 이 패키지는 Perceus 에서 제공되는 버젼을 설치 해야 합니다.

# wget http://www.perceus.org/downloads/perceus/v1.x/dependencies/bash-completion-20060301-1.caos.src.rpm
# wget http://www.perceus.org/downloads/perceus/v1.x/dependencies/perl-IO-Interface-0.98-1.caos.src.rpm
# wget http://www.perceus.org/downloads/perceus/v1.x/dependencies/perl-Net-ARP-1.0-2.caos.src.rpm
# wget http://www.perceus.org/downloads/perceus/v1.x/dependencies/perl-Unix-Syslog-0.99-1.caos.src.rpm
# rpmbuild --rebuild bash-completion*.src.rpm
# rpmbuild --rebuild perl-IO-Interface*.src.rpm
# rpmbuild --rebuild perl-Net-ARP*.src.rpm
# rpmbuild --rebuild perl-Unix-Syslog*.src.rpm
# cd /usr/src/redhat/RPMS/noarch/
# rpm -Uvh bash-completion*.src.rpm
# rpm -Uvh perl-IO-Interface*.src.rpm
# rpm -Uvh perl-Net-ARP*.src.rpm
# rpm -Uvh perl-Unix-Syslog*.src.rpm

Perceus 설치

Perceus 1.3.7 파일을 받습니다.

# cd /root/
# mkdir perceus/
# cd perceus/
# wget http://www.perceus.org/portal/files/perceus-1.3.7.tar.gz
# export TAR_OPTIONS=--wildcards
# rpmbuild -ta perceus-1.3.7.tar.gz

이 러면 이런 저런 메세지를 내뿜으면서 perceus  의 rpm 패키지가 만들어 집니다. 만들어진 패키지는 /usr/src/redhat/RPMS 의 어딘가(^^)에 존재합니다. 만들어진 rpm 파일은 총 2개 입니다. perceus-1.3.7.rpm 파일 입니다.
# rpm -Uvh /usr/src/redhat/RPMS/*/perceus-1.3.7.rpm

설치가 끝나게 됩니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 네오스