다음 이전 차례

5. 주노드의 설치

여러분이 직접묻는 질문으로는 무엇이 주노드 서버인가 하는 것이다. 대부분의 Beowulf 시스템들은 단지 하나의 서버와 클러스터 외부로 접속하는 게이트웨이 하나를 갖지만 몇몇의 경우는 성능과 신뢰도의 차원에서 다중 서버를 갖고 있다. 큰 disk-less 클라이언트 클러스터의 경우, 클라이언트 노드들에게 시스템 파일을 제공하기 위해 다중 NFS서버를 사용하고자 할 것이다. 더욱더 분산된 환경에서는 모든 노드가 클라이언트와 서버로 작동하는 것이 가능하다. 만일 여러분이 단지 하나의 서버를 사용하고자 한다면, 여러분은 '주(master)'라는 말을 생략할 수 있고 주서버를 그냥 서버라고 생각할 수 있다.

주서버는 여러분의 Beowulf 시스템에서 가장 중요한 노드일 것이다. 클라이언트 노드들에게 NFS 파일시스템을 제공하고 소스코드를 컴파일하며 병렬처리를 시작하고 외부로부터의 연결을 가능하게 한다. 다음의 내용들은 주서버를 설치하고 설정하는 단계를 설명하고 있다.

5.1 분할크기

설정과정중 가장중요한 부분은 분할크기를 선택하는 것이다. 여러분의 클러스터가 작동을 시작하기 시작할 때에는 분할설정을 하기가 매우 힘들기 때문에 여러분이 얼마만큼의 분할이 필요한지 선택하는 것이 중요하다. 본 저자는 이 문서를 갱신할 때마다 아래 열거한 분할영역을 변경하였다. 여러분이 직접 시험해보았음에 틀림없겠지만, 다음의 크기는 4GB의 HDD와 레드햇 5.2, 16 노드, disk-less 클라이언트 클러스터에는 문제가 없다. 다음의 목록은 여러분의 파일을 저장할 수 있는 /home 는 제외한다.

5.2 레드햇 리눅스 설치

여기서는 레드햇 리눅스 5.2 설치를 http://www.redhat.com/support/docs/rhl/과 같이 상세하게 기술하지는 않을 것이다. 모든 레드햇 5.2 꾸러미를 다 설치할 것을 권한다. 만일 디스크 공간이 충분치 않다면, 개개의 꾸러미를 선택하는데 많은 시간을 할애하지 말고 사용하지 않을 것같은 꾸러미는 설치하지 않고 넘어간다. 마치 Linux HOWTO 문서 번역처럼 말이다.

5.3 네트워크 설정

우선 이더넷 카드 설정이 필요하다. 여러분의 이더넷카드중의 하나가 진짜 IP 주소를 여러분에게 할당해주어야 하며, 다른 하나는 클러스터 내부의 노드들에게만 보이는 사설 IP (예를 들면 10.0.0.1)를 갖고 있어야 한다. 여러분은 레드햇 배포본에 들어있는 GUI를 이용한 네트워크 설정 방법을 이용할 수도 있고 /etc/system/network-scripts/ifcfg-eth* 파일들을 만들고 편집하여 설정할 수도 있다. (역자주: 레드햇 배포본의 경우 /etc/sysconfig/network-scripts/에서 위의 파일들을 발견할 수 있다.) 단순한 Beowulf 시스템의 경우는 10/8 사설 IP 주소 범위를 사용하는데, 10.0.0.1은 서버에게 할당되고 나머지 10.0.0.2부터 10.0.0.254까지는 클라이언트 노드에 할당된다. 이러한 IP 주소를 사용하기로 결정한 후, netmask는 255.255.255.0로 10.0.0.255는 broadcast 주소로 사용한다. 저자가 사용하는 Topcat 시스템에서는 eth0를 외부와 연결된 인터페이스로 사용하고 eth1를 클러스터 내부의 네트워크와 연결하는 인터페이스로 사용했다. 라우팅 테이블은 다음과 같다.


[jacek@topcat jacek]$ /sbin/route
Kernel IP routing table
Desitination    Gateway         Genmask         Flags   Metric  Ref     Use     Iface
10.0.0.0        *               255.255.255.0   U       0       0       9       eth1
139.x.x.0       *               255.255.248.0   U       0       0       7       eth0
127.0.0.0       *               255.0.0.0       U       0       0       2       lo
default         139.x.x.1       0.0.0.0         UG      0       0       18      eth0

