PureApplication System 仮想パターン構築の極意: 第 2 回 仮想パターン構築において役立つ手法 (その 1)

仮想アプリケーション・パターンおよび仮想システム・パターン開発において役立つ手法

当シリーズでは、ISV アプリケーションを IBM PureApplication System 上の仮想パターン (仮想アプリケーション・パターン (Virtual Application Pattern: 以下、VAP) と仮想システム・パターン (Virtual System Pattern: 以下、VSP)) として構築する上で筆者らが取得したノウハウやベストプラクティスをご紹介します。その中で今回は、VAP 開発手法を 3つ、VSP 開発手法を 6つご紹介します。

2012年11月29日 - PureApplication System 1.0.1 での修正点を反映しました。

2013年 2月08日 - 「4. DB2 のファイル・システム・サイズ増加」セクションの記述に不足/不備があったため更新しました。

2013年 9月12日 - コマンド・ライン・ツールの registry ファイルの記述を変更しました。

2013年 10月25日 - 「 4. DB2 のファイル・システム・サイズ増加」セクションをファイル・システム拡張する方法に更新しました。

宮田 裕樹, 日本アイ・ビー・エム, ソフトウェア事業, ISV&デベロッパー事業推進

宮田 裕樹
日本アイ・ビー・エム ソフトウェア事業 ISV&デベロッパー事業推進に所属。WebSphere および PureApplication System のテクニカル・スペシャリスト。12 年以上にわたって、多くのお客様に対する WebSphere テクニカル・サポートを行った経験を持つ。昨年より、ISV アプリケーションを PureApplication System に実装する Ready for PureSystems プロジェクトをリードしている。



坂本 康輔, 日本アイ・ビー・エム, ソフトウェア事業, ISV&デベロッパー事業推進

坂本 康輔
日本アイ・ビー・エム ソフトウェア事業 ISV&デベロッパー事業推進に所属。医療系を中心とした ISV アプリケーションの技術支援や移行支援を担当し、主に PureApplication System と、最近はそれに加えて Business Analytics (SPSS, Cognos 等) のサポートを実施している。



2013年 9月 12日 (初版 2012年 7月 26日)

IBM PureApplication System は、2つの仮想パターンをサポートしています。仮想アプリケーション・パターンと仮想システム・パターンです。

  • 仮想アプリケーション・パターン (VAP) はワークロード・レベルの仮想パターンで、アプリケーション・プラットフォーム・エクスパティーズ (専門的知見) まですべてを含んでいます
  • 仮想システム・パターン (VSP) はテクノロジー・レベルの仮想パターンで、ミドルウェアのエクスパティーズまでが含まれています

この記事では、それぞれのパターン開発におけるベスト・プラクティスをご紹介します。いずれも実際のビジネス・アプリケーションの実装段階で会得した実用的なものです。

VAP におけるベスト・プラクティス

ここでご紹介する仮想アプリケーション・パターンにおけるプラクティスは以下です。

  1. クラス・ローダー順序/ポリシーの変更

    パターン開発者が、VAP アプリケーションのクラス・ローダー順序およびポリシーの変更を容易にできるようにします。 (クラス・ローダー・ポリシーがアプリケーション毎のクラス・ローダーの制御をします)

  2. FTP サーバーへの put/get および、一般サーバーへのアクセス

    パターン開発者が、VAP アプリケーションの外部にある FTP サーバーへのアクセスを可能にします。この手法は、 外部の HTTP サーバー、RSS サーバーなどその他の一般サーバーにも当てはまります

クラス・ローダー順序/ポリシーの変更

エンタープライズ・アプリケーションがクラス・ローダー順序や WAR クラス・ローダー・ポリシーの変更を必要とする場合、EAR を導入後、WAS 管理コンソールから設定変更を行うのが通常です。たとえば、アプリケーションのクラスを先にロードしたい場合、クラス・ローダー順序を “最初にローカル・クラス・ローダーをロードしたクラス (親は最後)” に設定します。

図 1. WAS 管理コンソール
WAS 管理コンソール

しかし、VAP の場合はデプロイされた VM に変更を加えることは許可されないため、それを行うことができません。その代わり、Virtual Application Builder で設定可能な JVM ポリシーによってクラス・ローダー順序を下記方法で構成します。

図 2. Virtual Application Builder におけるクラス・ローダー順序
Virtual Application Builder におけるクラス・ローダー順序
  1. Virtual Application Builder において、エンタープライズ・アプリケーションに JVM ポリシーを追加します
  2. 「クラス・ローダー順序」には PARENT_FIRST もしくは PARENT_LAST のいずれか、 「WAR クラス・ローダー・ポリシー」には MULTIPLE もしくは SINGLE のいずれかを、それぞれ選択します

FTP サーバーへの put/get および、一般サーバーへのアクセス

VAP のアプリケーションから FTP サーバーに接続し、ファイルの put/get を行いたい場合、FTP サーバーを VAP のコネクト・アウトとして定義しておく必要があります。

その場合、Virtual Application Builder にて、FTP サーバーのポート 20 と 21 について、その他のコンポーネントのコネクト・アウトとして定義し、アプリケーション・コンポーンネントとリンクしておきます。ただし、注意点として、アプリケーションからは FTP サーバーへの接続ポート番号を固定するために、パッシブ・モードではなく、アクティブ・モードで FTP 接続する必要があります。VAP のアプリケーションから、RSS サーバーや HTTP サーバーなどの一般サーバーを参照する場合も同様にコネクト・アウトを定義し、ターゲットの IP アドレスとポート番号を指定しておく必要があります。

図 3. Virtual Application Builder におけるコネクト・アウト定義
Virtual Application Builder におけるコネクト・アウト定義

VSP におけるベスト・プラクティス

ここで述べる、仮想システム・パターンにおけるプラクティスは以下です。

  1. wsadmin スクリプトによる VSP デプロイ

    一般的に wsadmin スクリプトはスクラッチから作成するのは難しいですが、この記載をヒントにすれば、パターン開発者は VSP で使用する wsadmin スクリプトを容易に作成できます

  2. VSP のインポート/エクスポート

    コマンド・ライン・インターフェースを使い、スクリプト・パッケージとアドオンをリストアし、マイグレーション・パターンをコピーします。同時に、DBCS (double-byte character set) 環境におけるエラー回避策を紹介します

  3. VM のタイムゾーン設定変更

    デフォルトの UTC を使用したくない場合に参照ください

  4. DB2 のファイル・システム・サイズ増加

    デフォルトより大きいファイル・システムを必要とする場合に参照ください

  5. 既存データベースからの表/データ移行

    手入力や専用ツールによりデータベースが構築されていてデータベース作成およびデータロード用のスクリプト化が難しい場合、データベース環境全体の移行用スクリプトを作成します

  6. テスト済みの DB2 ドライバー利用

    すでにご自身のアプリケーションで動作しているドライバーを使用するのが、VSP パッケージにとっても一番良いです

1. wsadmin スクリプトによる VSP デプロイ

VSP デプロイ時に必要なスクリプト・パッケージ内に wsadmin の jython スクリプト・ファイル (*.jy) があります。WebSphere Application Server の管理コンソールの操作からスクリプトを自動生成するコマンド支援機能を利用すると効率的に jython スクリプトを作成することができます。

データソース作成スクリプト

データソース・スクリプトは以下の方法で作成します。

  1. 仮想マシンのインスタンス生成時に VNC および WebSphere のリンクが同時に作成されます。
  2. (仮想システム・インスタンスで「仮想マシン」セクションの展開)
  3. 1. の WebSphere リンクをクリックし、ユーザー名 virtuser / 設定したパスワードでログインします
  4. 以下、データソースの構成時を例にして説明します。WAS 管理コンソールが起動するので、左側のメニューから、「リソース」→「JDBC」→「データ・ソース」の順に選択します
  5. 新規作成を選択し、データ・ソースの作成ステップ 1 からステップ 5 までを実施します
  6. 終了ボタンを押下後、右側に表示される「コマンド支援 最後のアクションの管理スクリプトを表示 」をクリックします
    図 5. コマンド支援
    コマンド支援
  7. 「管理スクリプト・コマンド」画面に表示されたスクリプト(AdminTask, AdminConfig 等)をコピーします
    図 6. スクリプト・コピー
    スクリプト・コピー
  8. CreateDatasource.zip 内の CreateDatasource.jy ファイル内の該当箇所を 6. でコピーしたスクリプトを参考にして記述します (セル名やノード名などの固定値は変数に置き換えておく必要があります)

EAR 導入スクリプト

データソース作成用スクリプト構築方法を上記で学びました。同様に Enterprise Archive ファイル導入用スクリプトを作成します。

  1. データソース作成時と同様、仮想マシンのインスタンス生成時に VNC および WebSphere のリンクが同時に作成されます (仮想システム・インスタンスで「仮想マシン」セクションの展開)
  2. 1. の WebSphere リンクをクリックし、ユーザー名 virtuser および 設定したパスワードでログインします
  3. WAS 管理コンソールが起動するので、左側のメニューから、「アプリケーション」→「新規アプリケーション」→「新規エンタープライズ・アプリケーション」の順に選択します
  4. EAR のパスを入力します
  5. ファースト・パスもしくは詳細のいずれかを選択します。ファースト・パスを選択した場合は、画面に表示されるステップ 1 からステップ 3 までを実行します。(ステップ 1: インストール・オプションの選択/ステップ 2:モジュールをサーバーにマップ/ステップ 3: 要約)
  6. 終了ボタンを押下後、右側に表示される「コマンド支援 最後のアクションの管理スクリプトを表示」をクリックします
  7. 「管理スクリプト・コマンド」画面に表示されたスクリプト(AdminTask, AdminConfig 等)をコピーします
  8. installApp.zip 内の installApp.jy ファイル内の該当箇所を 7. でコピーしたスクリプトを参考にして記述します (セル名やノード名などの固定値は変数に置き換えておく必要があります)

2. VSP のインポート/エクスポート

VAP ではエクスポート/インポートがアイコン 1 度ずつのクリックで可能ですが、VSP ではスクリプト・パッケージとアドオンを手動でアップロードした上で、移行するパターンを pure コマンドによって選択し新環境にコピーします。

事前準備:

  1. IBM PureApplication System ようこそ画面左上から「コマンド行ツールのダウンロード」によりダウンロードし、<WORKING_DIRECTORY>に展開します (約 8MB)
    図 7. コマンド・ライン・ツールのダウンロード
    コマンド・ライン・ツールのダウンロード

    ※ 環境によって、コードセットの設定が必要な場合があります。コマンド・ライン・ツールが正しく動作しない場合は以下の設定を行ってください。

  2. <WORKING_DIRECTORY>\pure.cli\lib\<バージョン番号>\ に移動し、registry ファイルを編集します。下記 2 行のコメントを外し、コードセットの編集を行います。
    図 8.DBCS 環境設定
    図 8.DBCS 環境設定

エクスポート:

  1. スクリプト・パッケージ (アドオンがある場合はそれも) を、ダウンロード機能を使用し保管します
  2. <WORKING_DIRECTORY>\pure.cli\bin に移動して、pure コマンドを発行します
    pure -h host_IP_address -u user_name  
    -p password -f ..\samples\patternToPython.py -f xxx_vsp.py
    図 9. コピー対象パターン選択
    コピー対象パターン選択
  3. 今回コピーする対象のパターンの番号を上記画面から選択し、VSP 用の python スクリプト (xxx_vsp.py(名称は任意)) を作成(Export)します

インポート:

  1. インポート環境において、同じ名前でスクリプト・パッケージ (アドオンがある場合はそれも) を作成し、2.a でダウンロードしたスクリプト・パッケージ (およびアドオン) を、アップロードします。リフレッシュ・ボタンを押して、パラメーターが正しくセットされることを確認してください
  2. 2.でエクスポートした VSP のパターン(xxx_vsp.py)を、pure コマンドにより、新環境にインポートします
    pure -h host_IP_address -u user_name  -p password -f xxx_vsp.py

    注意) すでに同じパターン名が存在している場合は、それを削除してから実施します

  3. 上記でインポートした VSP をクラウドにデプロイし、デプロイ完了後、動作確認を実施します

3. VM のタイムゾーン設定変更

デプロイされる VM のタイムゾーンはデフォルトでは UTC となっています。VSP では、これを変更するためにスクリプト内で記述をする必要があります。(VAP では、必ずデフォルトの UTC となり変更できません。2012/07 現在)

データベース側では、タイムゾーンを JST (Japan Standard Time)に切り替えるには、データベース作成用のスクリプト内で次のように記述します。

図 10. DB2 側でのタイムゾーン変更
DB2 側でのタイムゾーン変更
図 10 のコード部分
#!/bin/sh
DB2="/opt/ibm/db2/V9.7/bin/db2“
su db2inst1 <<_EOF
#タイムゾーンの切り替え
echo -e "\nexport TZ=JST-9" >> ~/.bashrc
export TZ=JST-9
# DB2 を再起動する
$DB2 +p "STOP DATABASE MANAGER FORCE"
$DB2 +p "START DATABASE MANAGER"
# DB の作成~データのロードを行う処理を記述する
_EOF

WebSphere Application Server 側でタイムゾーンを JST に切り替えるには、WAS 側で最初に実行されるスクリプト内で次のように記述します

図 11. WebSphere Application Server 側でのタイムゾーン変更
WebSphere Application Server 側でのタイムゾーン変更
図 11 のコード部分
#!/bin/sh

# TimeZone を JST で動作するように設定する(デフォルトでは UTC)
su virtuser <<_EOF
echo -e "\nexport TZ=JST-9" >> ~/.bashrc
_EOF
export TZ=JST-9

# 環境変数(TZ)を引き継いで WAS を再起動
if [ $PROFILE_TYPE == "dmgr" ] ; then
  su virtuser $WAS_PROFILE_ROOT/bin/stopManager.sh
  su virtuser $WAS_PROFILE_ROOT/bin/startManager.sh
elif [ $PROFILE_TYPE == "default" ] ; then
  su virtuser $WAS_PROFILE_ROOT/bin/stopServer.sh server1
  su virtuser $WAS_PROFILE_ROOT/bin/startServer.sh server1
fi

4. DB2 のファイル・システム・サイズ増加

VSP の DB2 環境で大規模なデータ移行が必要な場合 (目安として 20GB 以上)、デフォルトのファイル・システムでは容量不足である場合があります。その場合、アドオンによりディスク追加を行い、該当のファイル・システムを拡張する事で対応します。

  1. 下のサンプル・コードを参考に、DB2 ファイル・システム(db2fs)を拡張するスクリプト・パッケージ(My Expand db2fs (my_expand_db2fs.zip) とする)を作成し、登録しておきます。
    cbscript.json
    [
     {
        "description": "",
        "command": "/bin/sh /tmp/my_expand_db2fs/expand_db2fs.sh",
        "log": "/tmp/my_expand_db2fs",
        "location": "/tmp/my_expand_db2fs",
        "timeout": 0,
        "keys": [
             {
                "scriptdefaultvalue": "${DB2_ESE.DISK_SIZE_GB}",
                "scriptkey": "STORAGE_GB",
                "scriptvalue": ""
             }
        ]
      }
    ]
    expand_db2fs.sh
    #!/bin/sh
    umount /dev/sde1
    pvcreate /dev/sde1
    vgextend db2vg /dev/sde1
    lvextend -L +$[${STORAGE_GB}-1]G /dev/db2vg/db2lv
    resize2fs /dev/db2vg/db2lv
  2. PureApplication System のワークロード・コンソールで「カタログ」→「アドオン」を選択し、ディスク追加のためのDefault add disk を選択し、必要に応じて複製利用します。(Default add disk をそのまま利用することも可能です。)
  3. 仮想システム・パターン・エディターにおいて、DB2 パートにアドオンから Default add disk (または、複製したアドオン)を配置します。 プロパティーとして、DISK_SIZE_GB = 10 を、追加したいファイル・システムの容量に変更し、MOUNT_POINT = temp_mp と指定します。(図 12)
  4. 1. で作成したスクリプト・パッケージ(My Expand db2fs)を DB2 パートにドラッグ & ドロップします。
    図 12. DB2 ファイル・システムの拡張方法(100GB 追加する例)

上記のアドオンおよびスクリプト・パッケージを実装した上でデプロイすることで、DB2 VSP インスタンスにおいて、/db2fs ファイル・システムを拡張した容量で使用することができます。 (df コマンドで確認できます)

5. 既存データベースからの表/データ移行

手入力あるいはツールによってセットアップされているなどの理由でデータベース作成およびデータロード用のスクリプトを作成することが難しい場合、セットアップ済みのデータベース環境をそのまま移行するスクリプトを作成することができます。

db2 backup を利用する方法

  1. セットアップ済み既存 DB からバックアップをとります。
    db2 backup db DB_name to backup_file_name compress
  2. バックアップ・ファイルからリストアするスクリプトを作成し、バックアップ・ファイルとともにパッケージ化します。
    db2 restore db DB_name from backup_file_name

注意) この方法では、バックアップ・ファイルをパッケージ化するため、スクリプト・パッケージが肥大化する傾向があります。また、この方法はプラットフォームに依存しており、例えばエンディアンの異なる IA Linux (リトル・エンディアン) と AIX (ビッグ・エンディアン) の間では互換性がありません。このような問題を回避するためには、次に示す db2move を利用します。

