준비운동 하기

저번 문서까지는 고가용성 부하분산 클러스터를 직접 구축했었다. 이번에는 클러스터의 또 다른 분야인 과학 계산 클러스터를 만들어 볼 것이다.
과학 계산 클러스터를 구축하는 방법에는 여러가지가 있겠지만, 필자는 디스크-리스(disk-less) 클러스터를 구축할 것이다.
우선 준비물을 알아보자!
필자는 총 3대의 컴퓨터를 묶어서 만들 것이다. 1대의 Master node 와 2대의 real node 이다.

cpu 펜티엄 3 500MHZ
ram 256MB
hdd 8.5G (참고로 파티션은 /boot 와 / 로만 잡아주었다)
etc lan card(realtek 8139) 1장
cpu 셀러론 533MHZ
ram 128MB
etc lan card(realtek 8139) 1장
cpu 펜티엄 2 233MHZ
ram 64MB
etc lan card(realtek 8139) 1장

그외 허브 1개(참고로 필자는 5port 였다)

위에서 하드웨어 사양을 봐도 알겠지만, 어떻게 저 사양을 가지고 클러스터를 만들겠다는 건지 의문이 들 정도이다. 암튼 우리는 저 사양을 가지고 클러스터를 만들어 볼 것이다.

참고로 read node들은 하드가 필요없다. 하지만 반드시 플로피 드라이브가 있어야 한다.
왜냐하면, 하드가 없는 대신 플로피로 부팅을 해야 하기 때문이다.
자~아 이제 본격적인 설정에 들어가보자!!

세팅 및 설정하기(Master node)

참고로, 우리가 만들어 볼 클러스터의 모습은 아래와 같다.

우선 마스터 노드에 레드햇 8.0을 설치했다. 참고로 설치할때 X윈도우 관련 패키지는 설치하지 않았고, lam, pvm, dhcp 패키지를 추가로 선택하여 설치했다. 필자의 경우 용량은 총 1G 남짓되었다.

우선 master node에 필요한 프로그램들을 다운 받아서 설치해야 한다.
다음과 같다.

  1. tftp (tftp-0.29-3, tftp-server-0.29-3)
  2. mknbi (mknbi-1.4.2-1.noarch.rpm)

☞ 만일 나중에 아래와 같은 에러가 난다면, 아래 패키지를 설치한다.

$mpicc my_mpi.c
/usr/bin/ld: cannot find -laio
Colletct2: ld returned 1 exit status
  • libadio(libadio, libadio-devel) : 참고로 이것은 Redhat8.0 CD에 포함된 패키지다.

우선 tftp 부터 알아보자!
/etc/xinetd.d/tftp 파일을 아래와 같이 편집해야 한다.

service tftp
{
        disable = no    -> 활성화 시켜준다.
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /tftpboot    -> 나중에 커널 이미지가 있을 경로
        per_source              = 11
        cps                     = 100 2
}

그리고 나서,

#/etc/init.d/xinetd restart

제대로 설정이 되었는 지 확인해보자!!

#netstat -lnu 

결과 udp 포트 69번이 열려 있어야 한다.

우선 부팅용 커널 이미지를 만들기 전에 우리는 여기서 커널 컴파일을 해야 한다. 기본적으로 Redhat8.0에 기본적으로 탑재되어 있는 바닐라 커널로는 우리가 원하는 disk-less를 구현할 수 없다. 그래서 여기서 우리는 따로 kernel-2.4.18 커널을 받아서 컴파일할 것이다.
다음은 컴파일시 반드시 지정해주어야 하는 커널 옵션이다!! 주의 깊게 보기 바란다!!

Block divices
<*> loopback block device support
<*> Network block device support
<*> RAM disk support
(4096) efault RAM disk size
[*] initial RAM disk(initrd) support
 
Networking options
<*> Network packet filtering(replaces ipchains)
<*> Socket Filtering
<*> Unix domain sockets
<*> TCP/IP networking
<*> IP:kernel level autoconfiguration
<*> IP:DHCP support
<*> IP:BOOTP support
<*> IP:RARP support
 
Network device support
<*> RealTek RTL-8139 C+ PCI Fast Ethernet Adapter support
ReadTek Lan Card 관련 모두 체크한다.
 
Character devices
<*> Enhanced Read Time Clock Support
 
File systems
<*> Ext3 journalling file system support
Ext3 관련 모두 체크한다. master node의 파일시스템을 확인한다.
<*> NFS file system support
<*> Provide NFSv3 client support
<*> Root file system on NFS
<*> NFS server support
<*> Provide NFSv3 server support
<*> Provide NFS server over TCP support

위에서 언급한 것은 반드시 해주어야 한다. 만일 커널 패닉이 난다면, 위의 옵션을 다시 한번 확인하자!! 성공적으로 컴파일을 했다면, 커널 이미지를 /boot 파티션으로 복사하고 부트로더에 등록해서 다음부터는 새로 만든 커널 이미지로 부팅하도록 한다.

여기서 새로운 커널 이미지로 할 것이 있다. 바로 부팅용 커널 이미지를 만드는 것이다.
바로 위에서 설치했던 mknbi를 사용할 것이다.

#mknbi-linux --ip=dhcp --output=/tftpboot/vmlinuz bzImage 

위에서 보면 알겠지만 새로 만들어진 커널 이미지(bzImage)를 /tftpboot/ 아래에 부팅 커널 이미지(vmlinuz)으로 만들었다.
이제 부터 다른 read node들은 모두 이 부팅 커널 이미지를 사용해서 부팅하게 될 것이다.

새로운 커널로 부팅했다면, 이제 네트워크 설정을 해주어야 한다. 우선 /etc/hosts 파일을 다음과 같이 수정하자!!

