クラスターを作った時のメモ

2020/07/24

余っていた PC をクラスター化させた時のメモです。環境は Ubuntu でやりました。参考程度にどうぞ。

⚡ やりたいこと

メイン PC の座から陥落してしまったかわいそうな PC たちにも効率よく働いてもらうためにジョブ管理システムを導入したい。ゆくゆくは並列計算なんかもしてみたい。

🔧 設定方法

ローカルなネットワーク内に複数台の PC を接続していることが前提です。今回はこの中の 1 台を head node として NIS(network information service)NFS(network file system)、ジョブ管理システムのTORQUE をぶち込みました。その他の PC は計算用 node になります。

IP アドレスの固定

全ての node の IP アドレスを固定しておきます(この際に ssh の設定もしておくと良いかも)。

NIS の設定

アカウント情報等を共有するのに必要です。

head node 側

nis をインストールします。インストール中にドメイン名を聞かれるので設定します。

sudo apt install nis

/etc/ypserv.securenets を編集します。

#This line gives access to everybody. PLEASE ADJUST!
#0.0.0.0 0.0.0.0 #変更前
255.255.255.0 192.168.1.0 #アクセス許可する範囲追記

/var/yp/Makefile を編集します。

MERGE_PASSWD=true
MERGE_GROUP=true

/etc/hosts で 固定した IP アドレスとドメイン名を設定します。

192.168.1.1 head-node-name

/etc/default/nis を編集します。

NISSERVER=master
NISCLIENT=false

NIS データベース更新します。

/usr/lib/yp/ypinit -m

サービスを再起動します。

service rpcbind restart
service ypbind restart

計算 node 側

nis をインストールします。head-node と同じドメイン名を設定します。

sudo apt install nis

/etc/yp.conf を編集します。最終行へ[ドメイン名] server [head-nodeのホスト名 or IP アドレス]を追記します。

domain head-node-name server 192.168.1.1

/etc/nsswitch.conf を編集します。

passwd: compat nis
group: compat nis
shadow: compat nis
hosts: files dns nis

サービスを再起動します。

service rpcbind restart
service ypbind restart

最後に確認します。

ypwhich

NFS の設定

ファイル共有のために必要です。今回は/homeを共有します。

head node 側

nfs をインストールします。

sudo apt install nfs-kernel-server

/etc/exports に以下を追記します。

/home 192.168.1.0/255.255.255.0(rw,async) #/home をマウントする

ここで、rw読み書きの許可、async は非同期書き込みを意味します。適宜適切なオプションを選択してください。次に nfs を再起動します。

/etc/init.d/nfs-kernel-server restart

計算 node 側

nfs をインストールします。

sudo apt-get install nfs-common

マウント先のディレクトリを作成します。

mkdir /home

/etc/fstab に以下を追記します。

192.168.1.1:/home /home nfs defaults 0 0

OS を再起動し、/homeがマウントされたか確認します。

df -h

TORQUE の設定

ジョブ管理システムです。

head node 側

torque をインストールします。

sudo apt install torque-server

/var/spool/torque/server_name にヘッドノード名を追記します。

head-node-name

一度サービスを停止します。

ps -e |grep pbs
sudo kill ID #pbs関連のjobを終了させる

pbs サーバの設定を行います。

pbs_server -t create
qmgr -c "set server scheduling=true"
qmgr -c "create queue batch queue_type=execution" #"batch"というキューを作成
qmgr -c "set queue batch started=true"
qmgr -c "set queue batch enabled=true"
qmgr -c "set queue batch resources_default.nodes=1"
qmgr -c "set server default_queue=batch" #デフォルトキューを"batch"
qmgr -c "set server acl_hosts = head-node-name" #hostname を指定
qmgr -c 'set server submit_hosts = head-node-name' #hostname を指定
qmgr -c 'set server allow_node_submit = True'

pbs サーバの確認をします。

qmgr -c 'p s'

/var/spool/torque/server_priv/nodes を作成し、各計算 node のホスト名と最大ジョブ数を指定します。

node1 np=8 #ホスト名 np=最大ジョブ数
node2 np=8
...

サービスを再起動します。

service torque-* restart

計算 node 側

torque をインストールします。

sudo apt install torque-mom torque-client

/var/spool/torque/server_name に head node 名を追記します。

head-node-name

/var/spool/torque/mom_priv/config を編集します。

$pbsserver  head-node-name  #hostname of the head node
$logevent 255 # bitmap of which events to log
$usecp *:/home /home # NFS setting

サービスを再起動します

service torque-mom restart

設定は以上です。

🚀 ジョブの投入

head node からジョブを投入すれば、勝手に各計算 node にジョブが割り当てられます。計算結果などは各ノードにマウントしている/home以下に吐くようにすればよいです。

ジョブの投入には下記のようなシェルスクリプトを作成すると便利です。

#!/bin/sh
#PBS -N job  #job名の指定
#PBS -j oe  #標準出力とエラー出力をまとめる
#PBS -q batch  #queueの指定
#PBS -l nodes=1  #使用するnode数を指定
cd $PBS_O_WORKDIR #ジョブ投入時のディレクトリ
./a.out

上記シェルスクリプト(job.sh)を用いてジョブの投入を行うには、

qsub ./job.sh

とします。またジョブの状態は、

qstat

で確認できます。

また各 node の状況は、

pbsnodes

で確認できます。

🌛 おわりに

何かしらのエラーが出るときは、とりあえず各デーモンを再起動してみると上手くいくかもしれない.....

logo

たまおさ

釣りとか登山とか好きです。(@tamaki_osamu)