前回はHAクラスタの永続ストア用にJavaDBをインストールして稼動を確認するところまで行いました。
今回はJavaDBに必要なデータベースを作成してMQ側でJavaDBを永続ストアに使用するように設定してみましょう。

まずは、JavaDBに永続ストア用のデータベースを作成します。
ijツールを起動します。

・binディレクトリへ移動します。

cd <<Java DBインストールディレクトリ>>\bin

例:cd C:\software\JavaDB\bin

以下のコマンドを入力します。

ij

するとijが起動して、インタラクティブモードになります
C:\software\JavaDB\bin>ij
ij バージョン 10.3
ij>

ij>の次に以下を入力します。

connect 'jdbc:derby://localhost:1527/hastore;create=true';

#「;create=true」を忘れないでください

するとJavaDBにhastoreというデータベースが作成されます。
以後、hastoreというデータベースに接続することができるようになります。

次に、MQ側の設定を行いましょう。
まずはインスタンスの作成です。今回はHAクラスタ環境として、配下に3つのブローカインスタンスが稼動するように
設定してみたいと思います。

[MQBrokerインスタンスの作成]
以下のコマンドを使って、3つのインスタンスを作成/起動します。
#存在しないインスタンス名で起動すると新規でインスタンス定義が作成されます

imqbrokerd -name broker1 -port 7676
imqbrokerd -name broker2 -port 7677
imqbrokerd -name broker3 -port 7678

作成されたインスタンス定義はMQ_VAR_HOME以下に作成されます。
#デフォルトではWindowsは<<インストールディレクトリ>>\mq\var\instances
#Unixでは/var/imq/instancesです。

まずは、C:\software\MQ4.1\mq\var\instances\broker1\props\config.properties
を編集します。ファイルの一番最後の部分に以下を追加します。
#Unixでは/var/imq/instances/broker1/props/config.properties

imq.brokerid=broker1
imq.persist.jdbc.derby.createdburl=
imq.cluster.ha=true
imq.persist.jdbc.dbVendor=derby
imq.persist.jdbc.derby.driver=org.apache.derby.jdbc.ClientConnectionPoolDataSource
imq.cluster.clusterid=mmdemohacluster
imq.persist.jdbc.derby.closedburl=
imq.persist.store=jdbc
imq.persist.jdbc.derby.opendburl='jdbc\:derby\://localhost\:1527/hastore'
imq.persist.jdbc.derby.property.databaseName=hastore

以下の部分は、MQがJavaDBを探しに行くURLになります。
MQとJavaDBが違うマシン上に存在する場合はlocalhostの部分をipアドレスなどに書き換えてください。

imq.persist.jdbc.derby.opendburl='jdbc:derby://localhost:1527/hastore'

同様に、C:\software\MQ4.1\mq\var\instances\broker2\props\config.properties
を編集します。ファイルの一番最後の部分に以下を追加します。
#Unixでは/var/imq/instances/broker2/config.properties

imq.brokerid=broker2
imq.persist.jdbc.derby.createdburl=
imq.cluster.ha=true
imq.persist.jdbc.dbVendor=derby
imq.persist.jdbc.derby.driver=org.apache.derby.jdbc.ClientConnectionPoolDataSource
imq.cluster.clusterid=mmdemohacluster
imq.persist.jdbc.derby.closedburl=
imq.persist.store=jdbc
imq.persist.jdbc.derby.opendburl='jdbc:derby://localhost:1527/hastore'
imq.persist.jdbc.derby.property.databaseName=hastore

broker3用
C:\software\MQ4.1\mq\var\instances\broker3\props\config.properties
を編集します。ファイルの一番最後の部分に以下を追加します。
#Unixでは/var/imq/instances/broker3/config.properties

imq.brokerid=broker3
imq.persist.jdbc.derby.createdburl=
imq.cluster.ha=true
imq.persist.jdbc.dbVendor=derby
imq.persist.jdbc.derby.driver=org.apache.derby.jdbc.ClientConnectionPoolDataSource
imq.cluster.clusterid=mmdemohacluster
imq.persist.jdbc.derby.closedburl=
imq.persist.store=jdbc
imq.persist.jdbc.derby.opendburl='jdbc:derby://localhost:1527/hastore'
imq.persist.jdbc.derby.property.databaseName=hastore

