Linux
CentOS
GridEngine

GridEngineの管理者ガイド その1

More than 1 year has passed since last update.

GridEngineとは

GridEngineとはジョブスケジューラーの一種で,たくさんのバッチジョブを分散して実行することが出来ます.これにより,空いている計算機を探すようなことをせずとも自動的に計算を実行したり,計算機が埋まっている場合でも空き次第ジョブを実行することが出来ます.また,各種リソース制限もありますので,メモリをたくさん使用するようなジョブが1つのノードに集中することも避けられます.科学計算用のスパコンでよく使用されていて,結果がすぐに帰ってくる必要のない計算で今までのソフトウエア資源を使い回したいときに向いています.HadoopやSparkのように短時間で計算結果を返す必要のあるものには向いていません.

元々は Sun Microsystems がオープンソース版と商用版開発していましたが, Oracle の買収以来オープンソース版がなくなってしまいました.商用版もUnivaに売却されてしまいました.オープンソース時代のソースコードを元に開発がされていたプロジェクトとして,Open Grid SchedulerSon of Grid Engineなどがあります.どれも最近はリリースがなされていないので,プロジェクトの継続性が心配ではありますが,現在稼働中のGridEngine用アプリケーションを移植するような場合には有用です.

ここではCent OS 6向けにパッケージが提供されているSon of Grid Engineを用いてセットアップしてみます.

マスターノードのセットアップ

まずはマスターとなるノードをセットアップします.RedHat系だとCent OS 6向けにしかバイナリが提供されていないので,Cent OS 6をインストールしてください.ここでは簡単にするためにVagrantを用いてセットアップします.また,計算ノードも一緒にセットアップしています.

以下のファイルをVagrantfileとして適当な空のディレクトリに配置し,vagrant upを実行することで GridEngine のセットアップの下準備が自動的に完了します.(完全な自動ではないので,この下の特にNIS関係の部分を確認してください)

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "bento/centos-6.7"
  config.vm.provider "virtualbox" do |vb|
   vb.memory = "1024"
  end

  config.vm.define "master" do |master|
    master.vm.network "private_network", ip: "10.1.212.10"

    master.vm.provision "shell", inline: <<-SHELL
# install gridengine
curl -s -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-8.1.8-1.el6.x86_64.rpm
curl -s -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-qmaster-8.1.8-1.el6.x86_64.rpm
curl -s -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-execd-8.1.8-1.el6.x86_64.rpm
curl -s -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-qmon-8.1.8-1.el6.x86_64.rpm

sudo rpm -i gridengine-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-qmaster-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-execd-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-qmon-8.1.8-1.el6.x86_64.rpm

sudo useradd sge
sudo chown -R sge:sge /opt/sge

# change hostname
sudo sed -i -e 's/localhost/gmaster/g' /etc/sysconfig/network
sudo service network restart

# setup nfs
echo '/opt/sge  10.1.212.0/24(rw,root_squash)'|sudo tee /etc/exports
sudo chkconfig nfs on
sudo service nfs start

# setup NIS
sudo yum install -y ypserv
SHELL

  end

  config.vm.define "calc1" do |calc1|
    calc1.vm.network "private_network", ip: "10.1.212.11"
    calc1.vm.provision "shell", inline: <<-SHELL
# change hostname
sudo sed -i -e 's/localhost/gcalc1/g' /etc/sysconfig/network
sudo service network restart

# mount nfs
sudo service nfs start
sudo chkconfig nfs on
sudo mkdir -p /opt/sge
sudo mount -t nfs 10.1.212.10:/opt/sge /opt/sge
echo '10.1.212.10:/opt/sge  /opt/sge  nfs defaults  0 0'|sudo tee -a /etc/fstab

# setup NIS
sudo yum -y install ypbind
SHELL

  end

  config.vm.provision "shell", inline: <<-SHELL
    sudo yum update -y
    sudo yum install -y epel-release
    sudo yum install -y jemalloc dkms
    sudo yum install -y man csh perl perl-XML-Simple hwloc openmotif libXt xorg-x11-xauth xorg-x11-server-Xorg xorg-x11-fonts-ISO8859-1-100dpi xorg-x11-fonts-ISO8859-1-75dpi tcsh tcl xterm mailx nfs-utils

    echo '10.1.212.10   gmaster gmaster.localdomain'|sudo tee -a /etc/hosts
    echo '10.1.212.11   gcalc1  gcalc1.localdomain'|sudo tee -a /etc/hosts

    echo "NISDOMAIN=grid.master"|sudo tee -a /etc/sysconfig/network
