[Memo2008]090206『PC クラスターの作り方 (その 2)』(杉山(北大)) 補足資料
クラスタ構築メモ
ログインノードの構築
インストールの準備
- 今回は USB ディスクを利用する. 128 MB 程度の低容量のもので十分
- hd-media/boot.img.gz をダウンロード <URL:http://ftp.nl.debian.org/debian/dists/testing/main/installer-amd64/current/images/hd-media/boot.img.gz>
- iso イメージをダウンロード <URL:http://cdimage.debian.org/cdimage/lenny_di_rc1/amd64/iso-cd/debian-testing-amd64-businesscard.iso>
- ファームウェアをダウンロード <URL:http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/lenny/current/firmware.tar.gz>
[Mac] USB メモリをさすと自動でマウントされるので, アンマウントする.
$ sudo umont -vf /Volume/USBdisk
[Mac] boot.img.gz を展開する. アクセスランプがつかなくなったら Ctrl-C.
$ sudo zcat ~/Desktop/boot.img.gz > /dev/disk1
- [Mac] iso イメージとファームウェアをコピーする. USB メモリをさし直せばオートマウントされるので, ドラッグアンドドロップするだけ.
Debian GNU/Linux のインストール
- BIOS 画面で USB ディスクから起動するように設定する.
- Advanced options => Expert Install
- デフォルトだと, どうもうまくインストールできなかったので....
- 言語選択
- 日本
- ロケール: ja_JP.UTF8
- キーボード
- PC スタイル, 日本 (106 キーボード)
- インストーラー iso イメージの検索
- OK するだけ
- ネットワーク
- 適宜手動で. 今回は 133.87.45.15 を利用.
- ディスクのパーティショニング
- /dev/sda のパーティショニング. LVM は設定しない.
- /home のみ分割.
- /dev/sdb のパーティショニング. LVM は設定しない.
- パーティションテーブルタイプ: gpt
- /work01 にマウント
- /dev/sda のパーティショニング. LVM は設定しない.
- インストールするカーネル
- linux-image-2.6-amd64
- ソフトウェアの選択
- 標準システムのみ
- システムの時刻は UTC に合わせない.
パッケージの追加
ssh サーバをインストール
# apt-get install openssh-server
sudo
# apt-get install sudo # visudo sugiyama ALL=(ALL) ALL
rsync
# apt-get install rsync
カーネル再構築
- 計算ノード用のカーネルを作成する.
パッケージのインストール. ncurces 関連は make menuconfig するために必要.
# apt-get install kernel-package linux-source-2.6.26 libncurses5-dev
カーネルの展開
# cd /usr/src/ # tar jxvf linux-source-2.6.26.tar.bz2 # ln -s linux-source-2.6.26 linux # cd linux
Debian のでフォルトカーネルの設定ファイルをコピーしてくる.
# cp /boot/config-2.6.26-1-amd64 .config
make
# make menuconfig Network support => Network Options [*] IP: kernel level autoconfiguration [*] IP: DHCP support [*] IP: BOOTP support [*] IP: RARP support Device Drivers => Network device support => Ethernet (1000 Mbit) <*> Intel(R) PRO/1000 Gigabit Ethernet support File systems <*> Ext3 journalling file system support File systems => Network File Systems <*> NFS file system support [*] Root file system on NFS # make-kpkg --initrd --revision=`date '+%Y%m%d'` --append_to_version=.`hostname` kernel_image kernel_headers
カーネルのインストール
# cd /usr/src/ # dpkg -i linux-image-2.6.27.5_`date '+%Y%m%d'`_`hostname`.deb # dpkg -i linux-headers-2.6.27.5_`date '+%Y%m%d'`_`hostname`.deb
作成したカーネルで起動するか確認
# reboot
ネットワークインターフェイスの設定
eth1 に対してプライベートアドレスを割り当てる
auto eth0 eth1 iface eth0 inet static address 133.87.45.15 netmask 255.255.255.0 network 133.87.45.0 broadcast 133.87.45.255 gateway 133.87.45.1 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 133.87.45.70 dns-search ep.sci.hokudai.ac.jp iface eth1 inet static address 192.168.90.100 netmask 255.255.255.0 network 192.168.90.0 broadcast 192.168.90.255
ネットワークをリスタート
# /etc/init.d/network restart
確認
# ifconfig
NFS サーバの設定
パッケージのインストール
# apt-get install nfs-kernel-server
設定. /home/kodama, /usr, /work01 以下を 192.168.90.0/24 に対して公開
# vi /etc/exports /home/kodama 192.168.90.0/255.255.255.0(rw,sync,no_subtree_check,no_root_squash) /usr 192.168.90.0/255.255.255.0(rw,sync,no_subtree_check,no_root_squash) /work01 192.168.90.0/255.255.255.0(rw,sync,no_subtree_check,no_root_squash) # /etc/init.d/nfs-kernel-server restart
計算ノードの構築
- 計算ノードの IP は, 192.168.90.0/24 を利用することにする.
ファイルシステムの用意
パッケージのインストール
# apt-get install debootstrap
置き場を作る. とりあえず /home/kodama としておく.
# adduser --disabled-password kodama
debootstrap で最小限システムを作る. システムは "/home/kodama/ノード番号" 以下に置く. 以下の例は, ノード番号 1 とする.
# debootstrap --arch=amd64 lenny 001 http://dennou-h.gfd-dennou.org/arch/cc-env/Linux/debian
chroot して最低限の設定を行う
# LANG=C chroot /home/kodama/001 /bin/bash # dpkg-reconfigure tzdata (時刻設定) Asia -> Tokyo # apt-get update # apt-get install openssh-server linux-image-2.6-amd64 sudo nfs-common # dpkg -i /usr/src/linux*deb # passwd (root パスワード) # exit
雛形をコピーして編集する. 雛形は /home/kodama/common 以下に置かれている.
# cd /home/kodama/common/ # cp linux *deb ../001/usr/src/ [カーネルをコピー] # cp hosts ../001/etc/ # cat ../001/hosts 127.0.0.1 localhost #133.87.45.15 asura.ep.sci.hokudai.ac.jp asura 192.168.90.1 kodama001 kodama001 192.168.90.2 kodama002 kodama002 192.168.90.3 kodama003 kodama003 .... (以下略) # vi ../001/etc/hostname kodama001 # cp fstab ../001/etc/ # vi ../001/etc/fstab # UNCONFIGURED FSTAB FOR BASE SYSTEM 192.168.90.100:/home/kodama/001 / nfs defaults 0 0 192.168.90.100:/usr /usr nfs defaults 0 0 192.168.90.100:/work01 /work01 nfs defaults 0 0 proc /proc proc defaults 0 0 # cp interfaces ../001/etc/network/ # vi ../001/etc/network/ auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.90.1 netmask 255.255.255.0 network 192.168.90.0 broadcast 192.168.90.255
マウントするためのディレクトリを用意.
# cd /home/kodama/001 # mkdir work01 # mv usr usr.bk; mkdir usr [usr は計算ノードと共有するため]
- /home/kodama/bin/addnode.sh を作った (非常にダサイので誰か直して). これは上記の操作を一括しておこなうものである.
起動用 USB ディスクを作成する
必要なパッケージのインストール
# apt-get install syslinux mtools mbr
- USB ディスクを挿す. 今回は /dev/sdg として認識.
パーティション作成
# /sbin/sfdisk --force /home/sdg <<EOF 0,1014,6,* EOF # /sbin/fdisk -l /home/sdg1 [確認]
USB ディスクを FAT16 でフォーマット
# sbin/mkfs.msdos /dev/sdg1
syslinux をインストール
# syslinux /dev/sdg1
必要なファイルをコピー vmlinuz (カーネルバイナリ), syslinux.cfg (SYSLINUX 設定ファイル) が必要. カーネルは再構築したものを利用すること.
# mount /dev/sdg1 /mnt/ # cp /boot/initrd.img-2.6.26-1-amd64 /mnt/initrd.img # cp /boot/vmlinuz-2.6.26-1-amd64 /mnt/vmlinuz
master boot recorder のインストール
# install-mbr /dev/sdg
syslinux.cfg の編集. rw をつけないと read-only でマウントされてしまうので注意
DEFAULT vmlinuz APPEND root=/dev/nfs rw nfsroot=192.168.90.100:/home/kodama/01 ip=192.168.90.1:192.168.90.100::255.255.255.0:::
上記操作を一括して行う簡単設定スクリプトを作った.
# ./mkusbmem.sh /dev/sdk 1 (デバイス名とノード番号を与える)
参考
- <URL:http://blog.asial.co.jp/329>
- <URL:http://www.jp.debian.org/releases/stable/amd64/ch04s03.html.ja>
- <URL:http://www.linux.or.jp/JF/JFdocs/NFS-Root-Client.html>
- <URL:http://www.linux.or.jp/JF/JFdocs/NFS-Root.html>
- <URL:http://grape.mtk.nao.ac.jp/~makino/articles/diskless-note/doc/files/_/_diskless-note_cp.html>
スケジューラーの設定
Torque のインストール
パッケージのインストール
# apt-get install gcc make
ダウンロード. 最新版の URL を確認して, それを wget する.
$ wget ((<URL:http://www.clusterresources.com/downloads/torque/torque-2.3.6.tar.gz>)) $ tar zxvf torque-2.3.6.tar.gz $ cd torque-2.3.6 $ ./configure --with-default-server=asura --with-server-home=/home/pbs --with-rcp=scp # make # make install
キューの作成
サーバを起動する. 一番最初に起動する場合は -t オプションを付けるようだ.
# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib # pbs_server -t create
qstat -a を実行してみる. まだキューを作成していないので, 何も表示されない.
# qstat -a
キューを作成する. 今回は short (30 分, 優先度高) と, long (無制限, 優先度低) の 2 つを用意する.
# qmgr -c "set server scheduling=true" # qmgr -c "create queue long queue_type=execution" # qmgr -c "create queue short queue_type=execution" # qmgr -c "set queue long started=true" # qmgr -c "set queue short started=true" # qmgr -c "set queue long priority=30" # qmgr -c "set queue short priority=50" # qmgr -c "set queue long enabled=true" # qmgr -c "set queue short enabled=true" # qmgr -c "set queue long resources_default.nodes=1" # qmgr -c "set queue short resources_default.nodes=1" # qmgr -c "set queue short resources_default.walltime=3600" # qmgr -c "set server default_queue=short"
確認. 以下のコマンドでキューの情報が出れば OK.
# qstat -q
試しにジョブを実行する. qstat でジョブの情報が得られれば OK. root ではキューを投げられないので注意.
$ echo "sleep 30" | qsub $ qstat
torque の設定
計算ノードの一覧を作成. ログインノードで作業.
# vi /home/pbs/server_priv/nodes kodama001 np=4 ...
計算ノード用の pbs_mom を作成.
# cd torque-2.3.6 # make packages # cp torque-package-mom-linux-x86_64.sh /home/kodama/01/home/pbs # LANG=C chroot /home/kodama/001 /bin/bash # cd /home/pbs # ./torque-package-mom-linux-x86_64.sh --install
- 確認. /home/pbs/server_name にログインノードのホスト名が含まれていることを確認しておく.
/work01 を NFS しており, /work01 で計算を実行することを教え込む.
# vi /home/pbs/mom_pri/config $usecp asura:/work01 /work01
サーバの起動
計算ノード ログインして以下のコマンドを実行.
# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib # pbs_mon
ログインノード
# /usr/local/pbs/sbin/pbs_server # /usr/local/pbs/sbin/pbs_sched
テスト
- "/work01/ユーザ名" というディレクトリを用意し, そこでジョブを投入する. root 権限ではジョブを投入できないので注意.
ここでは, /work01/sugiyama/a.out を実行するスクリプト (test.sh) を作り, それを qsub する.
$ vi test.sh #!/bin/sh #PBS -N sample #PBS -j oe #PBS -M sugiyama@gfd-dennou.org #PBS -m e cd /work01/sugiyama ./a.out exit 0 $ qsub test.sh $ qstat
- うまくいけば, 出力が sample.o** に書き出される.
注意事項
- ログインノードにアカウントがあっても計算ノードにアカウントが無いと, ジョブを実行できない.
- /etc/passwd, /etc/shadow, ホームディレクトリを用意する.
- 自動化に関しては, 要検討.
Keyword(s):
References: