클라이언트 노드를 설정하는데는 크게 세가지 방법이 있다. 우선 dd
명령을 이용하여 노드들을 복제한다. 두번째 방법으로는 저자의 topcat 시스템에서 처음단계에서 사용했던 방법으로, 각각의 클라이언트에 운영체제를 따로 설치하고 나머지 설치를 할 수 있는 스크립트를 서버에서 실행시킨다. 세번째 방법으로는 서버에서 모든 설치과정이 끝난 disk-less 클라이언트 방법이다. 저자의 경우는 topcat
시스템에서 뒤의 두가지 방법을 사용했기 때문에 이 두가지 방법에 대해서 자세히 설명할 것이다.
복제의 기본적인 개념은 한개의 드라이브에 있는 하나의 파티션을 정확하게 다른 드라이브에 복사하는 것이다. 하나의 클라이언트를 설치, 설정할 수 있고 디스크의 정확한 복사를 할 수 있다. 이 디스크 이미지를 다른 클라이언트에 사용할 수 있으며 여러분은 IP 주소와 호스트 네임과 같은 몇개의 부분만 변화시키면 된다. 만일 여러분의 클라이언트가 운영체제를 갖고 있는 자신만의 디스크를 갖고 있다면, 이러한 방법은 아주 손쉽게 할 수 있다. 복제는 Jan Lindheim에 의해 Building a Beowulf System http://www.carc.caltech.edu/beowulf/tutorial/beosoft/에 자세히 기술되어 있다. 하나의 디스크에서 한개의 파티션을 다른 디스크에 복사하는 것이다.
이 방법은 모든 클라이언트 설정을 서버에서 해야하기 때문에 앞선 두가지 방법과는 다르다. 이는 클라이언트들이 자신의 물리적 디스크를 갖고 있지 않기 때문에, 모든 파일을 서버노드에 저장해야한다. 만일 여러분이 disk-less 클라이언트 부팅에 관한 더 많은 정보를 원한다면, NFS Root mini howto metalab.unc.edu/LDP/HOWTO/mini/NFS-Root.html와 NFS Root Client HOWTO를 읽어보면 된다.
클라이언트 상에서 모든 시스템 파일들이 서버에 존재하기 때문에 클라이언트 설정은 모두 서버에서 이루어진다. 시스템에 약간의 변화를 주어 시스템을 설정할 때 NFS-root howto를 따라서 했다.
make menuconfig
NFS-root를 지원하는 것을 컴파일하라: CONFIG_ROOT_NFS, CONFIG_RNFS_BOOTP, CONFIG_RNFS_RARP
커널에 있는 모든 선택사항을 설정한 후에 커널을 컴파일할 수 있다. 다음과 같은 명령을 실행한다.
make dep && make clean && make zImage
이제는 커널의 root 장치를 NFS-root로 변경할 것이다. NFS-root Mini-howto에서 알 수있는 dummy 장치를 형성하는 방법을 채택하였다.
makenod /dev/nfsroot b 0 255 cd /usr/src/linux/arch/i386/boot rdev zImage /dev/nfsroot
이번에는 커널 이미지를 플로피에 복사를 하는 것이다.
dd if=zImage of=/dev/fd0만일 여러분의 클라이언트가 동일하다면 모든 시스템을 시작하는 동일한 이미지를 사용할 수있다. 저자의 경우 두개의 다른 플로피를 준비했는데, 하나는 CPU가 하나인 경우이고 다른 하나는 SMP를 위한 것이다.
/var
와 /etc
내의 파일들을 변경하기 전에 하는 것이 좋다. 단순히 15 (sdct) 스크립트를 잘라서 파일에 붙이면 되고 실행시키면 된다. 그 스크립트는 모든 필요한 디렉토리를 형성하고 모든 필요한 파일을 복사하는데 사용된다. 이 스크립트는 어떤 클라이언트에 대해서도 root 디렉토리를 형성하지 않으며단지 이 root 디렉토리를 만드는데 필요한 다른 스크립트를 이용할 수 있는 템플릿을 만드는데 이용된다. 여러분은 16 (adcn) 스크립트를 실행하여 각 클라이언트에 대해 NFS-root 파일 시스템을 만든다.
/tftpboot
아래에 파일시스템을 형성한다. 이 스크립트를 실행하는 일반적인 방법은:
adcn -n node2 -i 10.0.0.2 -d beowulf.my.domain. -l -D eth1
실행명령 옵션을 살펴보자:
-n node2
클라이언트의 이름을 의미한다. 도메인이름은 쓰지 않는다.
-i 10.0.0.2
클라이언트의 IP주소를 정한다.
-d beowulf.my.domain
는 클러스터의 DNS를 의미한다. 이 선택사항이 정해지지 않으면 서버의 DNS 도메인이 사용된다. 여러분 서버의 도메인이 클러스터의 도메인과 다른경우에 사용하자. 저자의 경우, 클라이언트의 완전한 이름은 node2.beowulf.my.domain
이다.
-l
는 RARP 요청을 듣는다는 의미이다. 이 선택사항이 쓰여지면, adcn
는 -D
선택사항과 함께 정해지는 인터페이스에 있는 RARP 요청을 듣게 되고 클라이언트 하드웨어 주소로서 첫번째 "sniffed" RARP 요청으로부터 MAC 주소를 사용한다. 이 선택사항은 MAC 주소를 갖고 오기 위해 tcpdump
를 사용한다. 우선 tcpdump
가 설치되어있는지 확인하라.
-D
는 클러스터에 연결된 디바이스를 정하는데 필요한 선택사항이다.만일 여러분이 여러분의 클러스터에 연결된 디바이스가 한개 이상이면 여러분은 disk-less 클라이언트가 연결되어 있는 네트워크 인터페이스를 이용해야한다. 이 선택사항은 /etc/sysconfig/network-scripts/ifcfg-*
에서 디바이스 정보를 읽고 네트워크와, 넷마스크, 게이트웨이를 읽어드린다.(서버의 IP는 게이트웨이로 사용된다.) 디바이스 정보는 -l
선택사항에 의해 나타나고 그 정보를 tcpdump
를 통해 전달한다.
만일 -D 선택사항이 정해지지 않으면 adcn
스크립트는 default 값을 사용할 것이다. 다른 많은 선택사항은 adcn -h
를 이용하면 알 수 있다. 대부분 여러분이 필요한 내용은 위에 명시되어 있다. 여러분은 스크립트에 중복명령을 실행할 수 있으며 하나의 명령을 이용하여 disk-less 클라이언트 전체를 설치할 수 있다. 예를 들어 클러스터에 연결된 서버의 인터페이스 eth1
를 이용 16 node disk-less 클라이언트를 설치하기 위해 여러분은 다음과 같은 스크립트를 실행하면 된다:
#!/bin/bash adcn -n node2 -i 10.0.0.2 -d beowulf.my.domain -l -D eth1 adcn -n node3 -i 10.0.0.3 -d beowulf.my.domain -l -D eth1 adcn -n node4 -i 10.0.0.4 -d beowulf.my.domain -l -D eth1 adcn -n node5 -i 10.0.0.5 -d beowulf.my.domain -l -D eth1 adcn -n node6 -i 10.0.0.6 -d beowulf.my.domain -l -D eth1 adcn -n node7 -i 10.0.0.7 -d beowulf.my.domain -l -D eth1 adcn -n node8 -i 10.0.0.8 -d beowulf.my.domain -l -D eth1 adcn -n node9 -i 10.0.0.9 -d beowulf.my.domain -l -D eth1 adcn -n node10 -i 10.0.0.10 -d beowulf.my.domain -l -D eth1 adcn -n node11 -i 10.0.0.11 -d beowulf.my.domain -l -D eth1 adcn -n node12 -i 10.0.0.12 -d beowulf.my.domain -l -D eth1 adcn -n node13 -i 10.0.0.13 -d beowulf.my.domain -l -D eth1 adcn -n node14 -i 10.0.0.14 -d beowulf.my.domain -l -D eth1 adcn -n node15 -i 10.0.0.15 -d beowulf.my.domain -l -D eth1 adcn -n node16 -i 10.0.0.16 -d beowulf.my.domain -l -D eth1
만일 여러분이 시스템을 시작하고 나서 "Sending BOOTP and RARP requests..."라고 메세지가 뜨는 경우 여러분은 다음의 내용을 살펴보아야한다.
네트워크 케이블, 스위치 설정등을 확인하고 서버에 있는 인터페이스가 정확히 설정되어 있는지 확인하다.
rarp가 서버 커널에서 지원이 되는지 확인한다.
문제가 되는 클라이언트에 대한 rarp입력이 있는지 확인한다. 이는 'rarp -a'명령으로 알 수 있다. 클라이언트 하드웨어 주소가 정확한지 확인한다.
'tcpdump -i eth1 rarp'를 서버에서 실행시키고 disk-less클라이언트를 부팅한다.(eth1이 클러스터에 연결된 인터페이스라고 가정한다.) 클라이언트가 부팅되고 rarp 요청을 내보낼 때, 여러분은 tcpdump 결과에서 이를 보아야한다. 만일 모든 설정이 정확히 되었다면, 여러분은 서버의 rarp 응답을 보면 될 것이다. 여러분이 요청을 보지 못했다면, 문제의 대부분의 원인은 잘못된 연결이다; 이는 케이블, 스위치, NIC가 문제로 작용했을 수 있다. 클라이언트의 rarp 요청을 볼 수 있지만, 서버가 응답하지 않는다면, 대부부의 문제는 rarp 입력이 잘못되어 나오는 결과이다.
여러분의 클라이언트들이 비디오 카드나 키보드등이 없는 경우 여러분이 서버에서 직접적으로 그들에게 연결할 수 있는 방법이 없다. 설정변화도중 네트워크에 문제가 생길경우와 클라이언트에 telnet 이나 rlogin을 할 수 없으면 여러분은 다른 방법으로 접속해야한다. 클라이언트 콘솔로 접속하는 몇가지 방법이 있다. 첫번째 방법은 Jan Lindheim이 만든 Building a Beowulf System http://www.cacr.caltech.edu/beowulf/tutorial/building.html에 나온 모니터와 키보드 스위치를 이용하면 된다. 다른 한가지 방법은 serial terminal을 사용하는 것이다.
만일 CD-ROM에서 설치하고 단지 하나의 드라이브가 있는 경우, 여러분은 설치할 때마다 각 CD-ROM 드라이브를 옮겨야한다. 그렇지 않은 경우는 NFS 설치를 하면된다. 여러분이 하나의 플로피 드라이브를 갖고 있다면 마찬가지로 해야한다. 저자의 경우 지역 ftp 서버를 이용하여 모든 노드에 설치하였다. 플로피 드라이브도 옮겨야했다. 설치시간을 줄이기 위해 저자는 완전한 설치를 권장한다. 설치할 꾸러미를 선택하는 것은 고통스러운(?) 일이며 16노드의 경우 정말 힘들다. 최근에는 가장 작은 크기의 하드가 2GB이므로 설치공간은 걱정하지 않아도 된다.