ディスクレスクラスタの構築

阿部 正洋,廣安 知之,三木 光範

ISDL Report   No. 20030701001

2003年 9月 20日

Abstract

本報告では,ディスクレスクラスタの構築を行うにあたり,必要となる各種パッケージの インストールとその設定を行い,その動作確認を行った.具体的な作業内容としては,ま ず,カーネルの再構築,BOOTP等の必要なソフトウェアのインストール,ルートファイルシ ステムの作成を行った.これらの作業を終了した後,GRUB(GRand Unified Bootloader)の 起動用フロッピーディスクを作成し,これによるネットワークからの起動から,ディスクレ スクラスタの動作確認を行うことができた.

1  はじめに

ディスクレスクラスタとは,各計算ノードがハードディスクのないPCクラスタのことである. 通常,ディスクフルクラスタでは,各計算ノードがハードディスク内にあるルートファイル システムにマウントし,そこから起動スクリプトを読み込み,実行する.この起動スクリプ トには,ネットワークに関する設定も行われている.しかし,ディスクレスマシンは,ハー ドディスクの代わりとなるブートサーバを作成する必要があり,これにNFSでマウントする. このためには,各ディスクレスマシンは,自分のIPアドレスやネットワークの設定をカーネル の再構築の際に取得するために,BOOTP,DHCP,RARPのいずれかを利用する.今回は,BOOTPを 利用し,1ノードのディスクレスマシンを用いて,ディスクレスクラスタの構築を行った.

2  ディスクレスマシンの構築

2.1  カーネルの再構築

カーネルは,OSの中核となる部分である.タスクの切り替え,仮想記憶処理,システムコール の処理等,基本的な処理を担っている.その為,OSを利用する際に,便利な機能を追加したり, 不要な機能を削除するのにカーネルの再構築が行われる.そこで,今回は,新たにネットワー クの機能に関する設定を行うためにカーネルの再構築を行った.行った設定は,以下の通りで ある.

また,カーネルの起動時に自分のIPアドレスを取得するためには,カーネルソースが存在するデ ィレクトリ内にある(カーネルソースの場所)/net/ipv4/のファイルipconfig.c のある部分を変更する必要がある.エディタを用いて,以下のように編集した.

 #vi /usr/src/linux/net/ipv4/ipconfig.c

<変更前>
 int ic_set_manually __initdata = 0;

int ic_enable __initdata = 0;

<変更後>
 int ic_set_manually __initdata = 1;      

int ic_enable __initdata = 1;


これにより,カーネル起動の時,自分のIPアドレス情報を自動的に取得できるようになった.

2.2  BOOTPサーバのインストールと設定

BOOTPは,クライアント側(この場合は,ディスクレスマシン側である.)のマシンがIPアドレス 等のネットワーク情報を自動的にサーバ側から取得するためのプロトコルである.基本的な機能は, ほとんどDHCPと同様であるが,基本的に,DHCPは,BOOTPの機能を拡張したものである.行った作 業手順は,以下の通りである.

  1. ディスクレスマシンのIPアドレス情報を得るために,BOOTPのインストールを行った.
  2. ブートイメージを取得するために,tftpのインストールを行った.
  3. マシン間の通信を行えるようにするために,rsh-server,rsh-clientのインストールを行った.
  4. マシン間で並列計算を行えるようにするために,MPIライブラリであるMPICHのインストールを行った.
  5. マスターノードをNFSサーバとするので,nfs-kernel-serverのインストールを行った.
  6. エディタを用いて,サーバ側マシンの/etc/にあるファイルinetd.confを編集した.以 下に,このファイルの/var/tftpboot以下にNFSルートを設ける場合を示す.

     tftp dgram udp wait nobody /usr/sbin/tcpd    /usr/sbin/in.tftpd  /var/tftpboot
    
    bootps dgram udp wait root /usr/sbin/bootpd bootpd -i -t 120 -c /var/tftpboot -d4


    変更後,反映させるために,以下のコマンドを実行する.

     #/etc/init.d/inetd restart
    
  7. エディタを用いて,本マシンの/etc/bootptabを以下のように編集した.

     .default:\
    
    :sm=255.255.255.0:\
    :gw=192.168.30.1:\
    :ht=ethernet:\
    :hn:to=-18000:
    hayashi2:hd=/var/tftpboot/192.168.30.179:tc=.default:ha=00D0B7D54926:ip=192.168.30.179: rp=/var/tftpboot/192.168.30.179:sa=192.168.30.176

