WebSphere Application Server + CLUSTERPRO
- 検証報告書 -
2003 年 12 月 24 日版
目次
目次
1. 概要...3
2. 対象システム...4
2.1. ハードウェア構成...4
2.2. ソフトウェア構成...6
3. CLUSTERPRO の構築...7
3.1. OS のインストール...7
3.2. FAStT デバイスドライバ (qla2300.o)...8
3.3. Turbolinux 8 CLUSTERPRO SE...9
3.3.1. CLUSTERPRO インストール準備...9
3.3.2. CLUSTERPRO のインストール...9
3.3.3. クラスタの設定... 9
4. アプリケーションの設定...11
4.1. WebSphere Application Server のインストール...11
4.1.1. インストール概要... ... ...11
4.1.2. インストール手順... ... ...11
4.1.3. fixpack 5.0.2 適用手順...12
4.1.4. fixpack 5.0.2.1 適用手順...13
4.2. WAS の設定...14
4.3. WAS のクラスタ設定...15
4.4. DB2 のインストール...19
4.4.1. DB2 インストール準備...19
4.4.2. node1 への DB2 インストール...19
4.4.3. node2 への DB2 インストール...20
4.5. データベースの作成...21
4.6. DB2 のクラスタ設定...22
4.7. CLUSTERPRO の設定(アプリケーションの起動/停止)...29
5. クラスタ構成の検証...33
5.1. 検証項目...33
5.2. 検証内容...33
CLUSTERPRO 作業報告書
1. 概要
1.
概要
この文書は、
WebSphere Application Server (以降 WAS と記載) の動作環境を Turbolinux 8 CLUSTERPRO SE によるクラス
タ上に作成し、クラスタの動作検証を行った際の手順を記載するものである。また、
HttpSession オブジェクトの受け渡しに
DB を経由する際の設定よび検証結果を記載した。
作業場所
作業場所
郵便番号
:
103-8510
住所
:
東京都中央区日本橋 19-21
御担当者名
:
IBM Linux コンピテンシー・センター
連絡先
:
作業日
:
2003 年 11 月 10 - 12 日
作業者
作業者
会社名
:
日本アイ・ビー・エム株式会社
ターボリナックス株式会社
この文章は
WAS を CLUSTERPRO によりクラスタ化するための設定例を示すことにより、システムインテグレーション時の留
意事項をまとめたものであり、
WAS や CLUSTERPRO の動作保証をするものではありません。
CLUSTERPRO 作業報告書
2. 対象システム
2. 対象システム
2.1. ハードウェア構成
対象システムのハードウェア構成
項目
項目
内容
内容
メーカー名
日本
IBM
製品名
Xseries 440 8687-4RX
プロセッサ
CPU
Intel Xeon 1.60GHz x 4
チップセット
IBM XA-32
メモリ
4GB
ストレージ(内臓)
コントローラ
ServeRAID-4Mx
SCSI ディスク
Ultra160 36.4GB(10krpm) × 2(RAID1)
HBA
FAStT FC2-133 ホスト・バス・アダプター + FC ケーブル
グラフィクス
S3 Savage4 LT
ネットワークカード
Broadcom Vigil B5700 1000Base-T (bcm5700)
ストレージ(外付)
FAStT600 ストレージ・サーバ
コントローラ
Dual active 2GB RAID コントローラ
CLUSTERPRO 作業報告書
2. 対象システム
CLUSTERPRO 作業報告書
2. 対象システム
2.2. ソフトウェア構成
CLUSTERPRO 作業報告書
3. CLUSTERPRO の構築
3. CLUSTERPRO の構築
クラスタの構築手順を記載する。
3.1. OS のインストール
各サーバに次の
OS 製品をインストール。
製品名
製品名
Turbolinux Enterprise Server 8 powered by UnitedLinux ( SP2a 適用 Kernel 2.4.19-304 )
なお、インストール時に、インストールステップで表示される「インストールの設定」 画面で、「ソフトウェア」を選択して
「詳細な選択(
D)」をクリックし、[C/C++ Compiler コンパイラーとツール] を選択してインストール。
※
Turbolinux Enterprise Server 8 のインストールに関する詳細は、以下の URL 内 インストール手順書を参照。
URL : http://www.turbolinux.co.jp/products/cluster/cpro8/trial.html
●評価版ご利用時のご参考資料 「Turbolinux Enterprise Server 8 簡易インストール手順書」
ネットワークの設定
クラスタサーバ1
項目
項目
内容
内容
インターフェース
- eth0
パブリック
LAN
IP アドレス
10.7.11.10
ネットワーク
10.7.0.0 / 255.255.0.0
インターフェース
- eth1
インターコネクト
IP アドレス
192.168.1.1
ネットワーク
192.168.1.0 / 255.255.255.0
ホスト名
X440-1
クラスタサーバ2
項目
項目
内容
内容
インターフェース
- eth0
パブリック
LAN
IP アドレス
10.7.11.11
ネットワーク
10.7.0.0 / 255.255.0.0
インターフェース
- eth1
インターコネクト
IP アドレス
192.168.1.2
ネットワーク
192.168.1.0 / 255.255.255.0
ホスト名
X440-2
OS インストール後に Service Pack 2 をインストール。
# mount /media/cdrom
# cd /media/cdrom
# ./install_update_rpms.sh
CLUSTERPRO 作業報告書
3. CLUSTERPRO の構築
3.2. FAStT デバイスドライバ
(qla2300.o)
FAStT デバイスドライバを下記の URL よりダウンロードしインストールする。
http://www−6.ibm.com/jp/domino05/pc/download/download.nsf/DownloadSearchView/CC172E7816752E8C49256D
9F0030DDB8
ソフト名
FAStT ホスト・アダプター非フェイル・オーバー・デバイス・ドライバー
バージョン
6.06.00 (Linux)
ダウンロード・ファイル
25k9277.tgz
リリース日
9 月 11 日
ドライバのインストール
ドライバの作成
・ ドライバのバックアップ
# cd /lib/modules/2.4.19-64GB-SMP/kernel/drivers/scsi
# cp qla2300.o qla2300.o.orig
・ カーネルソースのディレクトリに移動
# cd /usr/src/linux
# make cloneconfig
# make dep
・ ドライバのコンパイル
# tar xvfz 25k9277.tgz
# cd i2x00-v6.06.00
# ./drvsetup
# ./libinstall
# cd i2x00-v6.06.00
# make all SMP=1 OSVER=linux
(SMP)
モジュールの指定
/etc/sysconfig/kernel 内の " INITRD_MODULES " に qla2300.o の記述を追加
<追加例>
INITRD_MODULES=”aic7xxx ext3
qla2300
”
ドライバの確認
# insmod ./qla2300.o
# less /proc/scsi/qla2300/n ← n はスロット数により変わる
ドライバのロード
# cp qla2300.0 /lib/modules/2.4.19-64GB-SMP/kernel/drivers/scsi/
# mk_initrd
カーネルパラメータの変更
/boot/grub/menu.lst に ”max_scsi_luns=128” を追加
CLUSTERPRO 作業報告書
3. CLUSTERPRO の構築
3.3. Turbolinux 8 CLUSTERPRO SE
各サーバに次の
CLUSTERPRO をインストール。
製品名
製品名
Turbolinux 8 CLUSTERPRO SE
3.3.1. CLUSTERPRO インストール準備
共有ディスクにクラスタ用のパーティションを作成する。
ここでは、
FAStT600 の設定および接続が完了しているものとする。
片方のマシンから
fdisk コマンドを実行し、CLUSTER パーティションおよび WAS 用、DB2 用パーティションを作成する。
# fdisk /dev/sdb
CLUSTER パーティション
/dev/sdb1
10MB
WAS 用切替パーティション
/dev/sdb5
5GB
DB2 用切替パーティション
/dev/sdb6
1GB
3.3.2. CLUSTERPRO のインストール
各サーバに
CLUSTERPRO のパッケージ clusterpro-2.1-1.3 をインストール。
# mount /media/cdrom
# cd /media/cdrom/Linux/server/SE/2.1
# rpm -ivh clusterpro-2.1-1.3.i386.rpm
各サーバに
SP2a 用 CLUSTERPRO SE アップデートモジュールを適用する。
※以下の
URL よりアップデートモジュールをダウンロード
ダウンロード先
http://www.turbolinux.co.jp/update/
3.3.3. クラスタの設定
クラスタの設定内容は以下の通り。
項目
項目
内容
内容
スーパークラスタ名
SuperCluster
ネットワークパーティション
ディスク
###NEC_NP1
COM ポート
-
サブクラスタ
サブクラスタ名
SubCluster
サーバ
x440-1 , x440-2
グループ
WAS
CLUSTERPRO 作業報告書
3. CLUSTERPRO の構築
フェイルオーバグループの設定
WAS フェイルオーバグループの設定内容は次の通り。
項目
項目
内容
内容
フェイルオーバグループ名
WAS
フェイルオーバ・ポリシー
x440-2 → x440-1
リソース
仮想
IP アドレス
10.7.11.13/255.255.0.0
ディスク (
was 用)
切替パーティション名
/dev/sdb5
切替パーティションマウントポイント名
/opt/WebSphere
切替パーティションサイズ
5GB
ファイルシステム
ext3
マウントオプション
rw
ディスク (
DB2 用)
切替パーティション名
/dev/sdb6
切替パーティションマウントポイント名
/home/db2inst1
切替パーティションサイズ
1GB
ファイルシステム
ext3
マウントオプション
rw
トレッキングツールでクラスタ情報を生成し、クラスタを構築する。
CLUSTERPRO 用 fstab は以下の通り。
/etc/clusterpro/fstabNP ###NEC_NP1 /dev/sdb1
SW sdb5 /dev/sdb5 /opt/WebSphere ext3 rw
SW sdb6 /dev/sdb6 /home/db2inst1 ext3 rw
WD ###NEC_NP1 /dev/sdb1
WD sdb5 /dev/sdb5
WD sdb6 /dev/sdb6
:fsckopt -y
:mnttimeout 300
※
Turbolinux 8 CLUSTERPRO SE のインストール / 設定 (スクリプトを除く) に関する詳細は、以下の URL 内
簡易設定手順書を参照。
URL : http://www.turbolinux.co.jp/products/cluster/cpro8/trial.html
CLUSTERPRO 作業報告書
4. アプリケーションの設定
4. アプリケーションの設定
各サーバに
WAS をインストールし、クラスタの設定を行う。
また本検証では、
WAS のセッション情報をデータベース (DB2) に格納し、クラスタによるフェイルオーバ時にセッション情報
が引き継がれることを確認した。ここでは
DB2 のインストール手順および、DB2 のクラスタ設定手順も併せて記載する。
4.1. WebSphere Application Server のインストール
各サーバに次の
WAS をインストール。
製品名
製品名
WebSphere Application Server V5.0
4.1.1. インストール概要
node1 でクラスタの WAS グループをアクティブにし、以下のディレクトリに WAS をインストールする。
インストール・ディレクトリ
/opt/WebSphere/AppServer/
※念のため、インストール後にインストール・ディレクトリのバックアップをとる。
(コピー、または
tar コマンドでのバックアップでも可)
CLUSTERPRO マネージャからグループの切替を行い、node2 で WAS グループをアクティブにし上記と同じ
インストール・ディレクトリへ再び
WAS をインストールする。
両方のサーバで
WAS が問題なく稼動することを確認する。
WAS の設定を行う。
4.1.2. インストール手順
・
CD-ROM ドライブに CD-ROM を挿入しマウントする。
# mount /media/cdrom
# cd /media/cdrom/Linuxi386
・ランチパッドを開始する。
# ./install
・ランチパッド言語を選択 → OK
・ランチパッドが始まったら、「製品のインストール」をクリック → インストール・ウィザードが起動
・ウィザードで使用する言語を選択 → 了解
・ウィザードの開始 → 次へ
・ソフトウェア・ライセンス情報の表示
同意する場合は「使用条件の条項に同意します」を選択 → 次へ
・システムレベルのチェック
・セットアップタイプの選択 → カスタムを選択 → 次へ
・コンポーネントの選択
WAS と IHS を選択。EmbeddedMessaging はチェックを外す
・インストール先ディレクトリの選択
デフォルト設定のディレクトリを変えたい場合は、参照をクリックして選択するかもしくは直接指定する。
今回の指定内容は以下の通り。
IBM WebSphere Application Server
/opt/WebSphere/AppServer
CLUSTERPRO 作業報告書
4. アプリケーションの設定
・ノード名、ホスト名の入力 → 次へ
・インストール内容の確認 → 次へ
・インストールの開始
・インストール終了後、製品登録画面 チェックを外す → 次へ
※後で「ファースト・ステップ」画面から製品登録が可能
・インストール・ウィザードの終了 → 終了
・ランチパッドの終了
・インストール後の確認
WAS の起動
# cd /opt/WebSphere/AppServer/bin
# ./startServer.sh server1
IHS の起動
# cd /opt/WebSphere/IBMHttpServer/bin
# ./apachectl start
http://<nodename>/snoop にアクセスし、画面が適切に表示されれば正しくインストールされている。
WAS の停止
# cd /opt/WebSphere/AppServer/bin
# ./stopServer.sh server1
IHS の停止
# cd /opt/WebSphere/IBMHttpServer/bin
# ./apachectl stop
※当動作検証では、ブラウザとして
Mozilla を使用しました。
※
WAS 5.0 では stopServer.sh スクリプトによるサーバーの停止が正常に動作しないことを確認致しました。
当現象は f
ixpack を適応後発生しておりません。
4.1.3. fixpack 5.0.2 適用手順
事前準備
・
fixpack はダウンロード、もしくは FTP で用意する。
ダウンロード先
http://www-1.ibm.com/support/docview.wss?rs=180&tc=SSEQTP&uid=swg24005012
・
WAS と IHS は停止させておく
(
stopServer.sh コマンドにてサーバーが正常終了しない場合には、kill コマンドにより全ての Java プロセス
を停止させる)
・
fixpack をダウンロードする為のディレクトリーを作成する
・作成したディレクトリに
fixpack をダウンロードし、展開する
・
updateWizard .sh を実行するコンソール上で setupcmdLine.sh を実行し、JAVA_HOME が設定されたことを確認
する (
setupcmdLine.sh は/opt/WebSphere/AppeServer/bin にあります。)
CLUSTERPRO 作業報告書
4. アプリケーションの設定
インストール(ウィザードを使用)
・
updateWizard.sh コマンドを実行し、updateWizard を立ち上げる。
・ウィザードの言語を選択 → OK
・
fixpack を当てる製品を選択(ここでは WebSphereApplicationServer V5.0) → 次へ
・
fixpack のインストールかアンインストール、もしくは修正のインストール、アンインストールを選択
(ここでは
fixpack のインストールを選択)→ 次へ
・
fixpack のあるディレクトリを指定 → 次へ
※デフォルト設定のディレクトリに無い場合には、「参照」を使用して指定する
・適用する
fixpack を選択する → 次へ
・要約画面 → 次へ
・インストールの開始
・インストール完了画面
メッセージを確認 → 終了
・
fixpack の確認方法:
WebSphere/AppServer/properties/version/historyディレクトリの event.history ファイルを確認する。
4.1.4. fixpack 5.0.2.1
適用手順
詳細な手順は、[
4.1.3. fixpack 5.0.2 の適用手順]を参照。
※必ず
fixpack 5.0.2 を適用後に適用してください。
・
fixpack 5.0.2 と同様に事前準備を済ませる。
ダウンロード先
http://www−1.ibm.com/support/docview.wss?rs=180&context=SSEQTP&q=&uid=swg240
05569&loc=en_US&cs=utf-8&lang=en
・ウィザードを立ち上げる
・
fixpack のインストール
・インストール後の確認
※
fixpack のインストールに失敗した場合、次回再インストール時には、失敗した部分だけをインストールしま
す。全てをインストールし直したい場合は、一度アンインストールしてからやり直してください。
CLUSTERPRO 作業報告書
4. アプリケーションの設定
4.2. WAS の設定
以下の
URL を指定して管理コンソールを起動。
http://<nodename>:9090/admin
JDBC プロバイダーの作成
・[リソース-
JDBC プロバイダー]画面にて新規ボタンをクリック
・
JDBC プロバイダーに ”DB2 Legacy CLI-based Type 2 JDBC Driver” を選択 → OK
・
JDBC プロバイダー設定の確認後 → OK
・保管
データ・ソースの作成
・[リソース-
JDBC プロバイダー- ”DB2 Legacy CLI-based Type 2 JDBC Driver” -データ・ソース]
画面にて新規ボタンをクリックし以下を設定する → OK
名前
SessionDS
JNDI 名
jdbc/Session
・保管
・[リソース-
JDBC プロバイダー- "DB2 Legacy CLI-based Type 2 JDBC Driver" -データ・ソース-
"SessionDS" -カスタム・プロパティ]画面にて以下の設定を行う
databaseName
session
・保管
J2C 認証データ・エントリーの作成
・[セキュリティ-
JAAS 構成-J2C 認証データ-]画面にて新規ボタンをクリックし以下を設定する → OK
別名
x440was/sessionAlias
ユーザー ID
db2inst1
パスワード
db2inst1
・保管
J2C 認証エイリアスの設定
・[リソース-
JDBC プロバイダー- ”DB2 Legacy CLI-based Type 2 JDBC Driver” -データ・ソース-
"SessionDS” ]画面にて以下の設定を追加
コンポーネント管理認証エイリアス
x440was/sessionAlias
・保管
セッション・パーシスタンスの設定
・[サーバー-アプリケーション・サーバー-
”server1” -Web コンテナー-セッション管理-分散環境
設定]画面にて”データベース”を選択 → 適応
・上記画面より[データベース]画面を開き以下の設定を行う → OK
データ・ソース JNDI 名
jdbc/Session
ユーザー ID
db2inst1
パスワード/管理パスワード
db2inst1
・保管
CLUSTERPRO 作業報告書
4. アプリケーションの設定
セッション・パーシスタンス用アプリケーションのインストール
・[アプリケーション-新規アプリケーションのインストール]画面より、今回のセッション引継ぎ検証で
使用する以下のサンプル・アプリケーションをインストールする。
アプリケーション名
sessionEAR.ear
※上記はセッション・パーシスタンスのテスト用に作成した独自のアプリケーションとなります。
※インストールの詳細手順は割愛いたします。
4.3. WAS のクラスタ設定
クラスタで使用する
WAS 用スクリプトを、以下のディレクトリにコピーする。
クラスタの WAS グループがアクティブなサーバから実行する。
スクリプト ディレクトリパス
/opt/WebSphere/AppServer/bin
WAS 用スクリプトスタート・スクリプト
startWAS.sh
ストップ・スクリプト
stopWAS.sh
モニタリング・スクリプト
wasCheck.sh
スクリプトのコピー後、全ての
WAS 用スクリプトに実行パーミッションを設定する。
※このスクリプトは
root ユーザで実行する。
CLUSTERPRO 作業報告書
4. アプリケーションの設定
○スクリプト
本検証で使用した
WAS 用スクリプトは以下の通り。
※当スクリプトは検証用に作成したものであり、実運用で使用する場合はシステムに合わせて修正を行う必要があります。
startWAS.sh #!/bin/ksh ############################################################### # Startin Shell for WebShere Application Server V5 Linux
# # #
############################################################### # WebSphere Install Directory
############################################################### WAS_BASE_HOME=/opt/WebSphere/AppServer IHS_HOME=/opt/WebSphere/IBMHttpServer #WAS_DMGR_HOME=/opt/WebSphere/DeploymentManager ###################################################################### . /home/db2inst1/sqllib/db2profile WAS_BASE_CFG=$WAS_BASE_HOME/config WAS_DMGR_CFG=$WAS_DMGR_HOME/config LOGDIR=$WAS_BASE_HOME/logs
echo "Stating IHS"
$IHS_HOME/bin/apachectl start
echo "---waiting for start to complete---" sleep 5
PSIHS2=`ps -ef | grep http` if [[ -n $PSIHS2 ]]; then echo "---IHS is started---" fi
echo "Starting WAS"
$WAS_BASE_HOME/bin/startServer.sh server1 echo "---waiting for start to complete---" while (( sv1 == sv1_tmp ))
do
sleep 5
sv1_tmp=`grep -e WSVR0001I $LOGDIR/server1/SystemOut.log | wc -l` echo "$sv1_tmp.\c"
done sv1=$sv1_tmp echo "---WAS is Started---"
※当スクリプトでは、冒頭にて
". /home/db2inst1/sqllib/db2profile" のように db2profile を実行しています。
本来
WAS5+Linux 環境においては、WAS 起動ユーザーの .bashrc にて上記コマンドを追記し実行する必要があり
ますが、今回のようにクラスター構成の場合、共有ディスク引継ぎ時に /home/db2inst1 ディレクトリのマウントと
/home/db2inst1/sqllib/db2profile の実行のタイミングが前後し実行に失敗する可能性があることを考慮し、
当コマンドを startWAS.sh スクリプトの中で実行させています。
db2profile が実行されていない状態では、WAS 起動時に "java.lang.UnsatisfiedLinkError" の Exception が出て
起動に失敗します。
CLUSTERPRO 作業報告書
4. アプリケーションの設定
stopWAS.sh #!/bin/ksh
############################################################### # Stoping Shell for WebShere Application Server V5 Linux
# # #
############################################################### # WebSphere Install Directory
############################################################### WAS_BASE_HOME=/opt/WebSphere/AppServer IHS_HOME=/opt/WebSphere/IBMHttpServer #WAS_DMGR_HOME=/opt/WebSphere/DeploymentManager ###################################################################### WAS_BASE_CFG=$WAS_BASE_HOME/config WAS_DMGR_CFG=$WAS_DMGR_HOME/config function kill_proc_ihs {
ihsprocs=`ps -ef | grep httpd | grep -v grep | awk '{print $2}'` for i in $ihsprocs; do
kill -9 $i done
}
function kill_proc {
procs=`ps -ef | grep java | grep -v grep | awk '{print $2}'` for i in $procs; do
kill -9 $i done
}
echo "Shutting Down IHS"
echo " ... waiting for shutdown to complete." $IHS_HOME/bin/apachectl stop
count=0
while [[ -n $PSIHS ]]; do PSIHS=`ps xgww | grep httpd`
echo "waiting for 5 seconds("`expr $count`")" sleep 5
count=`expr $count + 1` if [ $count -eq 3 ]; then
echo "Ten seconds and Server is still running"
echo " --- Killing IHS --- " kill_proc_ihs
echo " --- IHS TERMINATED --- " fi
done
echo "Shutting Down WAS"
echo " ... waiting for shutdown to complete." $WAS_BASE_HOME/bin/stopServer.sh server1 & PSWAS=`ps -ef | grep java | grep -v grep` count=0
while [[ -n $PSWAS ]]; do
PSWAS=`ps -ef | grep java | grep -v grep` echo "waiting for 10 seconds("`expr $count`")" sleep 10
count=`expr $count + 1` if [ $count -eq 7 ]; then
echo "One minutes and Server is still running" echo " --- Killing WAS --- "
kill_proc
echo " --- WAS TERMINATED --- " fi
CLUSTERPRO 作業報告書
4. アプリケーションの設定
done exit wasCheck.sh #!/bin/bash URL=$1 TIMEOUT=20 while : doGET -t ${TIMEOUT}s $URL >/dev/null 2>&1 if [ $? -eq 0 ]
then
echo "WebSphere is responding" else exit 1 fi sleep $TIMEOUT done
CLUSTERPRO 作業報告書
4. アプリケーションの設定
4.4. DB2 のインストール
HttpSession オブジェクトの受け渡しにデータベースを使用するため、DB2 をインストールしクラスタの設定を行う。
各サーバに次の
DB2 をインストール。
製品名
製品名
DB2 UDB Enterprise Server Edition V8.1
マシンは
node1、node2 とし、2台のマシンに DB2 をインストールする手順を記載する。
4.4.1. DB2 インストール準備
DB のインストール前に node1、node2 において、DB2 用のユーザとグループを作成する。
この時、両ノードでグループとユーザに関する
GID、UID を合わせる必要がある。
グループの作成例# groupadd -g 502 db2inst1
ユーザの作成例# useradd -m -u 501 -g db2inst1 db2inst1
パスワードの設定
# passwd db2inst1
4.4.2. node1 への DB2 インストール
node1 でグループをアクティブにする
CLUSTERPRO マネージャから node1 でグループをアクティブにする。
インストーラの起動
DB2 のメディアを CD-ROM ドライブに挿入し、次のコマンドを実行する。
# mount /media/cd rom
# cd /media/cdrom
# ./db2setup
GUI 画面での選択
DB2 のインストールは GUI で行う。
セットアップ画面では「製品のインストール」を選択する。設定する項目は以下の通り。
インストール製品
DB2 UDB Enterprise Server Edition V8.1
・概要 → 次へ
・ソフトウェアライセンスで「同意する」を選択 → 次へ
・インストールタイプで「標準」(デフォルト値)を選択 → 次へ
・インストールアクションで「
DB2 UDB Enterprise ServerEdition をこのコンピュータにインストール」
(デフォルト値)を選択 → 次へ
・
DAS ユーザで「新規ユーザ」を選択(デフォルト値)し、パスワードを入力する。 → 次へ
・インスタンスのセットアップで「
DB2 インスタンスの作成」(デフォルト値)を選択する → 次へ
・インスタンスの選択で「シングル・パーティション・インスタンス」(デフォルト値)を選択 → 次へ
・インスタンス所有ユーザで「既存ユーザ」を選択し、
useradd コマンドで作成したユーザを選択 → 次へ
・隔離ユーザで「既存ユーザ」を選択し、インスタンス所有ユーザで選択したユーザを再度選択する
→ 次へ
CLUSTERPRO 作業報告書
4. アプリケーションの設定
・連絡先リストで「ローカル - このシステムに通知先リストを作成する」を選択する → 次へ
・連絡先で「新規連絡先」(デフォルト値)を選択する → 次へ
・サマリーで 「完了」ボタンをクリックする
インストールの確認
GUI でインストールすると自動的に DB2 インスタンスが起動する。ps コマンドで DB2 のインスタンスプロセスを
確認する。
コマンド例
# ps ax | grep db2
4.4.3. node2 への DB2 インストール
node2 でグループをアクティブにする
CLUSTERPRO マネージャから node2 でグループをアクティブにする。
インストーラの起動
DB2 のメディアを CD-ROM ドライブに挿入し、次のコマンドを実行する。
# mount /media/cd rom
# cd /media/cdrom
# ./db2setup
GUI 画面での選択
DB2 のインストールは GUI で行う。
セットアップ画面では「製品のインストール」を選択する。設定する項目を以下の通り。
インストール製品
DB2 UDB Enterprise Server Edition V8.1
・概要 → 次へ
・ソフトウェアライセンスで「同意する」を選択 → 次へ
・インストールタイプで「標準」(デフォルト値)を選択 → 次へ
・インストールアクションで「
DB2 UDB Enterprise ServerEdition をこのコンピュータにインストール」
(デフォルト値)を選択 → 次へ
・
DAS ユーザで「新規ユーザ」を選択(デフォルト値)し、パスワードを入力する。 → 次へ
・インスタンスのセットアップで「
DB2 インスタンスを作成しない」を選択する → 次へ
・ 連絡先リストで「ローカル - このシステムに通知先リストを作成する」を選択する → 次へ
・ 連絡先で「新規連絡先」 (デフォルト値) を選択する → 次へ
・ サマリーで 「完了」ボタンをクリックする
/etc/services ファイルのコピー
CLUSTERPRO 作業報告書
4. アプリケーションの設定
4.5. データベースの作成
node1 で以下のコマンドを実行し、データベースを作成する。
CLUSTERPRO マネージャから node1 でグループをアクティブにしておく。
例
インスタンス名
db2inst1
DB 名
Session
データベースの作成
# su - db2inst1
# db2 create db Session
データベースの接続確認
# db2 connect db Session
接続ができた場合は、次のコマンドを実行しデータベースを停止する。
# db2 disconnect Session
# db2 terminate
# db2stop
CLUSTERPRO 作業報告書
4. アプリケーションの設定
4.6. DB2 のクラスタ設定
本検証ではクラスタで使用する
DB2 用スクリプトを、以下のパスにコピーする。
(両ノードのローカルディレクトリに置く)
スクリプト ディレクトリパス
/tmp/db2
DB2 用スクリプトスタート・スクリプト
start.sh
db2 インスタンスを起動する
[Usage] start.sh [
インスタンス名] 出力ログ:/tmp/db2start.log
ストップ・スクリプト
fstop.sh
db2 インスタンスを停止する
[Usage] start.sh [
インスタンス名][
データベース名] 出力ログ:/tmp/db2fstop.log
モニタリング・スクリプト
connect.sh
データベースに接続を試み
db2 インスタンスへのヘルスチェックを行う
[Usage] connect.sh [
インスタンス名][
データベース名] 出力ログ:/tmp/db2connect.log
・各スクリプトは
/tmp/以下に各スクリプトの結果を示すログファイルを出力する。
・スクリプトのコピー後、全ての
DB2 用スクリプトに実行パーミッションを設定する。
※このスクリプトは
root ユーザで実行する。
[注意点]
WAS を root で起動する場合、${DB2INST_HOME}/sqllib/db2profile を実行するように、WAS のスタートスクリプトに
記入してください。これを怠ると、アプリケーションがデータベースに接続することができません。
CLUSTERPRO 作業報告書
4. アプリケーションの設定
○スクリプト
本検証で使用した
DB2 用スクリプトは以下の通り。
※当スクリプトは検証用に作成したものであり、実運用で使用する場合はシステムに合わせて修正を行う必要があります。
start.sh #!/bin/bash #---# Name: start.sh #
# Function : Start database instance #---##### Variables #---##### TRUE=0 FALSE=1 # DB2 instance name DB2INSTANCE=$1 #db2 instance #DB2INSTANCE=db2inst1 #db2 instance #DB2INSTANCE=ldapdb2 #db2 instance # DB2 install directory #DB2DIR=/usr/IBMdb2/V7.1 DB2DIR=/opt/IBM/db2/V8.1 # LANG if necessary LANG=ja_JP.ujis
# Times to run db2start, specify more than 1 RETRY=1 # db2start,db2admin start retry #sleep time
SLEEPTIME=5 # period to sleep (sec) #Specify writable file name for logging #LOGFILE="/tmp/start.log" LOGFILE="/tmp/db2start.log" return_cd=0 ##### End of Variables ##### # Exit program function exit_prog {
exitcode=$1 # exit code echo "$2"
exit ${exitcode} }
# Find home dir of the instance find_homedir ()
{
username=$1 # is the user valid?
if ${DB2DIR?}/bin/db2usrinf -q ${username?} then
USERHOME=`${DB2DIR?}/bin/db2usrinf -d ${username?}` else
exit_prog 1 "DBI1131E The user ID ${username} is invalid." fi
return 0 }
# check db2nodes.cfg file entry check_db2nodes ()
{
CLUSTERPRO 作業報告書
4. アプリケーションの設定
FILE_HOST=`awk '{print $2}' ${USERHOME}/sqllib/db2nodes.cfg` # compare host & file host
if [ $HOST != $FILE_HOST ]; then
mv ${USERHOME}/sqllib/db2nodes.cfg ${USERHOME}/sqllib/db2nodes.cfg_org sed 's/'${FILE_HOST}'/'${HOST}'/g' \
${USERHOME}/sqllib/db2nodes.cfg_org > ${USERHOME}/sqllib/db2nodes.cfg rm -f ${USERHOME}/sqllib/db2nodes.cfg_org
chown ${DB2INSTANCE}.${DB2INSTANCE} ${USERHOME}/sqllib/db2nodes.cfg fi return 0 } ###### Main program ###### # check logfile /bin/touch ${LOGFILE} if [ $? -ne 0 ] then
exit_prog ${FALSE} "Cannot create logfile" fi
echo "" >>${LOGFILE}
echo " #######################################" >> ${LOGFILE} echo " #### $(/bin/date) START #### " >> ${LOGFILE}
echo " #######################################" >> ${LOGFILE} #################
# DB2 Instance #################
echo "Starting DB2 Instance "${DB2INSTANCE}"..." >> ${LOGFILE?} # check instance owner
find_homedir ${DB2INSTANCE} >>${LOGFILE} 2>&1 INSTHOME="${USERHOME?}"
# check db2nodes.cfg entry check_db2nodes
# instance start count=1
while [ $count -le ${RETRY} ] do
ABC="`su - ${DB2INSTANCE} -c \"source ${INSTHOME}/sqllib/db2cshrc >/dev/null 2>&1; . ${INSTHOME}/sqllib/db2profile >/dev/null 2>&1; db2start\"`"
if [ $? -ne 0 ] then
exit_prog 1 "su NG" >>${LOGFILE} 2>&1 fi
echo ${ABC} >>${LOGFILE} 2>&1
echo ${ABC}|grep SQL1063N >/dev/null 2>&1 result=$?
echo ${ABC}|grep SQL1026N >/dev/null 2>&1 result2=$? if [ ${result} -eq 0 ] then break fi if [ ${result2} -eq 0 ] then break fi count=`expr $count + 1` sleep ${SLEEPTIME} done #over=`expr $RETRY + 1` #if [ ${count} -eq ${over} ]
CLUSTERPRO 作業報告書
4. アプリケーションの設定
# echo "db2start failed" >>${LOGFILE} 2>&1 # return_cd=1
#if "activate db" is necessary #else
# for dbn in ${DBNAME} # do
# su - ${DB2INST1} -c "source ${INSTHOME}/sqllib/db2cshrc >/dev/null 2>&1; . ${INSTHOME}/sqllib/db2profile >/dev/null 2>&1; db2 activate database ${dbn}"
# done #fi ####### # DAS ####### #DASINST="`${DB2DIR}/instance/dasilist`" ##V7.2 #DASINST="`${DB2DIR}/instance/daslist`" ##V8.1 #if [ $? -eq 0 ]; then
# echo "Starting Administration Server "${DASINST?}"..." \ >> ${LOGFILE?} # if ${DB2DIR?}/bin/db2usrinf -q ${DASINST?} # then # USERHOME=`${DB2DIR?}/bin/db2usrinf -d ${DASINST?}` # fi # DASHOME="${USERHOME?}"
# su - ${DASINST?} -c "source ${INSTHOME}/sqllib/db2cshrc >/dev/null 2>&1; . ${INSTHOME}/sqllib/db2profile >/dev/null 2>&1;db2admin start" >>${LOGFILE} 2>&1
#fi ####### # EXIT #######
if [ ${return_cd} -eq ${FALSE} ] then
exit_prog 1 " ### Starting DB FAILED ### " >>${LOGFILE} fi
exit_prog 0 " ### Starting DB SUCCEEDED ### " >>${LOGFILE}
CLUSTERPRO 作業報告書
4. アプリケーションの設定
fstop.sh #!/bin/bash #---# Name: fstop..sh ## Function : Forcing stop Database #---########### Variables #---############ TRUE=0 FALSE=1 DB2INSTANCE=$1 #db2 instance V8.1 #DB2INSTANCE=db2inst1 #db2 instance V7.2 #DB2INSTANCE=ldapdb2 #db2 instance DB2DIR=/opt/IBM/db2/V8.1 #DB2DIR=/usr/IBMdb2/V7.1 LANG=ja_JP.ujis
RETRY=1 # db2start,db2admin start retry SLEEPTIME=5 # period to sleep #LOGFILE="/tmp/fstop.log" LOGFILE="/tmp/db2fstop.log" return_cd=0 ########### End of Variables ############ # Exit program function exit_prog {
exitcode=$1 # exit code echo "$2"
exit ${exitcode} }
# Find home dir of the instance find_homedir ()
{
username=$1 # is the user valid?
if ${DB2DIR?}/bin/db2usrinf -q ${username?} then
USERHOME=`${DB2DIR?}/bin/db2usrinf -d ${username?}` else
exit_prog 1 "DBI1131E The user ID ${username} is invalid." fi
return 0 }
### Main program ### /bin/touch ${LOGFILE}
[[ $? -ne 0 ]] && exit_prog ${FALSE} echo "" >>${LOGFILE}
echo " #######################################" >> ${LOGFILE} echo " #### $(/bin/date) F_STOP #### " >> ${LOGFILE} echo " #######################################" >> ${LOGFILE} ###############
# DB2 Instance ###############
echo "Force-Stopping DB2 Instance "${DB2INSTANCE}"..." >> ${LOGFILE?} # check instance owener
find_homedir ${DB2INSTANCE} >>${LOGFILE} 2>&1 INSTHOME="${USERHOME?}"
CLUSTERPRO 作業報告書
4. アプリケーションの設定
do
ABC="`su - ${DB2INSTANCE} -c \"source ${INSTHOME}/sqllib/db2cshrc >/dev/null 2>&1; . ${INSTHOME}/sqllib/db2profile >/dev/null 2>&1; db2stop force\"`"
if [ $? -ne 0 ] then
exit_prog 1 "su NG" >>${LOGFILE} 2>&1 fi
echo "${ABC}" >>${LOGFILE} 2>&1 echo $ABC|grep SQL1064N >/dev/null 2>&1 result=$?
echo $ABC|grep SQL1032N >/dev/null 2>&1 result2=$? if [ ${result} -eq 0 ] then break fi if [ ${result2} -eq 0 ] then break fi cnt=`expr ${cnt} + 1` sleep ${SLEEPTIME} done over=`expr ${RETRY} + 1` if [ ${cnt} -eq ${over} ] then
echo "Stopping database failed" >>${LOGFILE} 2>&1 # db2stop -kill
kill_res="`su - ${DB2INSTANCE} -c \"source ${INSTHOME}/sqllib/db2cshrc >/dev/null 2>&1; . ${INSTHOME}/ sqllib/db2profile >/dev/null 2>&1; db2stop -kill\"`"
echo "db2stop -kill " >>${LOGFILE} 2>&1 echo ${kill_res} >>${LOGFILE} 2>&1 echo ${kill_res}|grep 1064N >/dev/null 2>&1 kill_res_1=$?
echo ${kill_res}|grep 1032N >/dev/null 2>&1 kill_res_2=$?
# if db2stop -kill failed...
if [ ${kill_res_1} -ne 0 ] && [ ${kill_res_2} -ne 0 ] then
return_cd=1 fi
# Kill db2agent
ps -fu ${DB2INSTANCE} | grep db2agent | grep -v grep |while read procinfo # Read the process-info line do
# Get the process ID
pid=`echo ${procinfo?} | awk '{print $2}'`
cmd=`echo ${procinfo} | awk '{print $8}'` # command # If command is "db2agent", send a SIGKILL signal if expr "${cmd?}" : '\(.*db2agent.*\)' > /dev/null then
kill -9 ${pid?} 2>/dev/null fi
done
echo "Killed all db2agent" >>${LOGFILE} 2>&1 # Kill db2sysc
ps -fu ${DB2INSTANCE} | grep db2sysc | grep -v grep |while read procinfo # Read the process-info line do
# Get the process ID
pid=`echo ${procinfo?} | awk '{print $2}'`
cmd=`echo ${procinfo} | awk '{print $8}'` # get command name # If command is "db2sysc", send a SIGKILL signal
CLUSTERPRO 作業報告書
4. アプリケーションの設定
kill -9 ${pid?} 2>/dev/null fi
done
echo "Killed db2sysc" >>${LOGFILE} 2>&1 # Run ipclean
su - ${DB2INSTANCE} -c "source ${INSTHOME}/sqllib/db2cshrc >/dev/null 2>&1; . ${INSTHOME}/sqllib/db2profile >/dev/null 2>&1; ${DB2DIR}/bin/ipclean 1>/dev/null 2>&1" >/dev/null 2>&1
echo "Complete ipclean" >>${LOGFILE} 2>&1 fi ######## # DAS ######## #DASINST="`${DB2DIR}/instance/dasilist`" #V7.2 #DASINST="`${DB2DIR}/instance/daslist`" #V8.1 #if [ $? -eq 0 ]; then
# echo "Stopping Administration Server "${DASINST?}"..." \ >> ${LOGFILE?} # if ${DB2DIR?}/bin/db2usrinf -q ${DASINST?} # then # USERHOME=`${DB2DIR?}/bin/db2usrinf -d ${DASINST?}` # fi # DASHOME="${USERHOME?}"
# su - ${DASINST?} -c "source ${INSTHOME}/sqllib/db2cshrc >/dev/null 2>&1; . ${INSTHOME}/sqllib/db2profile >/dev/null 2>&1; db2admin stop" >>${LOGFILE} 2>&1
#fi ####### # EXIT #######
if [[ ${return_cd} -eq ${FALSE} ]] then
exit_prog 1 " ### Force-Stopping DB FAILED ### " >>${LOGFILE} fi
exit_prog 0 " ### Force-Stopping DB SUCCEEDED ### " >>${LOGFILE}
connect.sh #!/bin/bash
#---# Name: connect.sh
# *This program is called in mon.sh #
# Function : connecting Database # if succeed, print DBCONNECTOK #---DB2DIR=/opt/IBM/db2/V8.1 DB2INSTANCE=$1 DBNAME=$2 TIMEOUT=20 while : do # connect to database
su - ${DB2INSTANCE} -c "db2 connect to ${DBNAME} >/dev/null 2>&1" result=$?
if [ ${result} -eq 0 ] then
echo "DBCONNECTOK" >/tmp/db2connect.log 2>&1 else
exit 1 fi
sleep ${TIMEOUT} done
CLUSTERPRO 作業報告書
4. アプリケーションの設定
4.7. CLUSTERPRO の設定(アプリケーションの起動/停止)
起動
/停止用スクリプトを CLUSTERPRO マネージャから編集する。
※本検証では斜体文字部分を追記。
WAS、DB2 の起動/停止およびポーリングのスクリプトを定義。
start.bat #! /bin/sh #*************************************** #* START.BAT * #*************************************** if [ "$ARMS_EVENT" = "START" ] then if [ "$ARMS_DISK" = "SUCCESS" ] then armlog "NORMAL1" sleep 20 #start db2 armlog "start db2 1"if ! /tmp/db2/start.sh db2inst1; then armlog "start db2 error" -arm exit 1
fi
/opt/WebSphere/AppServer/bin/startWAS.sh >> /opt/WebSphere/AppServer/logs/test.log
armlog "Start WAS" -arm
armload WASC -M -FOV /opt/WebSphere/AppServer/bin/wasCheck.sh x440was/snoop
sleep 20
armlog "start db2 poling 1"
armload DB2POLING -M -FOV /tmp/db2/connect.sh db2inst1 Session armlog "start db2 poling 2"
if [ "$ARMS_SERVER" = "HOME" ] then armlog "NORMAL2" else armlog "ON_OTHER1" fi else
armlog "ERROR_DISK from START" fi
elif [ "$ARMS_EVENT" = "RECOVER" ] then
armlog "RECOVER" elif [ "$ARMS_EVENT" = "FAILOVER" ] then if [ "$ARMS_DISK" = "SUCCESS" ] then armlog "FAILOVER1" sleep 20 #start db2 armlog "start db2 1"
if ! /tmp/db2/start.sh db2inst1; then armlog "start db2 error" -arm exit 1
fi
/opt/WebSphere/AppServer/bin/startWAS.sh >> /opt/WebSphere/AppServer/logs/test.log
armlog "Start WAS" -arm
CLUSTERPRO 作業報告書
4. アプリケーションの設定
sleep 20
armlog "start db2 poling 1"
armload DB2POLING -M -FOV /tmp/db2/connect.sh db2inst1 Session armlog "start db2 poling 2"
if [ "$ARMS_SERVER" = "HOME" ] then armlog "FAILOVER2" else armlog "ON_OTHER2" fi else
armlog "ERROR_DISK from FAILOVER" fi else armlog "NO_ARM" fi armlog "EXIT" exit 0
CLUSTERPRO 作業報告書
4. アプリケーションの設定
stop.bat #! /bin/sh #*************************************** #* STOP.BAT * #*************************************** arm_rel_path() { while [ "$1" != "" ] doarmrelpath $1 > /dev/null 2>&1 relret=$?
if [ "$relret" = "0" ] then
armlog "KILL NO PROCESS" elif [ "$relret" = "1" ]
then
armlog "KILL SOME PROCESS" else
armlog "ARMRELPATH ERROR" fi shift done } arm_rel_mntpoint() { mntpoint=`armlsmnt -l $ARMS_RESOURCELIST` mntret=$? if [ "$mntret" = "0" ] then if [ "$mntpoint" != "" ] then arm_rel_path $mntpoint else
armlog "NO MOUNT POINT" fi
else
armlog "ARMLSMNT ERROR" fi } if [ "$ARMS_EVENT" = "START" ] then if [ "$ARMS_DISK" = "SUCCESS" ] then armlog "NORMAL1" armkill WASC
echo "stopWAS.sh Start for NOMAL" >> /opt/WebSphere/AppServer/logs/test.log /opt/WebSphere/AppServer/bin/stopWAS.sh >> /opt/WebSphere/AppServer/logs/test.log armlog "Stop WAS" -arm
#stop db2 poling armkill DB2POLING #stop db2 armlog "stop db2 1" /tmp/db2/fstop.sh db2inst1 armlog "stop db2 2" if [ "$ARMS_SERVER" = "HOME" ] then armlog "NORMAL2" else armlog "ON_OTHER1" fi
CLUSTERPRO 作業報告書
4. アプリケーションの設定
fi
elif [ "$ARMS_EVENT" = "FAILOVER" ] then
if [ "$ARMS_DISK" = "SUCCESS" ] then
armlog "FAILOVER1"
armkill WASC
echo "stopWAS.sh Start for FAILOVER" >> /opt/WebSphere/AppServer/logs/test.log /opt/WebSphere/AppServer/bin/stopWAS.sh >> /opt/WebSphere/AppServer/logs/test.log armlog "Stop WAS" -arm
#stop db2 poling armkill DB2POLING #stop db2 armlog "stop db2 1" /tmp/db2/fstop.sh db2inst1 armlog "stop db2 2" if [ "$ARMS_SERVER" = "HOME" ] then armlog "FAILOVER2" else armlog "ON_OTHER2" fi arm_rel_mntpoint else
armlog "ERROR_DISK from FAILOVER" fi else armlog "NO_ARM" fi armlog "EXIT" exit 0