5.4 DNS 설정

본 저자의 Beowulf 시스템인 Topcat에서는 DNS를 작동시키지 않는다. 단순화된 Beowulf 클러스터 관리를 위해 DNS를 도메인을 갖는 것이 좋다고 생각했지만, DNS없이 Topcat을 설정하고 나서 작동이 더 잘되는 것 같았다. 설정은 전적으로 여러분에게 달려있다. 저자는 DNS에 대한 이부분을 참고적으로만 남겨놓을 것이고 더이상 관리는 하지 않을 것이다. 저자는 저자의 DNS 설정 파일들이 named의 최신 버전을 가지고 작동하지 않는다.

DNS 설정은 매우 직접적이다. 여러분의 서버(node1)이 DNS 서버가 될것이다. 서버가 이름들을 결정할 것이고 전체 Beowulf 클러스터를 위한 IP주소를 결정할 것이다. DNS 설정 파일들은 ftp://ftp.sci.usq.edu.au/pub/jacek/beowulf-utils에서 얻을 수 있다. 설정파일들은 Topcat시스템에서 사용했던 목록이고 여러분이 여러분의 시스템에 동일 이름을 사용하고 싶다면 그것들을 포함시킬 수 있다. 여러분이 봐서 알다시피 저자의 경우 사설IP 주소의 범위를 10.0.0.0/8로 잡고 있고 서브넷마스크를 255.255.255.0으로 설정해 놓았다. 누군가가 node1을 네임서버로 사용하지 않는다면 저자의 도메인은 외부에서 볼 수 없으며 이것이 우리가 원하던 바이다. 본 저자의 경우 도메인 이름을 beowulf.usq.edu.au로 결정하였고 여러분이 DNS 설정을 위해 변경해야할 설정파일들은 거의 없을 것이다. 앞서 언급한 ftp://ftp.sci.usq.edu.au/pub/jacek/beowulf-utils에서 얻을 수 있다. 설정파일들을 설치하고 /etc/rc.d/init.d/named restart를 실행함으로써 named를 재시작 할 수 있다.

여러분 DNS 서버:


[root@node1 /root]# nslookup node2
Server: node1.beowulf.usq.edu.au
Address:        10.0.0.1
<p>
Name:   node2.beowulf.usq.edu.au
Address:        10.0.0.2 
<p>
[root@node1 /root]# nslookup 10.0.0.5
Server: node1.beowulf.usq.edu.au 
Address:        10.0.0.1
<p>
Name:   node5.beowulf.usq.edu.au 
Address:        10.0.0.5 

5.5 /etc/hosts

만일 여러분이 DNS 서버를 사용하고 싶지 않다면 여러분은 모든 노드와 각 노드의 IP 주소를 /etc/hosts에 입력하여야 한다. 만일 disk-less 클라이언트 설정의 경우, sdct 스크립트와 adcn 스크립트를 이용 이 파일에 하드링크를 만들 수 있고 이를 모든 노드가 사용할 수 있다. 더욱이 adcn스크립트는 root 파일 시스템을 만들어 놓으려는 클라이언트를 위해 /etc/hosts에 입력시켜준다. 다음의 예는 Topcat에 나타난 /etc/hosts파일의 예이다.


127.0.0.1               localhost       localhost.localdomain
139.x.x.x               topcat.x.x.x    topcat
10.0.0.1                node1.beowulf.usq.edu.au        node1
10.0.0.2                node2.beowulf.usq.edu.au        node2
10.0.0.3                node3.beowulf.usq.edu.au        node3
10.0.0.4                node4.beowulf.usq.edu.au        node4
10.0.0.5                node5.beowulf.usq.edu.au        node5
10.0.0.6                node6.beowulf.usq.edu.au        node6
10.0.0.7                node7.beowulf.usq.edu.au        node7
10.0.0.8                node8.beowulf.usq.edu.au        node8
10.0.0.9                node9.beowulf.usq.edu.au        node9
10.0.0.10               node10.beowulf.usq.edu.au       node10
10.0.0.11               node11.beowulf.usq.edu.au       node11
10.0.0.12               node12.beowulf.usq.edu.au       node12
10.0.0.13               node13.beowulf.usq.edu.au       node13

5.6 /etc/resolv.conf 만일 여러분이 서버를 DNS 서버로 사용하고 있다면 resolve.conf파일은 지역 네임서버를 밝혀주어야한다. 이는 Topcat에 있는 /etc/resolv.conf에 있는 내용이다.