SHELL
end

必須ライブラリなどのインストール

この節は上のVagrantfileを使ったときには不要です.

まず,Grid Engineが必要とするライブラリなどをインストールします.このときにEPELが必要となりますので,リポジトリを追加します.

# EPELの有効化
sudo yum install -y epel-release
# EPELにあるライブラリのインストール(もし,VirtualBoxで試しているときはdkmsも入れておくと良い)
sudo yum install -y jemalloc
# その他の必要なライブラリのインストール
sudo yum install -y man csh perl perl-XML-Simple hwloc openmotif libXt xorg-x11-xauth xorg-x11-server-Xorg xorg-x11-fonts-ISO8859-1-100dpi xorg-x11-fonts-ISO8859-1-75dpi tcsh tcl xterm mailx nfs-utils

ホスト名の設定

この節は上のVagrantfileを使ったときには不要です.

次にhostsファイルを書き込みます.以下のものを/etc/hostsに追記してください.ホスト名やIPアドレスは今回のGridEngineに追加するノードに合わせて網羅しておいてください.

10.1.212.10 gmaster gmaster.localdomain
10.1.212.11 gcalc1  gcalc1.localdomain

ホスト名を変更します./etc/sysconfig/networkを開いて,HOSTNAME=localhost.localdomainHOSTNAME=gmaster.localdomainなどのように,今回設定するホスト名に合わせてセットアップしてください.

NFSの設定

この節は上のVagrantfileを使ったときには不要です.

Grid Engineの設定などを一部共有するためにNFSが必要になります./opt/sge以下を共有できるようにしておきます.以下の行を/etc/exportsに書き込んでください.

/opt/sge    10.1.212.0/24(rw,root_squash)

その上で以下のコマンドを実行し,サービスを開始します.

sudo chkconfig nfs on
sudo service nfs start

NISの設定

NISに必要なライブラリのインストールと設定ファイルの書き込み

この節は上のVagrantfileを使ったときには不要です.

  1. yum install ypservを実行し,必要なライブラリを追加する.
  2. /etc/sysconfig/networkNISDOMAIN=grid.masterを追加.

NISのセットアップ

この節は上のVagrantfileを使ったときにも必要です.

まず,設定を始める前に再起動します.その後,以下のコマンドを実行します.

sudo /usr/lib64/yp/ypinit -m
sudo service ypserv start
sudo service ypxfrd start
sudo service yppasswdd start
sudo chkconfig ypserv on
sudo chkconfig ypxfrd on
sudo chkconfig yppasswdd on

sudo /usr/lib64/yp/ypinit -mを実行すると

At this point, we have to construct a list of the hosts which will run NIS
servers.  gmaster is in the list of NIS server hosts.  Please continue to add
the names for the other hosts, one per line.  When you are done with the
list, type a <control D>.
    next host to add:  gmaster
    next host to add:

のような画面が最初に出てきますが,ここではControl-Dを押してください.次に

The current list of NIS servers looks like this:

gmaster

Is this correct?  [y/n: y]

となったらyを押してEnterを押します.

GridEngineのインストール

この節は上のVagrantfileを使ったときには不要です.

以下のコマンドを実行し,必要なファイルのダウンロードとインストールを行います.またインストールされたディレクトリのOwnerを変更しておきます.

# download RPMs
curl -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-8.1.8-1.el6.x86_64.rpm
curl -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-qmaster-8.1.8-1.el6.x86_64.rpm
curl -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-execd-8.1.8-1.el6.x86_64.rpm
curl -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-qmon-8.1.8-1.el6.x86_64.rpm

# install RPMs
sudo rpm -i gridengine-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-qmaster-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-execd-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-qmon-8.1.8-1.el6.x86_64.rpm

# Add user and change owner
sudo useradd sge
sudo chown -R sge:sge /opt/sge

これでGridEngineを使うためのマスターノード側の下準備は終了です.

計算ノードの設定

必須ライブラリなどのインストール

