最終的にはヘッドノードを独立させて、計算ノードはネットワークブートで運用しようと思うが、まずは2ノードでそれぞれHDDでブートして一方がヘッドノードも兼ねるという構成で構築実験をしてみようと思う。
https://qiita.com/yf_xa/items/6042619a5d1a3decf8eb
http://tech.ckme.co.jp/torque.shtml
まずは情報収集から
Centos7へのインストール手順
rootになって
yum install -y epel-release
yum install -y torque-client torque-mom torque-server torque-scheduler
create-munge-key
pbs_server -t create -f -D & #サーバプロファイルを作成
pbs_server_pid=$!
kill $pbs_server_pid #pbs_serverが起動するので一旦終了させる
echo "$HOSTNAME np=$(nproc) num_node_boards=1 numa_board_str=$(nproc)" > /var/lib/torque/server_priv/nodes
echo "HostA" > /etc/torque/server_name #ヘッドノードのホスト名を記述
yumでバイナリをインストールするとNUMAが有効化されているため
num_node_boards=1 numa_board_str=$(nproc)
をちゃんと設定しておく必要があるようだ。
# nano /var/lib/torque/mom_priv/config
$pbsserver localhost
を
$pbsserver HostA
に書き換える。
# サーバを起動する
systemctl start munge
systemctl start trqauthd
systemctl start pbs_server
systemctl start pbs_sched
systemctl start pbs_mom
systemctl enable munge trqauthd pbs_server pbs_sched pbs_mom
# キューを設定する。 キューの名前はここではbatchとしている。
qmgr -c "create queue batch queue_type=execution"
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 queue batch resources_default.walltime=3600"
qmgr -c "set server default_queue=batch"
qmgr -c "set server scheduling=true"
設定の確認
# qmgr -c 'p s'
#
# Create queues and set their attributes.
#
#
# Create and define queue batch
#
create queue batch
set queue batch queue_type = Execution
set queue batch resources_default.nodes = 1
set queue batch resources_default.walltime = 01:00:00
set queue batch enabled = True
set queue batch started = True
#
# Set server attributes.
#
set server scheduling = True
set server acl_hosts = HostA
set server acl_hosts += localhost
set server default_queue = batch
set server log_events = 511
set server mail_from = adm
set server scheduler_iteration = 600
set server node_check_rate = 150
set server tcp_timeout = 300
set server job_stat_rate = 45
set server poll_jobs = True
set server mom_job_sync = True
set server next_job_number = 0
set server moab_array_compatible = True
set server nppcu = 1
これでサーバは起動したはず。
# pbsnodes -a
HostA-0
state = free
np = 16
ntype = cluster
status = rectime=1530434061,varattr=,jobs=,state=free,netload=? 0,gres=,loadave=0.00,ncpus=8,physmem=6282540kb,availmem=5407296kb,totmem=6282540kb,idletime=293,nusers=0,nsessions=0,uname=Linux HostA 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64,opsys=linux
mom_service_port = 15002
mom_manager_port = 15003
こんな感じになってたらいいみたい。
試しにジョブを投げてみる。
$ echo "sleep 30" | qsub
0.HostA
qsubは一般ユーザーでしかできない。
$ qstat
Job ID Name User Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
0.HostA STDIN user name 0 R batch
こんな感じ。
さて、このインストールだとヘッドノード1台で計算ノードも兼ねている状態なので、計算ノードをもう1台加えたい。
https://heavywatal.github.io/dev/torque.html
http://mumeiyamibito.0am.jp/doku.php/サーバ関連/torque_pbs
どうも的確な情報がcentos7について得られないな。
結局、以下のような手順でうまくいった(ような気がする)
まず、クライアント(計算ノード)に
# yum install -y epel-release
# yum install -y torque-client torque-mom
とインストール。
# nano /etc/torque/server_name
HostA
でサーバー名としてヘッドノードのhostnameを書き込み、
# nano /var/lib/torque/mom_priv/config
$pbsserver HostA
でサーバーと同様に$pbsserverを書き換えた。
firewallの設定として
# firewall-cmd --add-port=15001/tcp --zone=public --permanent
# firewall-cmd --add-port=15002/tcp --zone=public --permanent
# firewall-cmd --add-port=15003/tcp --zone=public --permanent
# firewall-cmd --add-port=15003/udp --zone=public --permanent
# firewall-cmd --add-port=15004/tcp --zone=public --permanent
と15001〜15004を開けてやり、
]# systemctl start pbs_mom
とクライアントを起動。
いっぽうヘッドノード側で
# nano /var/lib/torque/server_priv/nodes
HostA np=16 num_node_boards=1 numa_board_str=16
HostB np=16 num_node_boards=1 numa_board_str=16
というふうに計算ノードのhostを書き加えてやる。
最後にヘッドノード側も
# firewall-cmd --add-port=15001/tcp --zone=public --permanent
# firewall-cmd --add-port=15002/tcp --zone=public --permanent
# firewall-cmd --add-port=15003/tcp --zone=public --permanent
# firewall-cmd --add-port=15003/udp --zone=public --permanent
# firewall-cmd --add-port=15004/tcp --zone=public --permanent
と、穴を開けてやって、
# systemctl restart munge trqauthd pbs_server pbs_sched pbs_mom
これにて無事
# pbsnodes -a
HostA-0
state = free
np = 16
ntype = cluster
status = rectime=1530457230,varattr=,jobs=,state=free,netload=? 0,gres=,loadave=0.00,ncpus=8,physmem=6282540kb,availmem=5434500kb,totmem=6282540kb,idletime=534,nusers=0,nsessions=0,uname=Linux HostA 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64,opsys=linux
mom_service_port = 15002
mom_manager_port = 15003
HostB-0
state = free
np = 16
ntype = cluster
status = rectime=1530457230,varattr=,jobs=,state=free,netload=? 0,gres=,loadave=0.00,ncpus=8,physmem=6249708kb,availmem=5227160kb,totmem=6249708kb,idletime=3094,nusers=0,nsessions=0,uname=Linux HostB 3.10.0-862.3.3.el7.x86_64 #1 SMP Fri Jun 15 04:15:27 UTC 2018 x86_64,opsys=linux
mom_service_port = 15002
mom_manager_port = 15003
このように2ノードがクラスタとして使えるようになった。
さて、来週には新規購入で新品のヘッドノードが届くが、こいつをPXEブートと組み合わせてうまく設定できるだろうか?ちょっと不安。