2.3  NFSrootの構築

ここでは,ハードディスクを持たないディスクレスクラスタがルートファイルシステムにNFSでマウント できるようにするためのサーバ側マシンの設定を行った.ここでの設定は,ディスクフルノードを構築 する際に行ったように,通常のNFSサーバをインストールすればよい.その後,/etc/exportsを 以下のように編集した.これは,ディスクレスマシンノード用のルートを/var/tftpboot以下に する場合である.

 /var/tftpboot/ 192.168.30.0/255.255.255.0 (no_root_squash,rw)


これは,IPアドレスが192.168.30..で始まる全マシンに対して,/var/tftpboot以下のディレク トリへのアクセスを許可するためのものである.

2.4  ルートファイルシステムの作成

ディスクレスマシン用のルートファイルシステムを作成した.これは,サーバ内の/var/tftpboot/ ディレクトリの中に作成し,ディスクレスマシンはここにマウントすることになる.まず,ディスクレス マシン内に/var/tftpboot/ディレクトリが存在しないので,自分で作成した.

 #mkdir -p /var/tftpboot/192.168.30.179


ここでは,ディスクレスマシンにディレクトリのみを作成するだけのものと,ディレクトリ中のファイル をコピーするものがある.以下に,/var/tftpboot/192.168.30.179ディレクトリに,ディレクトリ のみを作成するものを示す.

 boot,floppy,initrd,proc,tmp


この場合,以下のようにして,空のディレクトリの作成を行った.

 #cd /var/tftpboot/192.168.30.179

#mkdir boot floppy initrd proc tmp


また,以下に,/var/tftpboot/192.168.30.179ディレクトリに,ディレクトリ中のファイルもコピー するものを示す.

 bin,sbin,lib,home,usr,root,etc,dev,var


この場合,以下のようにして,ファイルのコピーを行った.

 cp -a /<コピーするディレクトリ名> /var/tftpboot/192.168.30.179


ディスクレスマシンの/var/tftpboot/192.168.30.179/etc/ディレクトリには,そのマシン固有の ファイルが存在するため,以下のファイルを書き直す必要がある.

 hostname,fstab,hosts.equiv,network/interfaces,hosts,mpich/machines.LINUX


hostname,fstab,hosts.equiv,hostsファイルに関しては,rshを許可するホスト名(IPアドレス)や MPIの実行ノードのホスト名(IPアドレス)を記述し,network/interfacesファイルは,IPアドレスを ディスクレスマシンのIPアドレスに変更した.

fstabファイルについては,以下のように記述した.

 192.168.30.178:/var/tftpboot/192.168.30.179/ / nfs rw 0 2

proc /proc proc defaults 0 0
/dev/fd0 /floppy auto defaults,user,noauto 0 0


サーバとなるマシンには,外部に繋がるNICと内部に繋がるNICの2枚あるので,以下のように,/etc/network/interfaces の設定に追加を行う必要がある.

 auto eth1

iface eth1 inet static
address 192.168.30.1
netmask 255.255.255.0
network 192.168.30.0
broadcast 192.168.30.255


最後に,ブートイメージであるbzImageを作成した.以下のコマンドは,環境設定を反映させ,コンパイ ルの準備を整えてから,bzImageを作成している.

 #make dep

#make bzImage