次に、MQが使用するJDBCドライバのライブラリをMQに追加します。
JDBCドライバなどの外部ライブラリを追加するフォルダが決まっています。

<<MQインストールフォルダ>>\mq\lib\ext

例:C:\software\MQ4.1\mq\lib\ext
#Unixでは/usr/share/lib/imq/ext
このフォルダに以下の3つのJARファイルをコピーしておいてください
・derby.jar
・derbyclient.jar
・derbytools.jar
#これらのjarファイルは<<JavaDBインストールディレクトリ>>\libにあります

一旦imqbrokerをシャットダウンしてください。

imqcmd shutdown bkr -b localhost:7676
imqcmd shutdown bkr -b localhost:7678
imqcmd shutdown bkr -b localhost:7679
管理者ID:admin
管理者パスワード:admin

シャットダウンが完了したら、全てのブローカを起動します。

imqbrokerd -name broker1 -port 7676 -tty
C:\software\MQ4.1\mq\bin>imqbrokerd -name broker1 -port 7676
[02/10/2007:12:32:08 JST]
==================================================================
Sun Java(tm) System Message Queue 4.1
Sun Microsystems, Inc.
バージョン:  4.1  (Build 36-e)
コンパイル:  Thu 07/26/2007

Copyright (c) 2007 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
==================================================================
Java ランタイム: 1.5.0_12 Sun Microsystems Inc. D:\jdk1.5.0_12\jre
[02/10/2007:12:32:08 JST]    IMQ_HOME=C:\software\MQ4.1\mq
[02/10/2007:12:32:08 JST] IMQ_VARHOME=C:\software\MQ4.1\mq\var
[02/10/2007:12:32:08 JST] Windows XP 5.1 x86 psq96026.Japan.Sun.COM (1 cpu) Administrator
[02/10/2007:12:32:08 JST] Java ヒープサイズ: 最大=194432k、現在=16256k
[02/10/2007:12:32:08 JST] 引数: -name broker1 -port 7676
[02/10/2007:12:32:08 JST] [B1060]: 持続データの読み込み中...
[02/10/2007:12:32:08 JST] プラグイン持続ストアの使用:
        version=410
        brokerid=broker1
        database connection url='jdbc:derby://localhost:1527/hastore'
        database user=not specified
[02/10/2007:12:32:08 JST] 警告 [B4239]: データベーステーブル MQVER41Cmmdemohacluster から持続ストアバージョンを読み込めませんでした:
java.sql.SQLException: [SELECT STORE_VERSION FROM MQVER41Cmmdemohacluster]: 表またはビュー 'MQVER41CMMDEMOHACLUSTER' は存在しません。
[02/10/2007:12:32:08 JST] [B1114]: 持続的ストアが新規に作成されます...
[02/10/2007:12:32:08 JST] データベーステーブル MQVER41Cmmdemohacluster を作成しています...
[02/10/2007:12:32:09 JST] データベーステーブル MQBKR41Cmmdemohacluster を作成しています...
[02/10/2007:12:32:09 JST] データベーステーブル MQSES41Cmmdemohacluster を作成しています...
[02/10/2007:12:32:09 JST] データベーステーブル MQPROP41Cmmdemohacluster を作成しています...
[02/10/2007:12:32:09 JST] データベーステーブル MQCREC41Cmmdemohacluster を作成しています...
[02/10/2007:12:32:09 JST] データベーステーブル MQCON41Cmmdemohacluster を作成しています...
[02/10/2007:12:32:09 JST] データベーステーブル MQCONSTATE41Cmmdemohacluster を作成しています...
[02/10/2007:12:32:09 JST] データベーステーブルのインデックス MQCONSTATE41CmmdemohaclusterIDX1 を作成しています...
[02/10/2007:12:32:09 JST] データベーステーブル MQDST41Cmmdemohacluster を作成しています...
[02/10/2007:12:32:10 JST] データベーステーブルのインデックス MQDST41CmmdemohaclusterIDX1 を作成しています...
[02/10/2007:12:32:10 JST] データベーステーブル MQMSG41Cmmdemohacluster を作成しています...
[02/10/2007:12:32:10 JST] データベーステーブルのインデックス MQMSG41CmmdemohaclusterIDX1 を作成しています...
[02/10/2007:12:32:10 JST] データベーステーブル MQTXN41Cmmdemohacluster を作成しています...
[02/10/2007:12:32:10 JST] データベーステーブルのインデックス MQTXN41CmmdemohaclusterIDX1 を作成しています...
[02/10/2007:12:32:12 JST] [B1039]: ブローカ "broker1@psq96026.Japan.Sun.COM:7676" の準備ができました。

#JavaDBに永続ストア用のスキーマ定義が存在しない場合は一回目の起動で作成してくれます。

imqbrokerd -name broker2 -port 7677 -tty
C:\software\MQ4.1\mq\bin>imqbrokerd -name broker2 -port 7677
[02/10/2007:12:33:08 JST]
==================================================================
Sun Java(tm) System Message Queue 4.1
Sun Microsystems, Inc.
バージョン:  4.1  (Build 36-e)
コンパイル:  Thu 07/26/2007

Copyright (c) 2007 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
==================================================================
Java ランタイム: 1.5.0_12 Sun Microsystems Inc. D:\jdk1.5.0_12\jre
[02/10/2007:12:33:08 JST]    IMQ_HOME=C:\software\MQ4.1\mq
[02/10/2007:12:33:08 JST] IMQ_VARHOME=C:\software\MQ4.1\mq\var
[02/10/2007:12:33:08 JST] Windows XP 5.1 x86 psq96026.Japan.Sun.COM (1 cpu) Administrator
[02/10/2007:12:33:08 JST] Java ヒープサイズ: 最大=194432k、現在=16256k
[02/10/2007:12:33:08 JST] 引数: -name broker2 -port 7677
[02/10/2007:12:33:08 JST] [B1060]: 持続データの読み込み中...
[02/10/2007:12:33:08 JST] プラグイン持続ストアの使用:
        version=410
        brokerid=broker2
        database connection url='jdbc:derby://localhost:1527/hastore'
        database user=not specified
[02/10/2007:12:33:10 JST] [B1039]: ブローカ "broker2@psq96026.Japan.Sun.COM:7677" の準備ができました。
[02/10/2007:12:33:10 JST] [B1071]: 確立されたクラスタコネクション : mq://129.158.34.120:7676/?instName=bro

imqbrokerd -name broker3 -port 7678 -tty
C:\software\MQ4.1\mq\bin>imqbrokerd -name broker3 -port 7678
[02/10/2007:12:34:07 JST]
==================================================================
Sun Java(tm) System Message Queue 4.1
Sun Microsystems, Inc.
バージョン:  4.1  (Build 36-e)
コンパイル:  Thu 07/26/2007

Copyright (c) 2007 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
==================================================================
Java ランタイム: 1.5.0_12 Sun Microsystems Inc. D:\jdk1.5.0_12\jre
[02/10/2007:12:34:07 JST]    IMQ_HOME=C:\software\MQ4.1\mq
[02/10/2007:12:34:07 JST] IMQ_VARHOME=C:\software\MQ4.1\mq\var
[02/10/2007:12:34:07 JST] Windows XP 5.1 x86 psq96026.Japan.Sun.COM (1 cpu) Administrator
[02/10/2007:12:34:07 JST] Java ヒープサイズ: 最大=194432k、現在=16256k
[02/10/2007:12:34:07 JST] 引数: -name broker3 -port 7678
[02/10/2007:12:34:07 JST] [B1060]: 持続データの読み込み中...
[02/10/2007:12:34:08 JST] プラグイン持続ストアの使用:
        version=410
        brokerid=broker3
        database connection url='jdbc:derby://localhost:1527/hastore'
        database user=not specified
[02/10/2007:12:34:09 JST] [B1039]: ブローカ "broker3@psq96026.Japan.Sun.COM:7678" の準備ができました。
[02/10/2007:12:34:10 JST] [B1071]: 確立されたクラスタコネクション : mq://129.158.34.120:7677/?instName=bro
[02/10/2007:12:34:10 JST] [B1071]: 確立されたクラスタコネクション : mq://129.158.34.120:7676/?instName=bro

ここでQK2を使って、HAのテストをしてみましょう。

