Create Gfarm/Pwrake environment on Amazon EC2
Ruby Shell
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
build_gfarm_rpm
cfn
.gitignore
LICENSE
README.md
cfn-tmpl.rb
create-stack.sh
delete-stack.sh
env.sh
prepare-demo.sh
setup-gfsd.sh
setup-keypair.sh
setup-ssh.sh
start-instances.sh
stop-instances.sh

README.md

Amazon EC2 に Gfarm/Pwrake 環境を構築

説明

  • Amazon EC2 (Elastic Compute Cloud) のインスタンスに、 分散ファイルシステムGfarmワークフローシステムPwrakeの環境を構築します。 科学ワークフローのデモとして、Pwrakeを用いて天文画像処理ソフトウエア Montageを実行します。

  • クラウド環境の自動構築のため、Amazon CloudFormation を使用します。 そのテンプレートを、本パッケージに含まれるスクリプトにより自動生成します。

  • Gfarmを起動するノードはホスト名を固定する必要があるため、 Amazon VPC (Virtual Private Cloud) で仮想ネットワークを作成し、 固定アドレスのインスタンスを作成します。

  • 作成するインスタンス

    • MDS (MetaData Server): ログインノードとPwrake実行ノードを兼ねる
    • FSN (File System Nodes): 計算ノードを兼ねる。複数作成可能
  • デフォルトでは、1年間の無料枠範囲内の t2.micro のインスタンスを作成。

  • 以下の例では、シェルとしてbashを使用しています。 プロンプトが $ の場合は、手元のマシンでの実行します。 プロンプトが [ec2-user@ip-10-0-0-10 ~]$ のような場合は、 AWSのインスタンスにログインして実行します。

必要なソフトウエア

次のソフトウエアを使えるようにしておく

  • AWS-CLI (Command Line Intefarce) : コマンドラインからAWSを操作

  • Ruby (>=2.0)

  • cfndsl: Amazon CloudFormation のテンプレートをDSLで作成するツール。 Rubygemsでインストールする。

      $ gem install cfndsl
    
  • 本パッケージ: 取得方法

      $ git clone https://github.com/masa16/amazon-ec2-gfarm-demo.git
      $ cd amazon-ec2-gfarm-demo
    

    または

    $ wget https://github.com/masa16/amazon-ec2-gfarm-demo/archive/master.tar.gz -O - | tar xzf -
    $ cd amazon-ec2-gfarm-demo-master
    

Gfarmインスタンスの構築

  • AWSにサインアップ

  • AWSコンソールから アクセスキーIDと秘密アクセスキーを取得 し、AWS-CLIの設定を行う:

      $ aws configure
      AWS Access Key ID [None]: アクセスキーIDを入力
      AWS Secret Access Key [None]: 秘密アクセスキーを入力
      Default region name [None]: デフォルトリージョンを入力
      Default output format [None]: デフォルト出力フォーマットを入力
    

これにより $HOME/.aws/ に鍵が書き込まれる。すでに設定されている場合は不要。

  • 手元の env.sh の設定を確認 (鍵ファイル名やホスト名など)

  • 次のスクリプトにより、SSH鍵を作成し、公開鍵をAWSにアップロードする。(すでにアップロードされている場合は不要)

      $ sh setup-keypair.sh
    
    • ここでパスワードを設定
  • 環境構築状況を確認できるように、ブラウザからAWSコンソールを開いておく。

  • 次のスクリプトで、CloudFormation でスタックを作成

      $ sh create-stack.sh
    
    • 作成するFSNインスタンスの数を尋ねるので、数字を入力する。

        Number of File System Nodes? : 10
      
    • 5分程度待つと(t2.micro)、Gfarm環境が構築される。

    • 自動的にcfndslで作成されたCloudFormationのテンプレート(json)に基づいて構築。

    • ブラウザからAWSコンソールを開き、インスタンスの作成状況を確認する。

    • 1個のMDSインスタンスとn個のFNSインスタンスが作られる。

    • Gfarmなどのソフトウエアも自動的にインストールされる。

  • インスタンスが起動したら、次のスクリプトでsshの設定を行う(インスタンスを起動するたびに設定が必要)

      $ sh setup-ssh.sh
    
    • ~/.ssh/config に自動的に設定を追加するので、確認する。
    • EC2のログインアカウント:
      • ec2-user (Amazon Linuxの場合)
    • ホスト名のエイリアス:
      • MDS: aws-mds
      • FSN: aws-cn11, aws-cn12, ..
    • FSNへの接続は、aws-mdsを経由する。
    • SSH agent forwarding を用いるので、手元のマシンで ssh-agent を立ち上げておく。
    • MDSとFSNの ~/.ssh/config も設定している。
  • MDSにログインし、Gfarmが起動していることを確認(Yum update等を行うので起動に時間がかかる)

      $ ssh aws-mds
    
      [ec2-user@ip-10-0-0-10 ~]$ gfdf
          1K-blocks          Used         Avail Use% Host
            8023564       1772852       6250712  22% ip-10-0-0-10.us-west-2.compute.internal
      ----------------------------------------------
            8023564       1772852       6250712  22%
    
  • 次のスクリプトを手元で実行することにより、MDSの設定をFSNにコピーし、gfsdを起動する。

      $ sh setup-gfsd.sh
    
      [ec2-user@ip-10-0-0-10 ~]$ gfdf
          1K-blocks          Used         Avail Use% Host
            8023564       1772968       6250596  22% ip-10-0-0-10.us-west-2.compute.internal
            8023564       1584792       6438772  20% ip-10-0-0-11.us-west-2.compute.internal
            8023564       1584792       6438772  20% ip-10-0-0-12.us-west-2.compute.internal
            8023564       1584792       6438772  20% ip-10-0-0-13.us-west-2.compute.internal
            8023564       1584792       6438772  20% ip-10-0-0-14.us-west-2.compute.internal
            8023564       1584792       6438772  20% ip-10-0-0-15.us-west-2.compute.internal
            8023564       1584796       6438768  20% ip-10-0-0-16.us-west-2.compute.internal
            8023564       1584792       6438772  20% ip-10-0-0-17.us-west-2.compute.internal
            8023564       1584792       6438772  20% ip-10-0-0-18.us-west-2.compute.internal
            8023564       1584792       6438772  20% ip-10-0-0-19.us-west-2.compute.internal
            8023564       1584792       6438772  20% ip-10-0-0-20.us-west-2.compute.internal
      ----------------------------------------------
           88259204      17620892      70638312  20%
    

Pwrakeのデモ

  • ここでは、天文画像処理ソフトウエアのMontageのワークフローを、 並列ワークフロー実行システムPwrakeにより実行するデモを行う。

  • 上記の構築で、すでにPwrakeとMontageソフトウェアはインストールされている。

  • 次のスクリプトで、ワークフローの設定と入力ファイルをGfarmファイルシステムにコピーする。

      $ sh prepare-demo.sh
    
  • 次の手順で、レプリカ数=2の設定を行ってから、ワークフローを実行する。

      $ ssh aws-mds
    
      [ec2-user@ip-10-0-0-10 ~]$ cd gfm/montage-m31
      [ec2-user@ip-10-0-0-10 montage-m31]$ gfncopy -s 2 .
      [ec2-user@ip-10-0-0-10 montage-m31]$ pwrake
    
  • 実行ログが log_20150904-... のような名前のディレクトリに出力されるので、 そこから統計情報をHTMLで出力

      [ec2-user@ip-10-0-0-10 montage-m31]$ pwrake --report log_*
    
  • HTTP経由でGfarmのディレクトリにアクセス

      $ firefox http://$(cat MdsDnsName)/gfarm
    
    • shrunk.jpg が結果の画像
    • log_2015*/report.html が統計情報のページ

起動・停止

  • インスタンスの停止(EBSにインスタンスは残る)

      $ sh stop-instances.sh
    
  • 停止したインスタンスの再開

      $ sh start-instances.sh
    
  • CloudFormationのスタックを消去(インスタンスも消去)

      $ sh delete-stack.sh