db2move を利用する方法

  1. 既存 DB から DDL を取得します
    db2look -d DB_name -a -e -l -x -f -td % -o DDL_file_name
  2. 既存 DB からデータを取得します
    db2move DB_name export -sn schema_name
  3. 生成列がある場合は、生成列を含む表を export します
    db2 export to table_name.ixf of ixf messages table_name.msg select * from table_name
  4. 下記のようなスクリプトを作成します
    図 13. db2move 使用法
    db2move 使用法
    図 13 のコード部分
    #!/bin/sh
    #初期設定
      DB2="/opt/ibm/db2/V9.7/bin/db2“
      DB2MOVE="/opt/ibm/db2/V9.7/bin/db2move“
      touch ログ・ファイル名
      touch ログ・ファイル名_2
      chmod 777 *.*
      chmod 777 /tmp/スクリプト・パッケージ名
      su db2inst1 <<_EOF_
    #DB の作成	
      $DB2 +p “create db DB 名 using codeset utf-8 territory JP \
      collate using identity pagesize 32 K”
    #DDL の実行
      $DB2 +p -td% -vf DDL ファイル名 -z ログ・ファイル名
    #外部キー制約がある場合、外部キー制約を外す
      $DB2 +p “connect to DB 名”
      $DB2 +p “alter table 表名 drop constraint 外部キー制約名”
    #データの import	
      $DB2MOVE DB 名 import -io insert
    #生成列を含む表がある場合、その表を削除
      $DB2 +p “drop table 表名”
    #生成列を含む表がある場合、その表を create/import
      $DB2 +p “import from 表名.ixf of ixf modified by identityignore \
      messages 表名_im.msg create into 表名”
    #外部キー制約または、生成列を含む表がある場合、DDL を再実行
    #  生成列がある場合、生成列を含む表を create/import
    #  外部キー制約がある場合、外部キー制約を再設定	
      $DB2 +p -td% -vf DDL ファイル名 -z ログ・ファイル名_2
      _EOF_
  5. 1~3 で取得した各種ファイルとスクリプトをパッケージ化し、スクリプト・パッケージを作成します

6. テスト済みの DB2 ドライバー利用

DB2 ドライバーは、PureApplication System が提供するものよりも、すでにアプリケーションでテスト済みのものを使いたい場合があります。VSP では、利用したい DB2 ドライバーをパッケージングすることにより、置換して利用することが可能です。

  1. テスト済みの DB2 ドライバー (db2jars.zip) をスクリプト・パッケージに含めます
  2. DB2 ドライバー導入用のスクリプトの中で、以下の処理を記述します
    # db2jar.zip をコピーしドライバー・ファイルを /opt/db2 directory に展開
    chmod 777 /tmp/スクリプト・パッケージ名/db2jars.zip
    mkdir /opt/db2
    chown virtuser:users /opt/db2
    cp $PWD/db2jars.zip /opt/db2
    sudo -u virtuser unzip -d /opt/db2 $PWD/db2jars.zip
  3. データソース作成用の wsadmin スクリプト内でクラスパスとして、展開した DB2 ドライバーを設定し、JDBC プロバイダーを作成します。(サンプル・コード参照)
    • non-XA データソース 作成用サンプル・コード:
      AdminTask.createJDBCProvider('[-scope Cell=' + cellName + ' -databaseType DB2
      -providerType "DB2 Universal JDBC Driver Provider"
      -implementationType "Connection pool data source"
      -name "DB2 Universal JDBC Driver Provider"
      -description "One-phase commit DB2 JCC provider"
      -classpath [/opt/db2/db2jcc.jar /opt/db2/db2jcc_license_cu.jar]]'
    • XA データソース 作成用サンプル・コード:
      AdminTask.createJDBCProvider('[-scope Cell=' + cellName + ' -databaseType DB2
      -providerType "DB2 Universal JDBC Driver Provider"
      -implementationType "XA data source"
      -name "DB2 Universal JDBC Driver Provider (XA)"
      -description "DB2 Universal JDBC Driver Provider (XA)"
      -classpath [/opt/db2/db2jcc.jar /opt/db2/db2jcc_license_cu.jar]]'

おわりに

ここまでご紹介した VAP/VSP 開発手法が、皆さんがクラウド環境上で仮想パターンを構成しデプロイし、ビジネス用途で実装する際のベスト・プラクティスとして、お役に立てば幸いです。

参考文献

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Information Management, WebSphere
ArticleID=826906
ArticleTitle=PureApplication System 仮想パターン構築の極意: 第 2 回 仮想パターン構築において役立つ手法 (その 1)
publish-date=09122013