Hatena::ブログ(Diary)

May the Source be with you このページをアンテナに追加 RSSフィード

2008-08-09

Ubuntu でグリッドコンピューティング

[Think IT]で小林さんが言っていました。

デスクトップOSに求められるものと、サーバOSに求められるものは大きく異なりますが、共通する部分もあります。まず、OSの基盤部分を中心として、多くのソフトウェアが共通で利用できます。そして、確実なセキュリティフィックスの提供、継続的な開発の継続、定期的な新バージョンのリリースが求められるという点も、両者に共通しています。よって、デスクトップOSとして成功しているUbuntuが、それをベースにサーバOSとしての普及を目指すのは当然だと言えるでしょう。

[Think IT

そう、これから Ubuntuエンタープライズサーバ分野での普及も目指すのです。そんなわけで*1 Hardy を使って Sun Grid Engine を動かしてみました。

Sun Grid Engine 6.1 - 概要

まず事前準備として、Ubuntu マシンを二台用意します。一台でも動かせますが、グリッドの意味が全くないのでここは複数用意しましょう。今回は Server 版をインストールしたデスクトップ(スケジューラ兼計算エンジン)と、Desktop 版をインストールしたノート(計算エンジン)の二台を使いました。KVMXen を使っているような人は、計算エンジンを 10 台くらい並べてみると楽しいかもしれません。

SGE を構成する各ノードは、ホームディレクトリと SGE のインストールディレクトリを共有しておく必要があります。そこでスケジューラ(sgemaster)になるサーバnfs-kernel-server をインストールして /home と SGE をインストールするディレクトリエクスポートしておきます。今回はインストールディレクトリに /opt/gridengine を使うことにしました。各計算ノードは autofs と nfs-commonインストールして、各ディレクトリnfs マウントできるようにしておきましょう。

$ cat /etc/exports
  /home   *.mydomain.org(rw,no_root_squash)
  /opt    *.mydomain.org(rw,no_root_squash)

$ cat /etc/auto.master
  /home   /etc/auto.home
  /opt    /etc/auto.opt

$cat /etc/auto.home
  *       sgemaster.mydomain.org:/home/&

$cat /etc/auto.opt
  *       sgemaster.mydomain.org:/opt/&

SGE はインストール時に各ノードの名前解決を行うようなので、各ノードに固定 IP アドレスを割り振って、名前解決ができるようにしておきましょう。私は DHCP サーバになっている GLANTANK に bind9 をインストールして、ローカルな DNS サーバを構築しました。/etc/hosts でもいけるかもしれませんが、試していません。

SGE を動作させるためのアカウントを作成しておきます。今回は sgeadmin としました。

$ sudo /usr/sbin/useradd -d /home/sgeadmin -m sgeadmin
$ sudo passwd sgeadmin

準備ができたら、以下のサイトから共通ファイルと Linuxバイナリを取得します。今回は SGE 6.0 update 12 を使いました。

http://gridengine.sunsource.net/downloads/60/download.html

ge-6.0u12-common.tar.gz と ge-6.0u12-bin-lx24-x86.tar.gz を /opt/gridengine 以下に展開します。

$ sudo mkdir -p /opt/gridengine
$ cd /opt/gridengine
$ sudo tar zxfv ge-6.0u12-common.tar.gz
$ sudo tar zxfv ge-6.0u12-bin-lx24-x86.tar.gz

そして SGE_ROOT 環境変数を定義して、インストーラを起動します。

$ export SGE_ROOT=/opt/gridengine
$ cd /opt/gridengine
$ sudo ./install_qmaster

インストールは以下のドキュメントに従ってください。Sun Grid Engine のドキュメントというものは存在しないのですが、商用版の N1 Grid Engine のドキュメントがほぼそのまま流用できるようです。

N1 Grid Engine インストールガイド

スケジューラのインストールが完了したら、計算エンジンをインストールします。計算ノード上の /opt/gridengine でインストーラを起動してください。

$ cd /opt/gridengine
$ sudo ./install_execd

二台のノードで計算エンジンのインストールが完了したら、/opt/gridengine/<セル名>/common/settings.sh と settings.csh を /etc/profile.d にコピーしておきましょう。

$ sudo cp /opt/gridengine/default/common/settings.* /etc/profile.d/

qstat でジョブの状態を表示できます。

$ qstat -f
queuename                      qtype used/tot. load_avg arch          states
----------------------------------------------------------------------------
all.q@sgemaster.mydomain.org      BIP   0/1       0.00     lx24-x86      
----------------------------------------------------------------------------
all.q@sgeengine.mydomain.org     BIP   0/1       0.18     lx24-x86      

以下のようなスクリプトを作って、実行されたホスト名を表示させてみましょう。名前は hostname.sh とします。

#! /bin/sh
/bin/hostname

qsub でジョブを投入します。

$ for n in {1..10}
> do
> qsub hostname.sh 
> done
Your job 21 ("hostname.sh") has been submitted
Your job 22 ("hostname.sh") has been submitted
Your job 23 ("hostname.sh") has been submitted
Your job 24 ("hostname.sh") has been submitted
Your job 25 ("hostname.sh") has been submitted
Your job 26 ("hostname.sh") has been submitted
Your job 27 ("hostname.sh") has been submitted
Your job 28 ("hostname.sh") has been submitted
Your job 29 ("hostname.sh") has been submitted
Your job 30 ("hostname.sh") has been submitted

$ qstat -f
queuename                      qtype used/tot. load_avg arch          states
----------------------------------------------------------------------------
all.q@sgemaster.mydomain.org      BIP   0/1       0.00     lx24-x86      
----------------------------------------------------------------------------
all.q@sgeengine.mydomain.org     BIP   0/1       0.19     lx24-x86      

############################################################################
 - PENDING JOBS - PENDING JOBS - PENDING JOBS - PENDING JOBS - PENDING JOBS
############################################################################
     21 0.00000 hostname.s mizuno       qw    08/09/2008 21:32:37     1        
     22 0.00000 hostname.s mizuno       qw    08/09/2008 21:32:37     1        
     23 0.00000 hostname.s mizuno       qw    08/09/2008 21:32:37     1        
     24 0.00000 hostname.s mizuno       qw    08/09/2008 21:32:37     1        
     25 0.00000 hostname.s mizuno       qw    08/09/2008 21:32:37     1        
     26 0.00000 hostname.s mizuno       qw    08/09/2008 21:32:37     1        
     27 0.00000 hostname.s mizuno       qw    08/09/2008 21:32:37     1        
     28 0.00000 hostname.s mizuno       qw    08/09/2008 21:32:37     1        
     29 0.00000 hostname.s mizuno       qw    08/09/2008 21:32:37     1        
     30 0.00000 hostname.s mizuno       qw    08/09/2008 21:32:37     1        

出力は <スクリプト名>.o<ジョブ番号> というファイルに書き出されます。e<ジョブ番号> というファイルはエラー出力になります。

$ cat hostname.sh.o*
sgemaster
sgeengine
sgemaster
sgeengine
sgemaster
sgeengine
sgemaster
sgeengine
sgemaster
sgeengine

と、それぞれ違うノードでジョブが実行されているのが解りますね。

と、こんな感じで Ubuntu でもお手軽にグリッドが構築できたりします。問題はこのグリッドの使い道が個人では見つからないことですが orz

*1:どんなわけ?

hitohito 2008/08/11 01:20 あ、あれ?(汗)
SGEなんか使わなくても、Torqueのパッケージありますよ(って個人でテラスケールコンピューティングしてどうする……)。

師子乃師子乃 2016/01/23 23:35 はじめまして、情報処理の勉強をしている者です。

色々と学ばせていただきます!

よろしくお願いいたします!

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/MIZUNO/20080809/1218289825