[Memo2008]090206『PC クラスターの作り方 (その 2)』(杉山(北大)) 補足資料

クラスタ構築メモ

ログインノードの構築

インストールの準備

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 にマウント
  • インストールするカーネル
    • 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 (デバイス名とノード番号を与える)

参考

スケジューラーの設定

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, ホームディレクトリを用意する.
    • 自動化に関しては, 要検討.

参考

[ITPASSセミナー]

Last modified:2014/04/22 16:39:10
Keyword(s):
References: