読者です 読者をやめる 読者になる 読者になる

渡米生活。(日記)

渡米生活。本家から切り離しました。あまり渡米生活に関係のないプログラムネタや音楽ネタなど。

Scientific Linux 6.3インストールログ4:Condorのインストール

ジョブ管理システムのCondorをインストール。
面倒なので全部rootで作業。
「condorのコンパイル」までは共用ディスクの上でやっても良い(ただしクラスタのシステムが全部同じ場合)。

user condorを作成.ログインを禁止するため、invalidなシェルを指定。

$ su
# groupadd -g 1000 condor
# useradd -u 1000 -g condor condor
# usermod -s /bin/false condor

足りないファイルをとってくる

必要なファイルは以下を参照。
https://htcondor-wiki.cs.wisc.edu/index.cgi/wiki?p=BuildingHtcondorOnUnix

# yum install uuid-devel
# yum install uuid-c++-devel
# yum install pcre-devel
# yum install libuuid-devel
# yum install libtool-ltdl-devel
# yum install glibc-static
# yum install expat-devel.x86_64

cmakeは2.8以上でないと駄目らしいので、別にとってきてインストール。

# wget http://koji-hub.batlab.org/mnt/koji/packages/cmake/2.8.4/2.osg.el6/x86_64/cmake-2.8.4-2.osg.el6.x86_64.rpm

# rpm -ivh cmake-2.8.4-2.osg.el6.x86_64.rpm

condorのソースをとってきてコンパイル

standard makeはとことんコケたので、もうuwセットでインストールすることにする。

# cd <somewhere>
# tar -zxvf condor_src-8.1.4-all-all.tar.gz 
# cd condor-8.1.4
# ./configure_uw
# make install

これで、condor-8.1.4/release_dirができる。

condorのインストール

condorのインストールは、release_dirの下にバイナリをどこか別の場所にコピーする作業になるが、スクリプトを動かすには、あらかじめcondor_configファイルとcondor_config.localファイルが用意されている必要があるらしい。

というわけで、この2つを手動で作成。
ここでは、condor_configファイルは/home/condor/の下(defaultで探してくれるパスのうちの一つ。CONDOR_CONFIG環境変数で指定する場合はどこに置いてもよい)、condor_config.localファイルは/opt/condor/localの下に置くものとする。

※/opt/condor/localの下には一時ファイルが置かれるので、/optがネットワーク上にある場合はここにlocalディレクトリを置くのはよくない。
できれば、別パーティション上にある/varや/scratchのような場所がベストだが、うちの環境では/varなどに別パーティションを切っていないので、とりあえずoptの下に固めることにした。

更に、インストール先は/opt/condor/8.1.4とし、コレを/opt/condor/proにリンクする。

# mkdir -p /opt/condor/8.1.4
# pushd /opt/condor
# chmod 777 8.1.4
# ln -s 8.1.4 pro
# popd
# cp condor-8.1.4/release_dir/etc/examples/condor_config /home/condor/
# vi /home/condor/condor_config

# 以下のパラメタを書き換える
# your.condor.host.jpはセントラルマネージャーになるマシンのアドレスを入力
CONDOR_HOST    = your.condor.host.jp
RELEASE_DIR    = /opt/condor/pro
LOCAL_DIR      = /opt/condor/local
ALLOW_WRITE    = local01.my.domain, local02.my.domain, local03.my.domain

ALLOW_WRITEにはクラスタに参加する全てのマシンのアドレスが書かれている必要がある。
これを忘れるとcondor_status等のコマンドで全てのノードが見えない。
いちいち書くのが面倒なら*.my.domainとすれば同じドメインの全てのマシンに許可を出せる。

次に、ローカルマシン設定ファイルを定義する。
マスターになるマシンはcondor_config.local.central.managerを、それ以外はcondor_config.localをコピーする。

# mkdir -p /opt/condor/local
# cp condor-8.1.4/release_dir/etc/examples/condor_config.local.central.manager /opt/condor/local/condor_config.local
または
# cp condor-8.1.4/release_dir/etc/examples/condor_config.local /opt/condor/local/

以下のパラメタを変更(または追加)
YOUTPOOLは自分のマシンだけで運用する場合は定義しなくてよい

# vi /opt/condor/local/condor_config.local
CONDOR_HOST    = your.condor.host.jp
COLLECTOR_NAME = YOURPOOL

以下のコマンドをcondor-8.1.4/release_dirの下でtype

#./condor_install --install=. --prefix=/opt/condor/pro --local-dir=/opt/condor/local --type=manager,submit,execute

type=mamager,submit,executeはセントラルマネージャやサブミットマシンの設定。計算するだけでjobのマネージメントをやらないマシンはexecuteだけで良い。

condorのデーモンを走らせる

# export PATH=/opt/condor/pro/bin:/opt/condor/pro/sbin:$PATH
# condor_init
# condor_master

# デーモンが走っているか確かめる
# ps aux | grep condor

condor_master, condor_procd, condor_collector, condor_negotiator, condor_startd, condor_scheddなどが動いていればOK.

ここまでくれば、rootを抜けてもOK

# exit
$ export PATH=/opt/condor/pro/bin:$PATH
$ condor_status

複数台マシンへのインストール

まず、セントラルマネージャとなるマシンにcondorをインストールし、condor_masterを走らせておく。
次に、セントラルマネージャにぶら下がるマシンにcondorをインストールし、condor_masterを走らせる。
(逆の順番では駄目、と昔きいたが、今はどうか知らない)

この状態でcondor_statusを打つと、以下のようなエラーが出る。

Error: communication error
CEDAR:6001:Failed to connect to <XXX.XX.XXX.XXX:9618>

要するに、セントラルマネージャのポート9618が開いていない、という話。
というわけで、CONDORが使用するポートをあける。
CONDORはtcpとupdの9618と、1024番より後ろのポートを自動的にアサインして使う。この設定は変えることも出来るらしいが、面倒なのでクラスター内部の通信は全許可にした(勿論全てのマシンにそれなりのファイヤーウォールをたてておく必要があるけど)。
以下の例はこちらの記事の設定に付け足す場合。

my01 = 'xxx.xx.xxx.xx'
my02 = 'xxx.xx.xxx.xx'

/sbin/iptables -A INPUT -s $my01 -j ACCEPT
/sbin/iptables -A OUTPUT -d $my01 -j ACCEPT

/sbin/iptables -A INPUT -s $my02 -j ACCEPT
/sbin/iptables -A OUTPUT -d $my02 -j ACCEPT

ちなみに、my01、などとおいている変数名がホスト名と重なっていたりすると、まともに動かないので注意。

その他

condor_masterを一度実行すると、condor_offを実行してもデーモンしかストップできない。
面倒なので、condor関係のプログラムを全部殺すスクリプトを作る。

#!/bin/sh
for i in `ps aux | grep condor | grep -v 'grep condor' | awk '{print $2}'`; do eval kill -9 $i; done

ただし、condor_masterが殺せないのには理由があるわけで、ひとたびジョブを投入した後は、このコマンドを実行すると実行中のジョブやどこまで完了したかなどの情報も含め全て消えるので、最初のインストール時のテスト等などの限られた機会以外使用はおすすめしません。