127.0.0.1		localhost.localdomain	localhost
210.119.108.172	cluster
210.119.108.173	node1
210.119.108.174	node2

그리고 나서 이제 real node들이 사용할 부팅 영역을 만들어 주어야 한다.
우리는 앞에서 /tftpboot 아래에 영역을 만들어 줄 것임을 암시했었다.

#cd /tftpboot
#mkdir node1 node2
#cd node1
#cp -a /bin /boot /dev /etc /lib /root /sbin /usr /var /home ./
#mkdir proc
#ln -s var/tmp tmp
#chroot /tftpboot/node1 /bin/bash
#vi /etc/fstab
---------------------------------------------------------------------------------------
210.119.108.172:/tftpboot/node1	/		nfs	defaults		0 0
none			/dev/pts		devpts	gid=5,mode=620	0 0
none			/proc		proc	defaults		0 0
none			/dev/shm	         tmpfs	defautls		0 0
---------------------------------------------------------------------------------------

node2 의 경우도 위와 마찬가지로 설정해준다.

어떻게 보면 가장 중요한 부분일지도 모르겠다. 왠만한 정보를 dhcp가 부팅할 때 정보를 주기 때문에 만일 real node에서 부팅이 안된다면, dhcp문제일 가능성이 가장 높다.

--------------------------------------------------------------------------
ddns-update-style       none;
default-lease-time      21500;
max-lease-time          43200;
authoritative;
 
option  subnet-mask     255.255.255.0;
option  broadcast-address       210.119.108.255;
 
option  routers         210.119.108.254;
 
option  domain-name-servers     210.119.108.178;
option  domain-name     "cluster";
 
shared-network WORKSTATIONS
{
        subnet  210.119.108.0 netmask   255.255.255.0
        {
        option  routers         210.119.108.254;
        option  subnet-mask     255.255.255.0;
        range dynamic-bootp     210.119.108.150 210.119.108.170;
        default-lease-time      21600;
        max-lease-time          43200;
        }
}
 
group
{
        use-host-decl-names     on;
        option log-servers      210.119.108.172;
 
        host node1
        {
                hardware ethernet       00:E0:4C:6D:54:B7;
                fixed-address           210.119.108.173;
                option root-path        "/tftpboot/node1";
                filename                "vmlinuz";
        }
 
        host node2
        {
                hardware ethernet       00:50:FC:A5:E9:53;
                fixed-address           210.119.108.174;
                option  root-path       "/tftpboot/node2";
                filename                "vmlinuz";
        }
}
--------------------------------------------------------------------------

/etc/exports 파일을 아래와 같이 수정해준다.

--------------------------------------------------------------------------
/tftpboot/node1		210.119.108.173(rw,no_root_squash,no_subtree_check,sync)
/tftpboot/node2		210.119.108.174(rw,no_root_squash,no_subtree_check,sync)
--------------------------------------------------------------------------
#exportfs -ar

적용시킨다.

#/etc/init.d/portmap restart
#/etc/init.d/nfs restart

세팅 및 설정하기 (real node)

real node는 하드 디스크가 없기때문에 네트워크 부팅 디스켓으로 부팅해서 램 디스크를 사용해야 한다. 그래서 부팅 디스켓을 만들어야 한다.
우선 www.rom-o-matic.org 에 접속한다. 그리고 자신에 맞는 랜카드를 선택한 후에 'Get ROM' 버튼을 눌러 이미지를 다운 받는다. 그리고 빈 플로피 디스켓을 한장 준비한다.

#cat eb-5.2.0-rtl8139.zdsk > /dev/fd0

필자의 경우는 2대의 real node가 같은 랜카드를 사용했으므로 같은 것으로 디스켓 2장을 준비했다.

이제는 각각의 real node를 부팅시켜보자!!
각 노드로 부팅하고 로그인 했다면, 수정해주어야 할 것들이 있다.
왜냐하면, master node의 파일 시스템을 그대로 복사했기 때문에 설정이 같을 수 있기 때문이다. 예를 들면, ip address 같은 것들이다.

ssh 설정하기

이 사이트(http://people.kldp.org/~eunjea/ssh/x87.html)를 참조하기 바란다.
설정해주는 이유는 전에는 rsh를 이용해서 각 노드간에 통신을 했지만, 보안적인 문제때문에 ssh로 바뀌고 있는 추세이기 때문이다.

구동 및 테스트

이제 테스트 할 시간이다.
우선 master node에 일반 사용자(여기에서는 fat81 이라는 계정)을 만들어야 한다. 참고로 real node에서도 같은 'fat81' 이라는 계정이 있어야 한다. 이 것은 앞의 ssh를 설정할 때의 필요한 조건이다.
master node에 'fat81' 로 로그인하고서,

$vi /home/fat81/lamhosts
--------------------------------------------------------------------
cluster
node1
node2
--------------------------------------------------------------------
 
$recon -v lamhosts
.
---------------------------------
Woo hoo!!
..
..
..
---------------------------------
 
$lamboot -v -d lamhost 
topology done

☞ 위의 명령을 내렸을 때 크게 두가지 반응이 있을 수 있다.

  1. 실패
  2. 응답 없음 ( Ctrl + C 로 나온뒤 다시 시도)

필자의 경우 위의 두경우에 모두 무시하고 다시 시도해본 결과 잘 되었다.

이제는 작동 여부를 판단 할 프로그램을 구해야 한다.
이것은 lam source파일로 구할 수 있다. 압축을 풀면 example 디렉토리가 있다. 거기에 ring 이라는 프로그램이 있을 것이다.

$mpicc -o ring ring.c
$mpirun -np 3 ring
  • computer/networking/클러스터_구축하기_-_4.lam을_이용한_과학계산클러스터.txt
  • Last modified: 3 years ago
  • by likewind