実行ホスト増産

Ippei Kishida

Last-modified:2018/03/29 22:54:09.

ここ迄は Grid engine を最初に動かすことを想定して一歩ずつ手順を踏んで確認しながら 進めてきた。 計算機を効率的に量産する為に、もっと簡略化した手順を構築する。

Se series (Se00, …, Se09)を作ることにする。 以下、root で。

1 増産

  1. gridengine-exec してある Linux HDD 雛形を作る。
  2. (root で「ssh localhost」で初回 ssh login の問いに yes と答えておく?)
  3. Linux HDD 雛形を 10台分コピーする。
  4. 以下を設定して再起動
    1. vi /etc/hostname
    2. vi /etc/network/interfaces
    3. Se00, …, Se01 の DNS の名前解決の確認

2 並列環境を作製

  1. Ir にて qconf -ap Se.openmpi
    1. slots に (allocation_rule の数) × (ホスト数) の数を設定。 Se{00..09} の場合、40。(多めでも問題ないみたい。Rb 5台生存で 12 にしても、5ジョブしか同時には実行されなかった。)
    2. allocation_rule に 1ホストあたりに許可するプロセス数を設定。キューで設定した slots 数にする。 Se の場合、4。

3 キューの作製

  1. Ir にて qconf -aq Se.q
    1. hostlist に Se00 から Se09 まで 10台分記入
    2. slots に1ホストあたりに許可するプロセス数を設定。先に性能チェックしておいて、その効率台数を入れるべき。 Se の場合、4。
    3. pe_list に Se.openmpi を記入。先に並列環境を作っていないと多分ダメ。
  2. Ir にて qconf -sel して、実行ホストに Se{00..09} が登録されていることを確認。(キューで設定したら自動的に登録されている筈。)

4 Trouble: gridengine-exec がブート後自動的に起動しない

##現象

起動直後にはプロセスがいることがあるが、そのあとすぐに死ぬ。

/etc/init.d/gridengine-exec start を手動で打ち込むと起動する。 起動するが、数秒後にはそのプロセスが死ぬ。

##原因

先に キューへの新ホストの登録と、execution host としての登録を マスターホスト でしておく必要があるのだが、 この登録をしていなかった。 おそらく、マスターホストに問い合わせて、 君は実行サーバじゃないから死んどいて、と言われて止まってたんだろう。

##対処

qconf -mq Ge.q

で Ge の新規ホストを全部登録しておき、 qconf -ae Ge02 で Ge02 を実行ホストとして登録したら sge_execd が稼動しつづけるようになり、 また再起動しても sge_execd が稼動し続けるようになった。

4.1 やってみたけど、関係なさそうな事

ランレベルをコマンドで確認すると、

runlevel
#=>
N 2

ランレベルが変更されておらず(N), 現在値が 2 とのこと。 Debian 系の多くのディストリビューションでは、 ランレベル 2 から 5 を区別しないらしいので、ここは問題なさそう。 /etc/rc*/*gridengine* を探すと、以下のように ランレベル 2 でちゃんと Start するように指定されている。

ls **/*gridengine-exec -1
#=>
init.d/gridengine-exec*
rc0.d/K21gridengine-exec@
rc1.d/K21gridengine-exec@
rc2.d/S21gridengine-exec@
rc3.d/S21gridengine-exec@
rc4.d/S21gridengine-exec@
rc5.d/S21gridengine-exec@
rc6.d/K21gridengine-exec@

/etc/init.d/gridengine-exec start と service gridengine-exec start では環境変数が違うという話があるので service でやってみたが、 状況は変化せず。

root で「ssh localhost」して、 初回ログインの yes/no をきかれたので yesにしてみたが、これはたぶんあまり関係ない。

/etc/init.d/gridengine-exec start

を実行したときに、以下のようなエラーメッセージが出ることがあった。

error: communication error for "Ge02.calc.atom/execd/1" running on port 6445: "can't bind socket"
error: commlib error: can't bind socket (no additional information available)
...

gridengine-exec を apt-get remove して、 apt-get install しなおしてみた。 関係なし。

/etc/init.d/gridengine-exec を読んでみる。 「. /lib/lsb/init-functions」 で読み込まれる log_daemon_msg() でログが書き出される筈だが、 何も出てない。 “Starting Sun Grid Engine Execution Daemon” とか何とかでるはずなんだが。 /var/run/gridengine/execd.pid が PIDファイルっぽいが、 start してもファイル生成しない。

/usr/lib/gridengine/sge_execd -help

すると以下のようなエラーを吐かれる。

GE 6.2u5
usage: sge_execd [options]
   [-help]                                  print this help

daemonize error: child exited before sending daemonize state

このエラーが吐かれて制御が帰ってくるまでの間は sge_execd のプロセスが生きている。

https://github.com/qtrinh/GoogleCloud/tree/master/SGE

critical error: abort qmaster registration due to communication errors
daemonize error: child exited before sending daemonize state
No worries, it might cause by java or previous left-over installation.

を参考に、以下を実行してみたが、いずれもダメ。

apt-get install openjdk-6-jre
apt-get install openjdk-7-jre
apt-get install gridengine-client

5 全体の構成の再検討 [2017-04-12] 追記

少し運用してどう動くのか分かったあとで、 構成を考え直すと良いだろう。

私の環境の場合、

これらを鑑みて、4コアで共通の 並列環境 openmpi4.pe を作って運用することにした。

pe_name            openmpi4.pe
slots              999
user_lists         NONE
xuser_lists        NONE
start_proc_args    /bin/true
stop_proc_args     /bin/true
allocation_rule    4
control_slaves     FALSE
job_is_first_task  TRUE
urgency_slots      min
accounting_summary FALSE