search beowulf.usq.edu.au eng.usq.edu.au sci.usq.edu.au usq.edu.au
nameserver      127.0.0.1
nameserver      139.x.x.2
nameserver      139.x.x.3

만일 DNS 서버를 갖고 있지 않다면 여러분은 다른 네임서버를 지정해주어야한다. 이는 저자의 현재 /etc/resolv.conf파일이다.


search eng.usq.edu.au sci.usq.edu.au usq.edu.au
nameserver      139.x.x.2
nameserver      139.x.x.3

5.7 /etc/hosts.equiv rsh을 클러스터의 어떠한 노드, 어떠한 사용자에게도 허용해주기 위해 여러분은 보안문제를 감수해야합니다. 그리고 모든 호스트의 리스트를 /etc/hosts.equiv에 입력하여야 합니다. 보안문제는 11절을 참고하시기 바랍니다.

5.8 Sample .cshrc


#Assume LAM-MPI, PVM and MPICH are installed
setenv  LAMHOME /usr/local/lam61
setenv  PVM_ROOT /usr/local/pvm3
setenv  PVM_ARCH LINUX
setenv  MPIR_HOME /usr/local/mpich

set path = (. $path)
# use egcs compilers first
set path = (/usr/local/bin $path)
set path = ($path /usr/local/pvm3/lib/LINUX)
set path = ($path /usr/local/lam61/bin)
set path = ($path /usr/local/mpich/lib/LINUX/ch_p4)

5.9 시간동기화

2.0.x의 SMP와 시간변환에 몇가지 문제점들이 있다. 이는 몇몇 인터럽트 문제 때문에 발생한다. 가장 좋은 해결방법은 xntp를 사용해서 외부와의 시간을 일치시키도록한다. 어떠한 경우라도, 여러분의 클러스터의 시간을 동기화하라. xntp 설정방법은 다음과 같다.

  1. 모든 시스템의 시간을 현재시각으로 설정하라.
  2. clock -w명령을 이용하여 CMOS RTC (Real Time Clock)을 현재시각으로 변경하라.
  3. 각 시스템에서 cdrom을 마운트하라. (mount /mnt/cdrom, 만일 실행되지 않으면 5절을 참조하라.)
  4. /mnt/cdrom/RedHat/RPMS로 이동하라
  5. root게정에서 rpm -i xntp3-5.93-2.i386.rpm을 실행하라.
  6. /etc/ntp.conf

    모든 시스템에서 다음 부분에 주석을 달아라.

    #multicastclient                # listen on default 224.0.1.1
    #broadcastdelay 0.008
    

    호스트를 제외한 나머지 시스템에는 다음과 같이 파일을 편집한다.

    server  HOSTNODE # local clock
    #fudge  127.127.1.0 stratum 0
    

    여기서 HOSTNODE라 함은 호스트노드의 이름이다.

    각 노드에서 /etc/ntp.conf를 닫고 나온다.

  7. "/sbin/xntp"명령을 통해서 xntpd를 실행한다.(역자주: 보통의 경우 /usr/sbin에 xntpd가 있다.

여러분이 이 명령을 /etc/rc.d/rc.local에 저장함으로써 시스템을 시작할 때마다, 실행시킬 수 있다.

시간동기화는 시간이 좀 걸리는 일이지만, /var/log/messages에서 xntpd로부터 나온 메세지들을 볼 수있다.

여러분이 방금한 작업은 호스트 노드에게 xntp를 실행시키고 지역 시간 시스템을 표준으로 삼는 것이다. 클러스터의 다른 노드들은 호스트로 부터 시간을 조정할 수 있다.

xntp가 시스템의 시간을 유지시키고 RTC를 동기화 시킨다. 하루에 한번씩 시간을 동기화 시키는 것이 중요하다. 이러한 작업은 관리자 계정에서 /etc/cron.daily를 통해 수행할 수 있으며 다음의 내용을 갖는 "sync_clocks"라는 파일을 만들어 놓는다.

#Assume ntp is running, so sync the CMOS RTC to OS system clock
/sbin/clock -w

여러분의 클러스터의 모든 시간을 동기화 시켜야하며 호스트를 항상 표준으로 삼아야 한다. 만일 여러분이 더알고 싶다면 xntpd 문서를 참고하라.


다음 이전 차례