テストシナリオ:
1.QK2からbroker1,broker2,broker3のクラスタリストへメッセージデータを送信し、コミットする。(宛先:キュー:testQ)
2.ブローカのログからどのブローカに自動作成宛先testQが作成されたかをチェックする
3.宛先が作成されたブローカをシャットダウン
4.QK2にてtestQを照会。データが失われていないかをチェック

1.QK2からbroker1,broker2,broker3のクラスタリストへメッセージデータを送信し、コミットする。(宛先:キュー:testQ)

その後、無事メッセージがストアされたかどうかをQK2の照会機能でチェックします。
メッセージが1つストアされているのがわかります。

2.ブローカのログからどのブローカに自動作成宛先testQが作成されたかをチェックする

今回はbroker1に作成されていました。

3.宛先が作成されたブローカをシャットダウン
broker1をシャットダウンします。

C:\software\MQ4.1\mq\bin>[02/10/2007:12:53:17 JST] [B1077]: すべてのコネクションに対して good-bye をブロードキャスト ...
[02/10/2007:12:53:17 JST] [B1078]: good-bye メッセージをフラッシュ中 ...
[02/10/2007:12:53:17 JST] [B1007]: プロトコル tcp(host = *, port=0, mode=dedicated) でサービス admin を停止
[02/10/2007:12:53:17 JST] [B1007]: プロトコル tcp(host = *, port=0, mode=dedicated) でサービス jms を停止
[02/10/2007:12:53:17 JST] JMX コネクタサーバー jmxrmi は正常に停止しました
[02/10/2007:12:53:17 JST] [B1048]: ブローカの停止が完了しました。

4.QK2にてtestQを照会。データが失われていないかをチェック
この状態で、testQを照会してみます。
数秒後に無事データが表示されました
#最初の接続先(=現在死亡)に接続を試みてタイムアウトしてからリコネクトする仕様。タイムアウト時間は
クライアント側のプロパティで変更可能)

ちなみに、broker2とbroker3のログを見てみると以下のように出ています。

broker2のログ