この節は上のVagrantfileを使ったときには不要です.マスターノードと同様にセットアップします.

ホスト名の設定

この節は上のVagrantfileを使ったときには不要です.マスターノードと同様にセットアップします./etc/sysconfig/networkのホスト名は計算ノードのものにしてください.

NFSの設定

この節は上のVagrantfileを使ったときには不要です.

マスターノードでセットアップしたNFSをマウントします.以下のように実行してください.

sudo service nfs start
sudo chkconfig nfs on
sudo mkdir -p /opt/sge
sudo mount -t nfs 10.1.212.10:/opt/sge /opt/sge

最後に,10.1.212.10:/opt/sge /opt/sge nfs defaults 0 0/etc/fstabに追記することで,再起動後にも自動的にマウントされるようにします.

NISの設定

NISに必要なライブラリのインストールと設定ファイルの書き込み

この節は上のVagrantfileを使ったときには不要です.

  1. yum install ypbindを実行し,必要なライブラリを追加する.
  2. /etc/sysconfig/networkNISDOMAIN=grid.masterを追加.

NISのセットアップ

この節は上のVagrantfileを使ったときにも必要です.

まず,設定を始める前に再起動します.その後,以下のコマンドを実行します.

sudo authconfig --enablenis --nisdomain=grid.master --nisserver=gmaster --update

GridEngineのセットアップ

マスターノードのセットアップ

まず,マスターノードのセットアップを開始します.マスターノードにログインし,rootになってください.そして,/opt/sgeに移動します.もし,Vagrantを使っている場合のrootパスワードはvagrantです.そして,./install_qmasterを実行し,インストーラーを立ち上げます.基本的にはエンターキーを押し続ければよいですが,途中で管理者のメールアドレスを聞かれますので,必要であれば登録しましょう.

001.png
002.png
003.png
004.png
005.png
006.png
007.png
008.png
009.png
010.png
011.png
012.png
013.png
014.png
015.png
016.png
017.png
018.png
019.png
020.png
021.png
022.png
023.png
024.png
025.png
026.png
027.png
028.png
029.png
030.png

最後に,echo 'source /opt/sge/default/common/settings.sh' > /etc/profile.d/gridengine.shを実行し,必要な環境変数が自動的に設定されるようにします.

これでマスターノードのセットアップは終了です.

計算ノードのセットアップ

GridEngineへノードとして追加

このコマンドはマスターで実行します.以下のコマンドを実行してGridEngineに追加する予定の計算ノードを登録します.もし,qconfが見つからないときはsource /opt/sge/default/common/settings.shを実行してください.

qconf -ah gcalc1

計算ノードでのセットアップ

この節のコマンドは計算ノードで実行します.rootになった上で/opt/sgeに移動します.その後,./install_execdを実行し,インストーラーを起動します.こちらもエンターキーを押し続ければ大丈夫ですが,以下にスクリーンショットをのせておきます.途中でPermissionエラーのようなことを言われたときには,おそらくNISに問題があります.

x01.png
x02.png
x03.png
x04.png
x05.png
x06.png
x07.png
x08.png
x09.png
x10.png
x11.png
x12.png

最後に,こちらのノードでもecho 'source /opt/sge/default/common/settings.sh' > /etc/profile.d/gridengine.shを実行し,必要な環境変数が自動的に設定されるようにします.

これで計算ノードのセットアップは終了です.無事終了している場合にはqhostを実行すると

[root@gmaster sge]# qhost
HOSTNAME                ARCH         NCPU NSOC NCOR NTHR  LOAD  MEMTOT  MEMUSE  SWAPTO  SWAPUS
----------------------------------------------------------------------------------------------
global                  -               -    -    -    -     -       -       -       -       -
gcalc1                  lx-amd64        1    1    1    1  0.00  996.3M  106.6M  928.0M     0.0

と表示されるはずです.もし,qhostが見つからないときはsource /opt/sge/default/common/settings.shを実行してください.なお,あまりお勧めはされませんが,マスターノードと計算ノードは兼ねることもできます.

やり残したこと

  • 計算ノードから必要なファイルがきちんと見えるようにする必要があります.具体的にはホームディレクトリをNFSでマウントしましょう.
  • 各種リソース制限などを行っていません.