カーネルのコンパイル作業が終了すると,作成されたカーネルは,カレントディレクトリ下のarch/i386/boot ディレクトリにbzImageというファイル名で作成される.このファイルを/var/tftpboot/ディレクトリ 以下にコピーした.

次に,nfsrootは,カーネルのルートデバイスとして,/dev/以下に作成して認識させた.

 #mknod nfsroot b 0 255

#rdev /var/tftpboot/bzImage /dev/nfsroot


以上で,ディスクレスマシンは,カーネルの起動後,ルートファイルシステムにNFSでマウントすることが可能と なり,IPアドレス,その他ネットワーク情報等,BOOTPを用いて,自動的に自分のマシンに関する情報を取得する ことができるようになった.

3  GRUB起動用ディスクの作成

構築したディスクレスクラスタの動作確認を行うため,GRUB起動用ディスクを作成した.GRUBとは,LILOのような OSの起動のためのブートローダである.LILOは,ハードディスク上の特定のセクタからカーネルのブートイメージ を読み込んで実行される.しかし,GRUBは,ファイルシステムを解釈して,ファイルシステム上のディレクトリパ スでブートイメージを探し出すことが可能であるため,GRUBが対応しているファイルシステム内の任意のファイル を実行することができるという利点がある.GRUB起動用ディスクを作成するには,いくつか方法が挙げられるが, 今回は,以下の手順で行った.

  1. GRUBのソースを入手した.
  2. 適当なディレクトリにソースファイルを解凍して,インストールを行う.( 通常のGRUBの作成を行う.)

     $./configure --prefix=<インストール先ディレクトリ>
    
    $make
    $make install

  3. ネットワークブート対応のGRUBを作成する.

     $./configure --enable-tulip
    
    $make
    #mount /floppy
    #mkdir -p /floppy/boot/grub
    #cp stage1/stage1 /floppy/boot/grub/stage1
    #cp stage2/stage2 /floppy/boot/grub/stage2
    #cp docs/menu.lst /floppy/boot/grub/menu.lst


  4. /floppy/boot/grub/menu.lstを以下のように編集した.

     default 0
    
    timeout 1
    title NetBoot
    bootp
    kernel (nd)/var/tftpboot/bzImage root=/dev/nfsroot
  5. 最後に,フロッピーディスクにGRUBを書き込んだ.

     #<インストール先ディレクトリ>/sbin/grub
    
    grub> root (fd0)
    grub> setup (fd0)
    grub> quit
    #umount /floppy
今回,GRUB起動ディスクを作成しているが,ディスクレスクラスタ構築に必ずしもGRUBの作成は必要ではない. カーネルイメージが書き込まれているフロッピーディスクを用いても起動可能である.GRUBの起動フロッピー ディスクは,ディスクレスマシンをネットワークから起動するためだけに用いている.

4  ディスクフルクラスタとディスクレスクラスタとの比較

ディスクレスクラスタは,ハードディスクを持たないという点で,ディスクフルクラスタと大きく異なり,その 分,以下のような利点が挙げられる.

また,ディスクレスクラスタの問題点は,以下のようなことが挙げられる.

5  今後の課題

今後の課題として,OSCARとROCKSの調査を行う予定である.

References

[1]
クラスタ構築マニュアル
http://mikilab.doshisha.ac.jp/dia/research/person/ykugii/20020531/cluster.pdf
[2]
ディスクレスクラスタ構築マニュアル
http://mikilab.doshisha.ac.jp/dia/research/person/ykugii/20020613/diskless.pdf



Copyright (C) 2003 Tomoyuki Hiroyasu, All rights reserved.
Copyright (C) 2003 Mitsunori Miki, All rights reserved.
Copyright (C) 2003 Masahiro Abe, All rights reserved.

No part of this document may be reproduced, copied, distributed,
transferred, modified, or transmitted, in any form or by any means,
without the prior written permission of the authors.
In no event shall the authors be liable for any damages caused in any way
out of the use of this document.
Back to Top