GridEngineの管理者ガイド その1


GridEngineとは
=============

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

元々は Sun Microsystems がオープンソース版と商用版開発していましたが， Oracle の買収以来オープンソース版がなくなってしまいました．商用版も[Univa](http://www.univa.com/products/)に売却されてしまいました．オープンソース時代のソースコードを元に開発がされていたプロジェクトとして，[Open Grid Scheduler](http://gridscheduler.sourceforge.net/)や[Son of Grid Engine](https://arc.liv.ac.uk/trac/SGE)などがあります．どれも最近はリリースがなされていないので，プロジェクトの継続性が心配ではありますが，現在稼働中のGridEngine用アプリケーションを移植するような場合には有用です．

ここではCent OS 6向けにパッケージが提供されている[Son of Grid Engine](https://arc.liv.ac.uk/trac/SGE)を用いてセットアップしてみます．

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

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

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

```ruby
# -*- 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](https://fedoraproject.org/wiki/EPEL)が必要となりますので，リポジトリを追加します．

```bash
# 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.localdomain`を`HOSTNAME=gmaster.localdomain`などのように，今回設定するホスト名に合わせてセットアップしてください．

NFSの設定
------

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

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

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

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

```bash
sudo chkconfig nfs on
sudo service nfs start
```

NISの設定
-----

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

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

1. `yum install ypserv`を実行し，必要なライブラリを追加する．
2. `/etc/sysconfig/network`に`NISDOMAIN=grid.master`を追加．


### NISのセットアップ

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

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

```bash
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を変更しておきます．

```bash
# 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をマウントします．以下のように実行してください．

```bash
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/network`に`NISDOMAIN=grid.master`を追加．


### NISのセットアップ

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

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

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

GridEngineのセットアップ
==========

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

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

![001.png](https://qiita-image-store.s3.amazonaws.com/0/56302/246f5dc1-d7ce-448d-6dcf-8b34fe544670.png "001.png")
![002.png](https://qiita-image-store.s3.amazonaws.com/0/56302/4af27354-e57f-a4c3-03fc-5a4c6ccb9479.png "002.png")
![003.png](https://qiita-image-store.s3.amazonaws.com/0/56302/2d1967e4-2c10-39e2-f4be-f922c1a7e950.png "003.png")
![004.png](https://qiita-image-store.s3.amazonaws.com/0/56302/66060b1d-5d1a-a672-4f28-38d69eba6f71.png "004.png")
![005.png](https://qiita-image-store.s3.amazonaws.com/0/56302/87e0c273-2784-a66a-9ab9-1a4ef9bfcea3.png "005.png")
![006.png](https://qiita-image-store.s3.amazonaws.com/0/56302/8a7b5d28-b22c-9244-8b31-4c63bbefd071.png "006.png")
![007.png](https://qiita-image-store.s3.amazonaws.com/0/56302/9860c91b-a6d2-6b33-ad4e-7104cbf23297.png "007.png")
![008.png](https://qiita-image-store.s3.amazonaws.com/0/56302/f8413853-4a17-153b-1273-deb5ceca76e1.png "008.png")
![009.png](https://qiita-image-store.s3.amazonaws.com/0/56302/99a14677-fdce-a997-6e97-ce8b23e6fee7.png "009.png")
![010.png](https://qiita-image-store.s3.amazonaws.com/0/56302/074507a2-4283-8ebe-fe53-fc1519857f0e.png "010.png")
![011.png](https://qiita-image-store.s3.amazonaws.com/0/56302/da6c1f86-f17c-c1e8-5cb8-3c414583d1ed.png "011.png")
![012.png](https://qiita-image-store.s3.amazonaws.com/0/56302/79d25d8f-ad8c-9f5d-f728-38b5eea339f4.png "012.png")
![013.png](https://qiita-image-store.s3.amazonaws.com/0/56302/f9bd2364-8d76-4975-2cf5-f471b43aeb7f.png "013.png")
![014.png](https://qiita-image-store.s3.amazonaws.com/0/56302/4a140f40-ca82-851c-edb5-346e7ef1be58.png "014.png")
![015.png](https://qiita-image-store.s3.amazonaws.com/0/56302/fd06005d-4d7b-2d5b-7c72-a218642afebe.png "015.png")
![016.png](https://qiita-image-store.s3.amazonaws.com/0/56302/4a7aea46-a60d-4cf8-8daf-706108001f10.png "016.png")
![017.png](https://qiita-image-store.s3.amazonaws.com/0/56302/45942f13-a89d-09b4-619e-e019b2dd4b6b.png "017.png")
![018.png](https://qiita-image-store.s3.amazonaws.com/0/56302/2f845c80-6042-4861-40da-1d0a370e5f2e.png "018.png")
![019.png](https://qiita-image-store.s3.amazonaws.com/0/56302/4198ca73-a63a-79ba-b685-7de499268e34.png "019.png")
![020.png](https://qiita-image-store.s3.amazonaws.com/0/56302/a4a8c4a8-d929-7bd7-8600-52830528c7af.png "020.png")
![021.png](https://qiita-image-store.s3.amazonaws.com/0/56302/a17e1593-8ebf-6799-f38c-654c62589511.png "021.png")
![022.png](https://qiita-image-store.s3.amazonaws.com/0/56302/747e184a-1bc7-34ae-6329-26fde84ea3a6.png "022.png")
![023.png](https://qiita-image-store.s3.amazonaws.com/0/56302/81011791-b57d-b4ac-6a86-22ef6bba3ef4.png "023.png")
![024.png](https://qiita-image-store.s3.amazonaws.com/0/56302/4671b5b2-6f24-6b8e-8d99-65218f27f701.png "024.png")
![025.png](https://qiita-image-store.s3.amazonaws.com/0/56302/0bbeb841-165e-1291-0e4e-b4dfe654edb2.png "025.png")
![026.png](https://qiita-image-store.s3.amazonaws.com/0/56302/0ee8d0fd-01fc-0b53-40e5-c127612fd98b.png "026.png")
![027.png](https://qiita-image-store.s3.amazonaws.com/0/56302/4fb261d9-7757-c8a2-8bdc-412043a9ca72.png "027.png")
![028.png](https://qiita-image-store.s3.amazonaws.com/0/56302/ce1cbc99-1aac-9027-aca1-25fbd6527329.png "028.png")
![029.png](https://qiita-image-store.s3.amazonaws.com/0/56302/9ef32836-d368-8e61-9081-b2153a5a13c9.png "029.png")
![030.png](https://qiita-image-store.s3.amazonaws.com/0/56302/bcb22689-300d-87e1-cd2e-22838ab164bb.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`を実行してください．

```bash
qconf -ah gcalc1
```

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

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

![x01.png](https://qiita-image-store.s3.amazonaws.com/0/56302/7c9e6d9f-b186-6163-3478-fc36a63fe644.png "x01.png")
![x02.png](https://qiita-image-store.s3.amazonaws.com/0/56302/7dd84c30-49e8-c696-754d-576cb56600fb.png "x02.png")
![x03.png](https://qiita-image-store.s3.amazonaws.com/0/56302/f0e7b3fd-3e20-bd7c-bc36-04bb847801d1.png "x03.png")
![x04.png](https://qiita-image-store.s3.amazonaws.com/0/56302/7f0abdb6-b8d1-9501-c7d1-0e20930a87f7.png "x04.png")
![x05.png](https://qiita-image-store.s3.amazonaws.com/0/56302/a420f254-1456-e176-c008-81c467c860aa.png "x05.png")
![x06.png](https://qiita-image-store.s3.amazonaws.com/0/56302/e290c8fd-aa87-e71f-592f-c0bf209ab386.png "x06.png")
![x07.png](https://qiita-image-store.s3.amazonaws.com/0/56302/e5cdf577-f9b4-c5bf-b3c1-a5eac18056ea.png "x07.png")
![x08.png](https://qiita-image-store.s3.amazonaws.com/0/56302/92766fb0-3a25-f524-dd69-ba4ee300ab80.png "x08.png")
![x09.png](https://qiita-image-store.s3.amazonaws.com/0/56302/806ecc49-e012-d0a1-e2ef-ed0d7d674bd0.png "x09.png")
![x10.png](https://qiita-image-store.s3.amazonaws.com/0/56302/b8c64cc6-0eba-4968-a32a-4d85e63c6ebf.png "x10.png")
![x11.png](https://qiita-image-store.s3.amazonaws.com/0/56302/6452a1f0-dec5-b82e-c79d-9f246262e66b.png "x11.png")
![x12.png](https://qiita-image-store.s3.amazonaws.com/0/56302/65bfbc53-c792-5c61-3d21-3e60676add72.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でマウントしましょう．
* 各種リソース制限などを行っていません．