[02/10/2007:12:53:22 JST] [B1288]: ブローカ broker1 が indoubt です。監視を開始します
[02/10/2007:12:53:23 JST] [B1210]: HAMonitor は 1 indoubt ブローカを監視しています
[02/10/2007:12:53:23 JST] [B1214]: ブローカ broker1 が応答しません。継承を試みています
[02/10/2007:12:53:23 JST] [B1183]: Unsuspect broker1
[02/10/2007:12:53:23 JST] [B1184]: Unsuspected /129.158.34.120:7676 [brokerID=broker1, brokerSession=3003642973472664064] (seq#=0, ts=11
[02/10/2007:12:53:23 JST] [B1186]: broker1 へのハートビートを停止します
[02/10/2007:12:53:23 JST] [B1182]: ハートビートエンドポイント /129.158.34.120:7676 [brokerID=broker1, brokerSession=3003642973472664064]
[02/10/2007:12:53:23 JST] [B1216]: ブローカ broker1 のストアの継承を試みています
[02/10/2007:12:53:23 JST] [B1175]: このブローカはブローカ [brokerID=broker1, storeSession=5033077555344810240] を継承しようとしています
[02/10/2007:12:53:23 JST] [B1168]: 障害の発生したブローカ broker1 の継承ロックが取得されました (タイムスタンプ: 1191297203605)
[02/10/2007:12:53:23 JST] Taking over 0 local destinations from broker broker1: []
[02/10/2007:12:53:23 JST] Taking over 2 messages from broker broker1
[02/10/2007:12:53:23 JST] Taking over 0 transactions from broker broker1
[02/10/2007:12:53:23 JST] Taking over 0 remote transactions from broker broker1
[02/10/2007:12:53:23 JST] Taking over 1 store sessions from broker broker1: [5033077555344810240]
[02/10/2007:12:53:23 JST] [B1217]: ブローカ broker1 の継承が成功しました。そのブローカが所有するデータと状態情報を処理しています
[02/10/2007:12:53:23 JST] [B1218]: ブローカ broker1 からの 0 トランザクションを処理しています
[02/10/2007:12:53:23 JST] [B1297]: Processing 0 remote transactions from broker broker1
[02/10/2007:12:53:23 JST] [B1283]: 継承後に 0 のトランザクションを処理しています
[02/10/2007:12:53:23 JST] [B1221]: ブローカ broker1 からの 2 メッセージを処理しています
[02/10/2007:12:53:23 JST] [B1151]: 1 メッセージとともに送信先 ABC [キュー] を読み込み
[02/10/2007:12:53:23 JST] [B1152]: 送信先 ABC [キュー] の読み込み完了
[02/10/2007:12:53:23 JST] [B1196]: 送信先 ABC [キュー] で 1 メッセージを処理します
[02/10/2007:12:53:23 JST] [B1151]: 1 メッセージとともに送信先 testQ [キュー] を読み込み
[02/10/2007:12:53:23 JST] [B1152]: 送信先 testQ [キュー] の読み込み完了
[02/10/2007:12:53:23 JST] [B1196]: 送信先 testQ [キュー] で 1 メッセージを処理します
[02/10/2007:12:53:23 JST] [B1223]: broker1 の継承処理が完了しました
[02/10/2007:12:53:23 JST] [B1177]: ブローカ [brokerID=broker1, storeSession=5033077555344810240] のブロードキャスト継承が完了しました...

broker3のログ

[02/10/2007:12:53:17 JST] [B1072]: 終了したクラスタコネクション: mq://129.158.34.120:7676/?instName=broker1&brokerID=broker1&brokerSessionUID=300364297347266
[02/10/2007:12:53:17 JST] [B1180]: ブローカ
        Address = mq://129.158.34.120:7676/?instName=broker1&brokerID=broker1&brokerSessionUID=3003642973472664064&ha=true&storeSessionUID=503307755534481024
        StartTime = 1191296757814
        ProtocolVersion = 410
        HeartbeatHost = 129.158.34.120
        HeartbeatPort = 7676 を非アクティブにしました
[02/10/2007:12:53:22 JST] 警告 [B2122]: /129.158.34.120:7676 [brokerID=broker1, brokerSession=3003642973472664064] (seq#=219, ts=1191297195593, interval=2, l
[02/10/2007:12:53:22 JST] [B1288]: ブローカ broker1 が indoubt です。監視を開始します
[02/10/2007:12:53:23 JST] [B1178]: mq://129.158.34.120:7677/?instName=broker2&brokerID=broker2&brokerSessionUID=8923624683650101760&ha=true&storeSessionUID=7
[02/10/2007:12:53:23 JST] [B1178]: mq://129.158.34.120:7677/?instName=broker2&brokerID=broker2&brokerSessionUID=8923624683650101760&ha=true&storeSessionUID=7
[02/10/2007:12:53:28 JST] 警告 [B2122]: /129.158.34.120:7676 [brokerID=broker1, brokerSession=3003642973472664064] (seq#=219, ts=1191297195593, interval=2, l
[02/10/2007:12:53:34 JST] 警告 [B2122]: /129.158.34.120:7676 [brokerID=broker1, brokerSession=3003642973472664064] (seq#=219, ts=1191297195593, interval=2, l
[02/10/2007:12:53:40 JST] 警告 [B2122]: /129.158.34.120:7676 [brokerID=broker1, brokerSession=3003642973472664064] (seq#=219, ts=1191297195593, interval=2, l
[02/10/2007:12:53:44 JST] [B1210]: HAMonitor は 1 indoubt ブローカを監視しています
[02/10/2007:12:53:44 JST] [B1212]: ブローカ broker1 は、別のブローカが継承したので、監視されなくなります
[02/10/2007:12:53:44 JST] [B1183]: Unsuspect broker1
[02/10/2007:12:53:44 JST] [B1184]: Unsuspected /129.158.34.120:7676 [brokerID=broker1, brokerSession=3003642973472664064] (seq#=0, ts=1191297224555, interval
[02/10/2007:12:53:44 JST] [B1186]: broker1 へのハートビートを停止します
[02/10/2007:12:53:44 JST] [B1182]: ハートビートエンドポイント /129.158.34.120:7676 [brokerID=broker1, brokerSession=3003642973472664064] (seq#=0, ts=11912972

これらのログから、broker1のデータはbroker2が引き継いだことがわかります。
broker3はbroker1へのハートビートを一時的に停止します。

ここで、broker1を再立ち上げしてみましょう。
broker1のログ

[02/10/2007:13:00:54 JST] [B1039]: ブローカ "broker1@psq96026.Japan.Sun.COM:7676" の準備ができました。
[02/10/2007:13:00:54 JST] [B1185]: broker2 へのハートビートを開始します
[02/10/2007:13:00:54 JST] [B1181]: ハートビートエンドポイント /129.158.34.120:7677 [brokerID=broker2, brokerSession=892
[02/10/2007:13:00:54 JST] [B1179]: ブローカ
        Address = mq://129.158.34.120:7677/?instName=broker2&brokerID=broker2&brokerSessionUID=8923624683650101760&ha=t
        StartTime = 1191296753598
        ProtocolVersion = 410
        HeartbeatHost = 129.158.34.120
        HeartbeatPort = 7677 をアクティブにしました
[02/10/2007:13:00:54 JST] [B1071]: 確立されたクラスタコネクション : mq://129.158.34.120:7677/?instName=broker2&brokerID
[02/10/2007:13:00:54 JST] [B1185]: broker3 へのハートビートを開始します
[02/10/2007:13:00:54 JST] [B1181]: ハートビートエンドポイント /129.158.34.120:7678 [brokerID=broker3, brokerSession=475
[02/10/2007:13:00:54 JST] [B1179]: ブローカ
        Address = mq://129.158.34.120:7678/?instName=broker3&brokerID=broker3&brokerSessionUID=4756669128423250688&ha=t
        StartTime = 1191296744615
        ProtocolVersion = 410
        HeartbeatHost = 129.158.34.120
        HeartbeatPort = 7678 をアクティブにしました
[02/10/2007:13:00:54 JST] [B1071]: 確立されたクラスタコネクション : mq://129.158.34.120:7678/?instName=broker3&brokerID
[02/10/2007:13:00:54 JST] [B1178]: mq://129.158.34.120:7677/?instName=broker2&brokerID=broker2&brokerSessionUID=8923624
[02/10/2007:13:00:54 JST] [B1178]: mq://129.158.34.120:7678/?instName=broker3&brokerID=broker3&brokerSessionUID=4756669

broker2のログ

[02/10/2007:13:00:54 JST] [B1185]: broker1 へのハートビートを開始します
[02/10/2007:13:00:54 JST] [B1181]: ハートビートエンドポイント /129.158.34.120:7676 [brokerID=broker1, brokerSession=6431445240084190464] (seq
[02/10/2007:13:00:54 JST] [B1179]: ブローカ
        Address = mq://129.158.34.120:7676/?instName=broker1&brokerID=broker1&brokerSessionUID=6431445240084190464&ha=true&storeSessionUID=64
        StartTime = 1191297653011
        ProtocolVersion = 410
        HeartbeatHost = 129.158.34.120
        HeartbeatPort = 7676 をアクティブにしました
[02/10/2007:13:00:54 JST] [B1071]: 確立されたクラスタコネクション : mq://129.158.34.120:7676/?instName=broker1&brokerID=broker1&brokerSession

broker3のログ

[02/10/2007:13:00:54 JST] [B1185]: broker1 へのハートビートを開始します
[02/10/2007:13:00:54 JST] [B1181]: ハートビートエンドポイント /129.158.34.120:7676 [brokerID=broker1, brokerSession=64314452400
[02/10/2007:13:00:54 JST] [B1179]: ブローカ
        Address = mq://129.158.34.120:7676/?instName=broker1&brokerID=broker1&brokerSessionUID=6431445240084190464&ha=true&stor
        StartTime = 1191297653011
        ProtocolVersion = 410
        HeartbeatHost = 129.158.34.120
        HeartbeatPort = 7676 をアクティブにしました
[02/10/2007:13:00:54 JST] [B1071]: 確立されたクラスタコネクション : mq://129.158.34.120:7676/?instName=broker1&brokerID=broker1

broker1の再起動をトリガにbroker2とbroker3からbroker1へのハートビートチェックと接続が再開されたことがわかります。

次回は、永続ストアにSun Java System Application Server9.1with HADBに付属しているHADB(High Availability Database)をつかってDBの単一障害点を克服した構成を構築してみたいと思います。(まずはHADBのインストールからやってみます)

投稿されたコメント:

コメント
コメントは無効になっています。

This blog copyright 2009 by naokitakemura