日曜日 7 12, 2009
日曜日 7 05, 2009
OpenMQ/WebLogic JMSメッセージ管理ツールQBrowserのバージョン2.5.0をリリースしました。
変更概要は以下の通りです。
[ローカルメッセージ]
・メッセージをzip形式のファイルに保存することが可能。
・保存したローカルメッセージは、QBrowser共通フォーマットであるため、どのMQ用のQBrowserでも
使用可能(開いたり、ドロップしたりできる:OpenMQ⇔WebLogicなど)
・保存したメッセージファイルを任意の宛先にドロップ可能
・保存したメッセージを元に新規作成パネルを開く
・メッセージのコピー/ペースト(ローカルストア→任意宛先)
[ローカルストア]
・ローカルフォルダに紐づく、QBrowser内で利用可能な仮想宛先
・通常の宛先と同じように、以下が可能
- 通常宛先(Queue, Topic)からローカルストアへメッセージを転送(コピー)
- ローカルストアから通常宛先へメッセージを転送
・ローカルストアへ転送されたメッセージはファイルとして永続化。
・特定のTopicメッセージの受信をトリガに、メッセージを自動でローカルストアへコピーする設定が可能
(Topicタブ、ローカルストアタブを右クリック)
・ローカルストア内のメッセージをコピー/他の宛先へペースト
[javax.jms.StreamMessage, javax.jms.Messageサポート]
・送信、転送、閲覧が可能
・これらの情報を流用して新規作成パネルを開く
[送信パネル]
・TextMessageボディ/Userプロパティ/StreamMessage/MapMessageのString属性編集パネルに、テキストファイルをドラッグアンドドロップすると中身をパネルにコピー
[その他]
・進捗ダイアログウインドウの高速化/バッファリング改善
・キーショートカット機能追加
・メッセージ一覧情報を作成するときには、一覧に必要な情報以外は保持しない。
必要になった時点でオンデマンドでメモリに展開する。(メモリ節約)
金曜日 6 12, 2009
OpenMQ/WebLogic MQ用 JMSメッセージ管理ツール「QBrowserV2」のバージョン2.4.0をリリースしました。
メッセージパネル(編集、詳細)を中心にリニューアルしました。

以下からQBrowserV2_2.4.0をダウンロードしてください。詳しい使い方はZIPを解凍して出てくる「ForOpenMQ起動方法ReadMe.txt」と「ForWebLogic起動方法ReadMe.txt」をご覧ください。
変更概要は以下の通りです。
・MapMessage対応(入力、表示)
・メッセージパネルを表ベースにリニューアル(JMSヘッダ、ユーザプロパティ、MapMessage)
・Stringプロパティ選択時のエディタ画面
・その他BugFix
(詳しくはリリースノートをご覧ください)
金曜日 5 08, 2009
こんにちは。
5月の連休の合間を利用して、Myはうすが提供しているメッセージキュー管理ツールを更新してみました。今回のリリース(2.3.0)でWebLogic MQに対応しました。
以下からQBrowserV2_2.3.0をダウンロードしてください。詳しい使い方はZIPを解凍して出てくる「ForOpenMQ起動方法ReadMe.txt」と「ForWebLogic起動方法ReadMe.txt」をご覧ください。
UIはJIDE Common Layer Open Source Projectを使用しリニューアルしました。OSSのパワーを実感した開発の日々(正味3日)でした。。。
変更概要は以下の通りです。
・WebLogic MQに対応 (付属のrun_wls_mq.bat/run_wls_mq_for_default_install_location.batを使用)
・JIDE Common Layer(OSS:https://jide-oss.dev.java.net/)を使用し、UIをリニューアル
・完全国際化(日本語、英語)
[UI部変更]
・宛先コンボボックスにTOPIC名も表示
・メッセージテーブルをタブ化し、複数宛先を並行表示
・アイコンメニュー追加
[追加機能]
・TOPICサブスクライブ(購読)メニュー/ボタン追加
・サブスクライブ(購読)一時停止/再開機能
・メッセージテーブルの行を右クリック→選択メッセージ転送
・メッセージテーブルの行を右クリック→選択メッセージ削除
・宛先リスト更新機能(QBrowser外で追加されたものを出す)
・ルックアンドフィール動的変更メニュー
・メッセージ送信時、永続化モードと圧縮モード選択
[仕様変更]
・起動時にJMSサーバに接続出来ない場合、エラーダイアログボックスとヒントを表示
・使用中にJMSサーバとの接続が切れた場合、別スレッドでバックグラウンドで接続試行
・宛先名を選択すると、選択された宛先タブが表示される(タブがない場合作成)
・削除最適化/スピードアップ
・テーブル全選択時、「全て選択」が「選択解除」へ
・(2.2.0から)宛先名を空欄にしてsearchすると、現在の全宛先を対象に検索
[WebLogic MQ]
・宛先自動検索機能(キュー、トピック、分散キュー/分散トピックなど)
GPLv2ライセンスですので、ソースコード含めご自由にお使いくださいませ。
バグレポートなどご協力いただけると幸いです・・・
土曜日 4 18, 2009
こんにちは。キューデータ管理ツールQBrowserV2に少しだけ機能追加してみました。
久々の更新ということでバージョンはV2.2.0としました。
以下からQBrowserV2_2.2.0をダウンロードしてください。
[追加機能]
Browseボタンの右に「Search」ボタンを追加し、メッセージの検索機能を追加しました。

Searchボタンを押すと、メッセージ検索ウィンドウがポップアップします。検索したい宛先名と必要があればメッセージセレクタ文字列を入力して、OKボタンを押せば検索結果がメインウインドウに表示されます。メッセージセレクタはJMS仕様のMessageSelector構文を使用します(少しSQLに似ています)。メッセージセレクタ文字列を入力しないと指定された宛先のメッセージを全件出力します。

メッセージセレクタにちょっと取っ付きにくいという方のために、だいたいの構文を集めたテンプレートを付けています。また、セレクタ文字列を入力して検索すると、文字列が履歴としてテンプレートに入るようになっています。

[オマケ]
各種情報照会ウィンドウの文字ずれが出ないようにしてみました。もう少しすっきり見えると思います。


日曜日 11 09, 2008
以前ご紹介したキューデータ管理ツールQK2の後継ソフトウエアQBrowserV2をアップしました。
これまでのメッセージデータ操作機能に加えて、OpenMQ自体の管理・監視、任意のコマンド入力などが出来るようになりました。
対応するOpen MQ/SJS MQのバージョンは以下の通りです。
| Open MQのバージョン | サポートOK? |
| MQ3.7 | ○ |
| MQ4.0 | ○ |
| MQ4.1 | ○ |
| MQ4.2 | ○ |
| MQ4.3 | ○ |
※AS9.1V2(GlassFish V2)→MQ4.1がバンドルされています
[2009/04/18更新]
V2.2.0をリリースしました。変更点等についてはこちらをご覧ください。
まずは以下からダウンロードしてください。
ダウンロードしたQBrowserV2_43.zipを適当なフォルダに展開します。中から出てきたrun.batをダブルクリックするとQBrowserV2が起動します。

#QBrowserV2はまい・はうすが開発/提供する管理・テスト支援ツールのサンプルです。AS-ISでの提供となりますのでご了承願います。
#QBrowserV2 is a sample tool for queue data and broker administration/testing, not a Sun official tool. Please make sure that no warranty would be provided with the tool.
MQが起動しているかどうかを確認して(ログまたは、プロセスにて)から解凍した直下に出てくる、run.batをダブルクリックします(Windows環境の場合。UNIX環境ではrun.shを使用してください。)するとMQが正常に稼動していれば下のようなツールの画面が起動します。#javaがpathに入っているか確認してください
[リモートで稼動するMQへの接続方法]
・ローカルホスト/ポート番号7676以外で稼動するMQに接続したい場合は、run.batをnotepadなどで編集して、IPアドレスの部分をつなげたいMQの存在するマシンのIPアドレス、7676の部分を使用しているポート名に変更してください。例:java -Xms256m -Xmx512m -cp .\QBrowserV2_MQ43.jar;.\imq.jar;.\jms.jar QBrowserV2 -b 129.158.34.188 -p 7679
このツールの主な機能は以下になります。
・現在ブローカが管理している全てのキューをリストボックス中に表示
・特定のキューに入っているメッセージ一覧を表示
・メッセージ詳細表示&ダウンロード
・1件または複数選択しメッセージ削除
・新規メッセージ送信(送信回数指定可能、JMSプロパティ・ユーザプロパティも指定可能)
上記のQK2機能に追加して以下の機能が追加されました。
・照会コマンドメニューの追加
・宛先コマンドメニューの追加
・トランザクションメニューの追加
・コマンドメニューの追加
では、ご照会をば。
[新機能について]
・照会コマンドメニュー

- コネクションリスト
現在のブローカ上に接続されている全てのコネクションを一覧表示します。
どのくらい接続が張られているかを確認できます。

- サービスリスト
現在のブローカ上の全てのサービスを一覧表示します。
サービスが稼動しているかを確認できます。

- サービス詳細照会
jmsサービスの詳細情報を表示します。
- ブローカ詳細照会
ブローカの詳細プロパティ情報を表示します。

- ConfigPrinter
現在ブローカ中で有効になっているプロパティを全て表示します。
設定の詳細確認や反映確認に便利です。

・宛先コマンドメニュー

- 全宛先情報リスト
現在のブローカが保持している、全ての宛先(キュー、トピック)の情報を表示します。メッセージ数やUnAck数などを確認できます。

- 現在表示されている宛先詳細情報
現在、宛先窓に表示されている宛先の詳細情報を表示します。宛先の設定情報、メッセージの送信数などを確認できます。

- 現在表示されている宛先のパージ
現在、宛先窓に表示されている宛先中にある全メッセージをパージ(消去)します。
本当にパージするか聞いてくるのでパージしたい場合はOKボタンを押してください。
宛先の定義自体は破棄されません。

・トランザクションメニュー

- フィルタTxnリスト
ブローカが管理しているトランザクションのうち、指定したステータスのものだけを抽出して表示します。
たとえば、全てを表示すると非常にたくさんのトランザクションが表示されてしまう場合、しかかり中のINCOMPLETE状態のトランザクションのみ表示可能です。更新ボタンを押せば、同一コマンドを再実行してくれます。特定の状態のトランザクションを監視する場合更新ボタンを使えば、フィルタの再選択は必要ありません。


- 全トランザクションリスト
ブローカが管理している全てのトランザクションを表示します。
・コマンドメニュー

- コマンド入力ウインドウ
imqcmdをこのツールから入力可能です。次のような便利機能を実装しています。
1. 現在接続しているブローカを自動的にターゲットに設定
2. ユーザ名とパスワードを指定する必要なし(自動的にツールが補完します)
3. ドロップダウンリストで、現在宛先窓に表示されている宛先に対する様々なテンプレートを表示。テンプレートを選択するとコマンド入力フィールドに自動入力されます。


特定の宛先を消去(定義とデータ内容両方)したい場合は、このウインドウのテンプレートからdestroy dst...を選択すればOKです。
4. パフォーマンスメトリックコマンドを入力すると、結果を自動更新する(更新ボタンを押す必要なし)

自分が使っていてなんとなく欲しいなという機能を追加してみました。
(HermesJMSとはまた違った趣ですが・・・)
金曜日 10 10, 2008
日々進化を遂げているOpen MQですが、その最新版となるOpen MQ 4.3のプレリリース版が公開されています。以下のリンクよりダウンロード可能です。
https://mq.dev.java.net/4.3.html#download
使用感はOpen MQ4.1の頃とあまり変わってはいないのですが、大きな機能追加点は以下となります。
・Universal Message Service(UMS)機能の追加
・サポート対象の拡充 (AIX v6.1以上、Oracle 11g、Windows Vista、Windows Server 2008)
・HermesJMS統合 (汎用JMS管理GUIコンソール)
・STOMP(Streaming Text Oriented Messaging Protocol)プロトコル対応
興味深いのはUMS機能の追加ですね。モジュールを見てみたところブローカにhttpサーバ機能を持たせて、httpプロトコルが使えるならばどんなクライアントからもメッセージのやりとりが出来るようになる技術のようです。(間にアプリケーションサーバのインスタンスを立ち上げるような形ではない)
httpさえ扱えれば良いので、Cとか.Netはもちろんのこと、html-AJAXとかその他の技術から簡単にOpen MQにメッセージを投げたり/受け取ったりが出来るようになります。なお、httpリクエスト形式はRESTです。
こちらにサンプルがありますので、試してみると面白いと思います。大まかな説明はこちらを参照してください。
あと、こちらのブログで開発しておりますOpen MQ用管理ツールQK2なのですがその後結構アップデートしていますのでそのうち紹介できればと思っております。連休中に準備します・・・
火曜日 11 13, 2007
前回は設定済のHADBデータベースをMQ4.1の永続ストアとして使用する方法を説明しました。
今回は、1つのマシンだけではなく他のマシンにもHADBのノードを追加して可用性をアップしたいと思います。
前回までは1つのマシンにHADBのデータ冗長ユニット(DRU)を作成しました。こちらの構成ですと、ハードウエア障害が発生してマシンごとダウンしてしまった場合にHADBはデータベースとしてサービスを継続することができなくなります。このような状況になってもHADBのサービスを継続できるように以下の手順で他のマシンにHADBのノードを追加します。
1.他マシンにHADBをインストールする。(インストール手順は第11回で説明しています)
2.新しくHADBをインストールしたマシン上にHADBのノードを追加する
以下のコマンドを発行します。
-bash-3.00#cd /opt/SUNWappserver/appserver/hadb/4.5/bin
-bash-3.00# ./hadbm addnodes --spares=2 --hosts 129.158.34.187,129.158.34.187 hastore
Please enter the password for the database system user:***********
WARNING: The --dbpassword option is deprecated since it is insecure.
Using this option can compromise your password. Please use either the
Please enter the password for the admin system user:***********
Nodes 129.158.34.187,129.158.34.187 successfully added to database hastore.
※--spares=2の部分
スペアに指定できるノードの数は、全ノード数未満の数でかつ、偶数
(今回はhost1に2ノード、host2に2ノード、合計4ノードあるので、
2こまでのスペアを作成可能
3.HADBのステータスを確認してみる
-bash-3.00#cd /opt/SUNWappserver/appserver/hadb/4.5/bin
-bash-3.00# ./hadbm status hastore
Please enter the password for the admin system user:***********
Database Status
hastore HAFaultTolerant
これで、HADBのデータベースに新しくHADBノードが追加されました。
/hadbm get --all hastore
コマンドで、JDBC URLの部分に新しく追加されたノードがあるか確認してください。
さあ、これであなたのHADBデータベースは複数のマシンに分散され、障害への耐久性が飛躍的に向上しました!
以下のテストシナリオで、今回の構成がDBサーバの電源オフにも耐えられることを確認してみてください。
1.MQへデータの送受信を行う
2.DBサーバのうちどちらか1つの電源を切る/OSをシャットダウンするなどする
3.MQのキュー中にあるデータがきちんと残っていることを確認
なお、片方のDBサーバをシャットダウンするとHADBのステータスはFaultTolerantへ降格します。
(スペアを使い切った場合。スペアの数が十分にあればHAFaultTolerantのまま)
次回はCAPS(Sun Seebeyond)で、Sun Java System MQを使う方法を説明したいと思います。
金曜日 10 26, 2007
前回はHADB自体の設定を行いました。
今回はMQ側をHADBを使うように設定してみたいと思います。
MQ側のコンフィグ設定
1.HADBのJDBCURLを取得する
-bash-3.00# ./hadbm get --all hastore
Please enter the password for the admin system user:***********
2007-10-04 06:52:48.394 INFO hadbm get --all=true --quiet=false --version=false --yes=false --force=false --echo=false
Attribute Value
ConnectionTrace false
CoreFile false
DataBufferPoolSize 200
DataDeviceSize 1024
DevicePath /opt/SUNWappserver/hadb/4.4.3-6/device
EagerSessionThreshold 50
EagerSessionTimeout 120
EventBufferSize 0
HistoryPath /opt/SUNWappserver/hadb/4.4.3-6/history
InternalLogBufferSize 12
JdbcUrl jdbc:sun:hadb:129.158.34.188:15005,129.158.34.187:15045,129.158.34.188:15025,129.158.34.187:15065
LogBufferSize 48
MaxTables 1100
NumberOfDataDevices 1
NumberOfLocks 50000
NumberOfSessions 100
PackageName V4.4.3.6
PortBase 15000
RelAlgDeviceSize 128
SessionTimeout 1800
SQLTraceMode none
StartRepairDelay 20
StatInterval 600
SysLogFacility local0
SysLogLevel WARNING
2.これの以下の部分をNotepadなどにメモしておく
JdbcUrl jdbc:sun:hadb:129.158.34.188:15005,129.158.34.187:15045,129.158.34.188:15025,129.158.34.187:15065
3.config.propertiesに以下を設定
config.propertiesは、
<<MQインストールフォルダ>>\mq\var\instances\<<ブローカ名>>\\props
フォルダにあります。もし<<ブローカ名>>フォルダがまだ存在しない場合には以下のコマンドで
ブローカ定義を作ってください
#UNIXは
/var/imq/instances/ブローカ名/props
にあります。
コマンドの例
cd C:\software\MQ4.1\mq\bin
imqbrokerd -name broker1 -port 7676
config.properties中の最後の部分に以下を設定
imq.instanceconfig.version=300
imq.brokerid=broker1
imq.persist.store=jdbc
imq.persist.jdbc.dbVendor=hadb
# Replace 'server list' with your comma-separated list of servers.
imq.persist.jdbc.hadb.property.serverList=129.158.34.188:15005,129.158.34.187:15045,129.158.34.188:15025,129.158.34.187:15065
# Replace username.
imq.persist.jdbc.hadb.user=system
imq.persist.jdbc.hadb.needpassword=true
imq.persist.jdbc.hadb.password=adminadmin
・imq.persist.jdbc.hadb.property.serverListにはさきほどメモしておいたJDBCURLを「jdbc:sun:hadb:」を抜いた形で指定します。
broker2用
imq.instanceconfig.version=300
imq.brokerid=broker2
imq.persist.store=jdbc
imq.persist.jdbc.dbVendor=hadb
# Replace 'server list' with your comma-separated list of servers.
imq.persist.jdbc.hadb.property.serverList=129.158.34.188:15005,129.158.34.187:15045,129.158.34.188:15025,129.158.34.187:15065
# Replace username.
imq.persist.jdbc.hadb.user=system
imq.persist.jdbc.hadb.needpassword=true
imq.persist.jdbc.hadb.password=adminadmin
broker3用
imq.instanceconfig.version=300
imq.brokerid=broker3
imq.persist.store=jdbc
imq.persist.jdbc.dbVendor=hadb
# Replace 'server list' with your comma-separated list of servers.
imq.persist.jdbc.hadb.property.serverList=129.158.34.188:15005,129.158.34.187:15045,129.158.34.188:15025,129.158.34.187:15065
# Replace username.
imq.persist.jdbc.hadb.user=system
imq.persist.jdbc.hadb.needpassword=true
imq.persist.jdbc.hadb.password=adminadmin
4.<<MQインストールフォルダ>>\mq\lib\extにhadbjdbc4.jarをコピーする
コピー先例:C:\software\MQ4.1\mq\lib\ext
#Unixでは/usr/share/lib/imq/ext
hadbjdbc4.jarの格納場所は9.1withHADBの<<インストールディレクトリ>>\hadb\4.4.3-6\lib
例:
C:\Sun\AppServer91withHADB\hadb\4.4.3-6\lib
#UNIXでは
/opt/SUNWappserver/hadb/4.4.3-6/lib
5.Q4.1を起動します
C:\Sun\MQ4.1\mq\bin>imqbrokerd -name broker1 -port 7676 -tty
[22/9/2007:23:56:59 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
[22/9/2007:23:56:59 JST] ライセンス: Sun Java(tm) System Message Queue 4.1 Enterprise Edition
[22/9/2007:23:56:59 JST] IMQ_HOME=C:\Sun\MQ4.1\mq
[22/9/2007:23:56:59 JST] IMQ_VARHOME=C:\Sun\MQ4.1\mq\var
[22/9/2007:23:56:59 JST] Windows XP 5.1 x86 psq96026.Japan.Sun.COM (1 cpu) Administrator
[22/9/2007:23:56:59 JST] Java ヒープサイズ: 最大=194432k、現在=16256k
[22/9/2007:23:56:59 JST] 引数: -tty
[22/9/2007:23:56:59 JST] [B1203]: broker1 のブローカ ID から開始します
[22/9/2007:23:56:59 JST] [B1004]: 最小スレッド 1 および最大スレッド 1 と tcp [ 7676, 50, * ] を使用して portmapper サービスを開始します
[22/9/2007:23:56:59 JST] [B1060]: 持続データの読み込み中...
[22/9/2007:23:57:01 JST] プラグイン持続ストアの使用:
version=410
brokerid=broker1
database connection url=129.158.34.188:15005,129.158.34.188:15025
database user=system
[22/9/2007:23:57:01 JST] [B1170]: プラグイン持続ストアの自動作成が有効です
[22/9/2007:23:57:01 JST] 警告 [B4239]: データベーステーブル MQVER41Sbroker1 から持続ストアバージョンを読み込めませんでした:
java.sql.SQLException: [SELECT STORE_VERSION FROM MQVER41Sbroker1]: HADB-E-11701: Table mqver41sbroker1 not found
[22/9/2007:23:57:01 JST] [B1114]: 持続的ストアが新規に作成されます...
[22/9/2007:23:57:01 JST] データベーステーブル MQVER41Sbroker1 を作成しています...
[22/9/2007:23:57:02 JST] データベーステーブル MQBKR41Sbroker1 を作成しています...
[22/9/2007:23:57:02 JST] データベーステーブル MQSES41Sbroker1 を作成しています...
[22/9/2007:23:57:02 JST] データベーステーブル MQPROP41Sbroker1 を作成しています...
[22/9/2007:23:57:02 JST] データベーステーブル MQCREC41Sbroker1 を作成しています...
[22/9/2007:23:57:02 JST] データベーステーブル MQCON41Sbroker1 を作成しています...
[22/9/2007:23:57:02 JST] データベーステーブル MQCONSTATE41Sbroker1 を作成しています...
[22/9/2007:23:57:02 JST] データベーステーブル MQDST41Sbroker1 を作成しています...
[22/9/2007:23:57:02 JST] データベーステーブル MQMSG41Sbroker1 を作成しています...
[22/9/2007:23:57:02 JST] データベーステーブル MQTXN41Sbroker1 を作成しています...
[22/9/2007:23:57:02 JST] [B1041]: クラスタの初期化に成功しました。
[22/9/2007:23:57:02 JST] [B1004]: 最小スレッド 1 および最大スレッド 1 と tcp [ 0, 100 ] を使用して cluster_discovery サービスを開始します
[22/9/2007:23:57:02 JST] [B1136]: ストアードトランザクションの処理中
[22/9/2007:23:57:02 JST] [B1284]: 0 のクラスタトランザクションが PREPARED 状態のままですが、0 は COMMITTED 状態にあり、リモートブローカが完了するのを待っています
[22/9/2007:23:57:02 JST] 0 のリモートトランザクションのうち、0 が PREPARED 状態、0 が COMMITTED 状態にあります
[22/9/2007:23:57:02 JST] [B1013]: キューの自動作成が有効です
[22/9/2007:23:57:02 JST] [B1144]: デッドメッセージキューの作成中
[22/9/2007:23:57:02 JST] [B1158]: 管理者が送信先 mq.sys.dmq [キュー] を作成しました
[22/9/2007:23:57:03 JST] [B1239]: プラットフォーム MBean サーバーを使用します
[22/9/2007:23:57:03 JST] JESMF classes not present - JESMF support will not be enabled.
[22/9/2007:23:57:03 JST] JMX コネクタサーバー jmxrmi は URL service:jmx:rmi://psq96026/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc5AAtVbmljYXN0UmVmMgAADjEyOS4xNTAuMTU0LjI5AAAHJQAAAAAAAAAACB+VdgAAARUtuL/XgAAAeA== で正常に起動しました
[22/9/2007:23:57:04 JST] [B1004]: 最小スレッド 4 および最大スレッド 10 と tcp(host = *, port=0, mode=dedicated) を使用して admin サービスを開始します
[22/9/2007:23:57:04 JST] [B1227]: admin サービス接続認証に file ユーザーリポジトリを使用します
[22/9/2007:23:57:04 JST] [B1004]: 最小スレッド 10 および最大スレッド 1000 と tcp(host = *, port=0, mode=dedicated) を使用して jms サービスを開始します
[22/9/2007:23:57:04 JST] [B1227]: jms サービス接続認証に file ユーザーリポジトリを使用します
[22/9/2007:23:57:04 JST] [B1004]: 最小スレッド 1 および最大スレッド 1 と tcp [ 0.0.0.0/0.0.0.0:1832 ] を使用して cluster サービスを開始します
[22/9/2007:23:57:04 JST] [B1228]: クラスタの ping 間隔は 60 秒です
[22/9/2007:23:57:04 JST] [B1039]: ブローカ "imqbroker@psq96026.Japan.Sun.COM:7676" の準備ができました。
同様にbroker2とbroker3のインスタンスも起動します。
C:\Sun\MQ4.1\mq\bin>imqbrokerd -name broker2 -port 7677 -tty
C:\Sun\MQ4.1\mq\bin>imqbrokerd -name broker3 -port 7678 -tty
6.QK2などのツールにてテストします。
MQ稼動中に、HADBの片方のノードをストップさせるなど
可用性をテストしてみてください。
次回は、HADBのノードを別の物理マシンに追加してOSレベルまたはハードウエアでの障害に対応できるように
HADBを設定してみたいと思います。
月曜日 10 22, 2007
前回はHADBをマシンにインストールしてみました。今回はインストールしたHADB上にドメインとDBを作成して
HADBをFaultTorelant状態に持っていくまでを説明します。
(まだ、1つのマシンにしかノードは作成しません)
[参考:HADBの対障害ステータスについて]
以下の6つのステータスのどれかになります。
・HAfaultTolerant
・FaultTolerant
・Operational
・Non Operational
・Stopped
・Unknown
[各ステータスの説明]
・HAfaultTolerant
DBはフォールトトレラント(対障害状態)にあり、スペアノードがDRU(冗長ユニット)1つにつき最低1つあります。
スペアノードがあると、ノードのペアのうちどちらかが破壊されてもOperational状態に落ちずに
破壊されたノードの代わりにスペアノードが本ノードに「昇格」してサービスを続けます。
スペアを全て使ってしまった場合はHADBのステータスはFaultTolerantになります。
・FaultTolerant
DRUの全てのミラーノードのペアが正常に稼動している状態です。FaultTolerant状態ではどこかのノードに障害が発生するとペアを維持できなくなりますが、サービス自体には影響はありません。FaultTolerant状態で片方のノードに障害が起きた場合はHADBのステータスはOperationalとなります。
・Operational
ミラーノードのどちらか一方だけ稼動している状態です。この状態のまま稼動中のノード(既に相方を失っている)がクラッシュするとサービスが停止してしまいます。早急にFaultTolerantより上の状態に戻す必要があります。
・Non Operational
DRU間でノードのペアが丸ごとダウンしている状態です。この状態ではDBはサービスを行うことができません。
・Stopped
DB中で稼動しているノードが1つも存在しない状態です。DB起動前または、hadbm stopコマンドが完了するとこの状態になります。
・Unknown
状態が不明の場合です。
#今回の設定ですと同じマシンにDRUを2つインストールしてしまうので、HADBをインストールしたマシンがクラッシュするとHADBのサービスを継続することができなくなります。
マシンのクラッシュではなく、片方のノードのプロセス障害の場合はHADBは何ら問題なくサービスを提供することができます。
次回、他の物理マシンにもノードを追加して片方のマシンクラッシュに対応できる構成を説明します。
[設定概要]
0.マネージメントエージェントの起動
1.HADBドメインを作成
2.DBをドメイン中に作成
3.SQLでのテスト
0.MAがインストール・起動していなければインストールと起動
windows
cd C:\Sun\HADB\hadb\4.4.3-6\bin
ma -i ma.cfg
net start HADBMgmtAgent
solaris
cd /opt/SUNWappserver/hadb/4/bin
./ma-initd start
マネージメントエージェントとは、HADBの各ノードの管理と監視を行うプロセスです。hadbmコマンドを発行する場合はMAを起動しておく必要があります。
1.マネージメントドメインの作成
windows
hadbm createdomain --adminpassword=adminadmin localhost
solaris
./hadbm createdomain --adminpassword=adminadmin 129.158.34.188
マネージメントドメインはどのホストにDBノードを載せることができるかを管理しています。ノードを作成したい全てのホスト名/IPアドレスがマネージメントドメインに含まれている必要があります。(作成後にhadbm extenddomainコマンドでホストを増やすこともできます)
2.DBの作成
windows
hadbm create --devicesize 1024 --hosts testhost1,testhost1
solaris
./hadbm create --devicesize 1024 --hosts 129.158.34.188,129.158.34.188
--hostsには、HADBのノードをどのホスト(マシン)に作成するかを指定します。
今回は最初の設定ですので、同一マシンに2つのDRUを載せるように設定してみます。この場合は同じホスト名を2回、カンマで区切って指定します。(4つ指定したい場合は4つホスト名をカンマで区切って指定します)。ノードはかならず2以上の偶数で指定する必要があります。
-bash-3.00# ./hadbm create --devicesize 1024 --hosts 129.158.34.188,129.158.34.188
Please enter the password for the database system user:***********
Please retype the password for database system user:***********
WARNING: The --dbpassword option is deprecated since it is insecure. Using this option can compromise your password. Please use either the command prompt or the --dbpasswordfile option.
Please enter the password for the admin system user:***********
2007-09-22 15:59:48.145 INFO hadbm create --devicesize=1024 --hosts=129.158.34.188,129.158.34.188 --datadevices=1 --no-cleanup=false --no-clear=false --quiet=false --version=false --yes=false --force=false --echo=false --dbpassword=******
2007-09-22 16:00:03.322 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hadb.data-0.1 for node hadb:1
2007-09-22 16:00:03.323 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hadb.noman.1 for node hadb:1
2007-09-22 16:00:03.323 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hadb.relalg.1 for node hadb:1
2007-09-22 16:00:03.324 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hadb.nilog.1 for node hadb:1
2007-09-22 16:00:03.331 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hadb.noman.0 for node hadb:0
2007-09-22 16:00:03.383 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hadb.data-0.0 for node hadb:0
2007-09-22 16:00:03.425 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hadb.nilog.0 for node hadb:0
2007-09-22 16:00:03.450 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hadb.relalg.0 for node hadb:0
2007-09-22 16:00:39.767 INFO Starting node hadb:1 at level firststart, config version 1, in order to start database
2007-09-22 16:00:39.796 INFO n:1 NSUP INF 2007-09-22 16:00:39.795 p:4417 Legal realtime priorities are 0 (lowest) to 59 (highest) set it to:29
2007-09-22 16:00:42.431 INFO Starting node hadb:0 at level firststart, config version 1, in order to start database
2007-09-22 16:00:42.492 INFO n:0 NSUP INF 2007-09-22 16:00:42.491 p:4420 Legal realtime priorities are 0 (lowest) to 59 (highest) set it to:29
Database hadb successfully created and started.
db名をhadbで作成する場合
./hadbm create --devicesize 1024 --hosts 129.158.34.188,129.158.34.188
db名をhastoreで作成する場合
-bash-3.00# ./hadbm create --devicesize 1024 --hosts 129.158.34.188,129.158.34.188 hastore
Please enter the password for the database system user:***********
Please retype the password for database system user:***********
WARNING: The --dbpassword option is deprecated since it is insecure. Using this option can compromise your password. Please use either the command prompt or the --dbpasswordfile option.
Please enter the password for the admin system user:***********
2007-09-22 16:11:13.303 INFO hadbm create --devicesize=1024 --hosts=129.158.34.188,129.158.34.188 --datadevices=1 --no-cleanup=false --no-clear=false --quiet=false --version=false --yes=false --force=false --echo=false --dbpassword=****** hastore
2007-09-22 16:11:28.130 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hastore.nilog.0 for node hastore:0
2007-09-22 16:11:28.130 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hastore.relalg.0 for node hastore:0
2007-09-22 16:11:28.131 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hastore.noman.0 for node hastore:0
2007-09-22 16:11:28.131 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hastore.data-0.0 for node hastore:0
2007-09-22 16:11:28.155 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hastore.noman.1 for node hastore:1
2007-09-22 16:11:28.156 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hastore.relalg.1 for node hastore:1
2007-09-22 16:11:28.198 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hastore.nilog.1 for node hastore:1
2007-09-22 16:11:28.250 INFO Initializing device /opt/SUNWappserver/hadb/4.4.3-6/device/hastore.data-0.1 for node hastore:1
2007-09-22 16:12:04.795 INFO Starting node hastore:0 at level firststart, config version 1, in order to start database
2007-09-22 16:12:04.833 INFO n:0 NSUP INF 2007-09-22 16:12:04.833 p:5055 Legal realtime priorities are 0 (lowest) to 59 (highest) set it to:29
2007-09-22 16:12:07.033 INFO Starting node hastore:1 at level firststart, config version 1, in order to start database
2007-09-22 16:12:07.060 INFO n:1 NSUP INF 2007-09-22 16:12:07.060 p:5060 Legal realtime priorities are 0 (lowest) to 59 (highest) set it to:29
Database hastore successfully created and started.
DBの作成が完了したら、HADBデータベースを起動します。
hadbm start データベース名
./hadbm start hastore
HADBデータベースを停止する必要がある場合は停止コマンドを入力します。
hadbm stop データベース名
./hadbm stop hastore
以下のコマンドでHADBの各種設定を照会することができます。
-bash-3.00# ./hadbm get --all hastore
Please enter the password for the admin system user:***********
2007-09-22 16:15:32.138 INFO hadbm get --all=true --quiet=false --version=false --yes=false --force=false --echo=false hastore
Attribute Value
ConnectionTrace false
CoreFile false
DataBufferPoolSize 200
DataDeviceSize 1024
DevicePath /opt/SUNWappserver/hadb/4.4.3-6/device
EagerSessionThreshold 50
EagerSessionTimeout 120
EventBufferSize 0
HistoryPath /opt/SUNWappserver/hadb/4.4.3-6/history
InternalLogBufferSize 12
JdbcUrl jdbc:sun:hadb:129.158.34.188:15005,129.158.34.188:15025
LogBufferSize 48
MaxTables 1100
NumberOfDataDevices 1
NumberOfLocks 50000
NumberOfSessions 100
PackageName V4.4.3.6
PortBase 15000
RelAlgDeviceSize 128
SessionTimeout 1800
SQLTraceMode none
StartRepairDelay 20
StatInterval 600
SysLogFacility local0
SysLogLevel WARNING
SysLogPrefix hadb-hastore
TakeoverTime 10000
HADB内に定義されているドメインを照会してみましょう。
-bash-3.00# ./hadbm listdomain
Please enter the password for the admin system user:***********
2007-09-22 16:19:01.400 INFO hadbm listdomain --quiet=false --version=false --yes=false --force=false --echo=false
Hostname Enabled? Running? Release Interfaces
testhost1.japan.sun.com Yes Yes V4-4-3-6 129.158.34.188
hadbm statusコマンドにて、hadbのサービスの状態を照会することができます。
-bash-3.00# ./hadbm status hastore
Please enter the password for the admin system user:***********
2007-09-22 16:20:30.024 INFO hadbm status --nodes=false --quiet=false --version=false --yes=false --force=false --echo=false hastore
Database Status
hastore FaultTolerant
./hadbm get --all hastoreの結果から、JDBCURLを取得する
以下の部分にノードのホスト名/IP:ポート番号が出力されています。
後ほど、MQ側でHADBに接続するときに必要になる文字列です。
JdbcUrl jdbc:sun:hadb:129.158.34.188:15005,129.158.34.188:15025
[HADBのテスト]
HADBが正常に設定され、DBが作成されてアクセス可能かをテストしてみます。
clusqlユーティリティを使用します。
[clusqlについて]
hadbmには、SQLコマンドインターフェイスとして、clusqlユーティリティが添付されています。
#Oracleで言うところのSQLPlus、Java DBで言うところのIJに相当するものです(詳細機能は違いますが)
hadbmユーティリティがあるのと同じディレクトリへ移動して以下のコマンドを発行します。
./clusql ホスト名:ポート番号(hadbm get --all hastoreで表示されたJDBCURL)
ユーザ名:system
パスワード(デフォルトを変更していない場合):adminadmin
-bash-3.00# ./clusql 129.158.34.188:15025
User name : system
Password :
SQL: select * from sysroot.alltables;schemaid tableid schemaname tablename
0 302 sysroot systbldsc
0 303 sysroot systbldef
0 304 sysroot systbt
0 308 sysroot syslnk
0 309 sysroot syshgh
0 310 sysroot sysacc
0 104 sysroot krnprocedures
0 105 sysroot krnnodes
0 109 sysroot krnnodegroupnodes
0 301 sysroot systbl
0 305 sysroot systbtatt
0 306 sysroot systbtdef
0 307 sysroot sysusr
0 311 sysroot sysnix
0 312 sysroot sysviw
0 313 sysroot sysviwcol
0 101 sysroot krntables
0 102 sysroot krnfragments
0 103 sysroot krnreplicas
0 106 sysroot krnredundancyunits
0 107 sysroot krnsites
0 108 sysroot krnnodegroupsHADB-I-11930: Selected 22 row(s)
これでHADBの設定は完了です。
管理ドメインが作成され、hastoreというDBがMQの永続ストア用に用意されました。
次回はMQ4.1をこのHADBを永続ストアに利用するように設定してみます。
金曜日 10 19, 2007
前回は永続ストアとしてJavaDBを利用してHAクラスタを構成しました。
今回はいよいよ本命のHADBを使って、DB部分の単一障害点(Single Point of Failure)をなくした構成をご紹介します。
[HADBについて]
HADBは元来Clustra Systems社が持っていた高可用性を実現するための技術で以下の特徴があります。
・データベースノードを複数マシン間に分散
・DRU(冗長ユニット)ごとにデータをレプリケートし、ノードのダウン時も全体としてのデータ保持とサービス提供を継続
・99.999%の高可用性を実現できることが実証されている
Oracle RAC同様、DBが分散しているマシンのうち1つが壊れてもDBとしての機能を維持し続ける仕様となります。
最新のSun Java System Application Server 9.1も高可用性バージョンがありApplication Server9.1 with HADBという名前でリリースされています。
これはセッションオブジェクトをHADBに保持し、障害時にセッション情報をロストしない機能を持っています。
さらにメモリを活用したデータ管理により純粋なインメモリレプリケーションと比較しても遜色の無いパフォーマンスを発揮することが実証されています。

詳細については、AppServer8.2高可用性ガイドをご覧ください。
http://docs-pdf.sun.com/820-0854/820-0854.pdf
http://jp.sun.com/products/software/javasystem/applicationserver/の特長②圧倒的な高可用性の実現
[HADBのダウンロード]
http://www.sun.com/download/products.xml?id=46df3223
のページからSun Java System Application Server 9.1 with HADBをダウンロードしてください。ダウンロードの手順はMQ本体のダウンロードと同じです。
今回はサンプルの構成として、ノードをSolaris10(Pentium)とSolaris10(AMD64)のマシンに分散して構成してみたいと思います。
今回はWindows版もダウンロードすることにします。
Solaris 9/10, x86 Platform - Sun Java System Application Server 9.1 with HADB
Sun Java System Application Server 9.1 with HADB - File based, English
Windows 2000 Server and Advanced Server SP4/Windows 2003 Server/Windows Vista (Business Edition)/Windows XP Professional SP1 Platform
- Sun Java System Application Server 9.1 with HADB
Sun Java System Application Server 9.1 with HADB, English
SolarisとRed Hatのインストーラには、File basedとPackge basedと2種類ありますがインストール方法が違うだけで基本的に同じモジュールがインストールされます(ディレクトリ構成がちょっと違います)。インストール時にOSのネイティブなパッケージインストール機能を使うのがPackage basedとなります。
#Solaris等のOSにHADBをインストールするためにはOSのパラメータ(共有メモリとセマフォの設定など)を多少変更する必要があります。
http://docs-pdf.sun.com/820-0854/820-0854.pdfのP35
HADBの設定の準備-前提条件と制限をご覧ください
それぞれsjsas_ee-9_1-solaris-i586.binと、sjsas_ee-9_1-windows.exeがダウンロードされますのでSolaris10ではインストーラが存在するディレクトリまで移動して
./sjsas_ee-9_1-solaris-i586.bin
Windowsではエクスプローラを開いてインストーラが存在するディレクトリまで移動して
sjsas_ee-9_1-windows.exeをダブルクリックしてください
Windows版もSolaris版も流れは一緒です。今回はWindows版でインストールの流れを説明します。
1.Welcome画面が表示されます。

2.ライセンス画面が表示されるので、Yesのラジオボタンにチェックを入れてNext>ボタンをおします。

3.インストール場所を聞いてくるので、適当な場所を入力後、Next>ボタンを押します。

4.コンポーネント選択画面になります。
図のように
Server Tier:
High Availability Database Server
Administration:
No Administration Tools
にチェックをつけて、Next>ボタンを押します。

5.どのJDKを 使用するのかを聞かれますので、Install Java 2 SDKのラジオボタンにチェックを入れます。
その後Next>ボタンを押します。

6.インストールオプションは今回は全部外しておきます。

7.インストールの準備が整いました。Install Now>ボタンを押してください。

8.インストールの進捗が表示されます。

9.インストールが完了すると完了画面が表示されるので、Finishボタンを押してください。

HADBのインストールは成功しましたか?
次回はHADBの構成方法(ドメイン、ノードの作成)を説明します。
月曜日 10 15, 2007
本編とはちょっと話がそれてしまいますが、今回は番外編ということで
Java DBに同梱されているDBテーブル定義を確認するためのdblookユーティリティの紹介をしたいと思います。
そのデータベースの中にどのようなテーブルが定義されているのか、カラムの属性は何なのかをお手軽に
チェックするにはもってこいのツールです。(これを使わなくてもシステムカタログを照会すれば情報は収集できます)
以下のコマンドを実行します。
#今回はOpen MQ4.1によってどんなテーブルが作成されているのかをチェックしてみます
C:\software\JavaDB\bin>dblook -d jdbc:derby://localhost:1527/hastore
localhost:1527/hastoreの部分は適宜変更してください
<<ホスト名/IPアドレス>>:<<ポート番号>>/<<データベース名>>
-- タイム・スタンプ: 2007-10-04 12:17:39.431
-- ソース・データベース: hastore
-- 接続 URL: jdbc:derby://localhost:1527/hastore
-- appendLogs: false-- ----------------------------------------------
-- 表用の DDL ステートメント
-- ----------------------------------------------CREATE TABLE "APP"."MQPROP41CMMDEMOHACLUSTER" ("PROPNAME" VARCHAR(100) NOT NULL, "PROPVALUE" VARCHAR (4096) FOR BIT DATA);
CREATE TABLE "APP"."MQCONSTATE41CMMDEMOHACLUSTER" ("MESSAGE_ID" VARCHAR(100) NOT NULL, "CONSUMER_ID" BIGINT NOT NULL, "STATE" INTEGER, "TRANS
CREATE TABLE "APP"."MQCON41CMMDEMOHACLUSTER" ("ID" BIGINT NOT NULL, "CLIENT_ID" VARCHAR(1024), "DURABLE_NAME" VARCHAR(1024), "CONSUMER" VARCH
CREATE TABLE "APP"."MQCREC41CMMDEMOHACLUSTER" ("RECORD" VARCHAR (4096) FOR BIT DATA NOT NULL, "CREATED_TS" BIGINT NOT NULL);
CREATE TABLE "APP"."MQSES41CMMDEMOHACLUSTER" ("ID" BIGINT NOT NULL, "BROKER_ID" VARCHAR(100) NOT NULL, "IS_CURRENT" INTEGER NOT NULL, "CREATE
CREATE TABLE "APP"."MQMSG41CMMDEMOHACLUSTER" ("ID" VARCHAR(100) NOT NULL, "MESSAGE" BLOB(1048576) NOT NULL, "MESSAGE_SIZE" INTEGER, "STORE_SE
CREATE TABLE "APP"."MQDST41CMMDEMOHACLUSTER" ("ID" VARCHAR(100) NOT NULL, "DESTINATION" VARCHAR (2048) FOR BIT DATA NOT NULL, "IS_LOCAL" INTE
CREATE TABLE "APP"."MQBKR41CMMDEMOHACLUSTER" ("ID" VARCHAR(100) NOT NULL, "URL" VARCHAR(100) NOT NULL, "VERSION" INTEGER NOT NULL, "STATE" IN
CREATE TABLE "APP"."MQTXN41CMMDEMOHACLUSTER" ("ID" BIGINT NOT NULL, "TYPE" INTEGER NOT NULL, "STATE" INTEGER, "AUTO_ROLLBACK" INTEGER NOT NUL
CREATE TABLE "APP"."MQVER41CMMDEMOHACLUSTER" ("STORE_VERSION" INTEGER NOT NULL, "LOCK_ID" VARCHAR(100));
-- ----------------------------------------------
-- 索引用の DDL ステートメント
-- ----------------------------------------------CREATE INDEX "APP"."MQTXN41CMMDEMOHACLUSTERIDX1" ON "APP"."MQTXN41CMMDEMOHACLUSTER" ("STORE_SESSION_ID");
CREATE INDEX "APP"."MQMSG41CMMDEMOHACLUSTERIDX1" ON "APP"."MQMSG41CMMDEMOHACLUSTER" ("STORE_SESSION_ID", "DESTINATION_ID");
CREATE INDEX "APP"."MQDST41CMMDEMOHACLUSTERIDX1" ON "APP"."MQDST41CMMDEMOHACLUSTER" ("STORE_SESSION_ID");
CREATE INDEX "APP"."MQCONSTATE41CMMDEMOHACLUSTERIDX1" ON "APP"."MQCONSTATE41CMMDEMOHACLUSTER" ("TRANSACTION_ID");
-- ----------------------------------------------
-- キー用の DDL ステートメント
-- ------------------------------------------------ primary/unique
ALTER TABLE "APP"."MQTXN41CMMDEMOHACLUSTER" ADD CONSTRAINT "SQL071002123210480" PRIMARY KEY ("ID");ALTER TABLE "APP"."MQSES41CMMDEMOHACLUSTER" ADD CONSTRAINT "SQL071002123209310" PRIMARY KEY ("ID");
ALTER TABLE "APP"."MQMSG41CMMDEMOHACLUSTER" ADD CONSTRAINT "SQL071002123210260" PRIMARY KEY ("ID");
ALTER TABLE "APP"."MQDST41CMMDEMOHACLUSTER" ADD CONSTRAINT "SQL071002123209950" PRIMARY KEY ("ID");
ALTER TABLE "APP"."MQCON41CMMDEMOHACLUSTER" ADD CONSTRAINT "SQL071002123209610" PRIMARY KEY ("ID");
ALTER TABLE "APP"."MQBKR41CMMDEMOHACLUSTER" ADD CONSTRAINT "SQL071002123209070" PRIMARY KEY ("ID");
ALTER TABLE "APP"."MQCONSTATE41CMMDEMOHACLUSTER" ADD CONSTRAINT "SQL071002123209750" PRIMARY KEY ("MESSAGE_ID", "CONSUMER_ID");
ALTER TABLE "APP"."MQPROP41CMMDEMOHACLUSTER" ADD CONSTRAINT "SQL071002123209450" PRIMARY KEY ("PROPNAME");
金曜日 10 12, 2007
Sun Download Centerから、
Solaris x86 SVR4 packages in self-extracting file, Englishを選択してダウンロードします。

ダウンロード方法は前回と同じです。
ダウンロードしてきたファイルの確認をします。
以下のようなファイルがダウンロードされているはずです。
-bash-3.00# ls
javadb-10_3_1_4-solaris-x86-pkg.sh
シェルを実行して解凍します。
-bash-3.00# ./javadb-10_3_1_4-solaris-x86-pkg.sh
Unpacking...
Checksumming...
Extracting...
Java DB 10.3.1.4 packages extracted into directory javadb-10.3.1.4
Done.
javadb-10.3.1.4というフォルダが作成されるのでそのフォルダへ移動します。
cd javadb-10.3.1.4/
次に、パッケージをインストールします。以下のコマンドを入力します。
pkgadd -d .
するとどのパッケージをインストールするか聞いてきますので、デフォルトのままEnterを押してください。
The following packages are available:
1 SUNWjavadb-client Java DB client
(i386) 10.3.1,REV=2007.08.15
2 SUNWjavadb-common Java DB common files
(i386) 10.3.1,REV=2007.08.15
3 SUNWjavadb-core Java DB core
(i386) 10.3.1,REV=2007.08.15
4 SUNWjavadb-demo Java DB demo
(i386) 10.3.1,REV=2007.08.15
5 SUNWjavadb-docs Java DB documentation
(i386) 10.3.1,REV=2007.08.15
6 SUNWjavadb-javadoc Java DB javadoc
(i386) 10.3.1,REV=2007.08.15Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]:
以降、以下には全部yと回答してください。
Do you want to install these conflicting files [y,n,?,q]
インストールが終了したら、javadbのインストール先ディレクトリへ移動します。
-bash-3.00# cd /opt/SUNWjavadb
-bash-3.00# ls
3RDPARTY NOTICE demo frameworks.DEPRECATED.txt lib
CHANGES.html RELEASE-NOTES.html docs index.html
LICENSE bin frameworks javadoc
Windowsの時と同様に、binディレクトリへ移動します。
cd bin
derby_common.shを編集して以下を追加します。
#一番上のコメントの後あたりでOKです
DERBY_OPTS=-Dderby.system.home=/opt/SUNWjavadb/demo/databases
こんな感じです
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
DERBY_OPTS=-Dderby.system.home=/opt/SUNWjavadb/demo/databases
if [ -n "$derby_common_debug" ] ; then
set -x
fi
環境変数にDERBY_HOME=/opt/SUNWjavadbをセットします。
-bash-3.00# DERBY_HOME=/opt/SUNWjavadb
-bash-3.00# export DERBY_HOME
ネットワークサーバーを起動します。
-bash-3.00# ./startNetworkServer &
Security manager installed using the Basic server security policy.
Apache Derby Network Server - 10.3.1.4 - (561794) started and ready to accept connections on port 1527 at 2007-10-10 03:53:48.338 GMT
Windowsの時と同じく、ijでデータベースにアクセスできるかテストしてみます。
サンプルデータベースtoursdbに接続します。
-bash-3.00# ./ij
ij version 10.3
ij> connect 'jdbc:derby://localhost:1527/toursdb';
ij>
SQL文を発行してみます。
ij> select * from airlines;
A&|AIRLINE_FULL |BASIC_RATE |DISTANCE_DISCOUNT |BUSINESS_LEVEL_FACTOR
------------------------------------------------------------------------------------------------
AA|Amazonian Airways |0.18 |0.03 |0.5
US|Union Standard Airlines |0.19 |0.05 |0.42 rows selected
きちんと照会されていればインストールOKです。
ijを終了する場合
ij> quit;
水曜日 10 10, 2007
前回は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のインストールからやってみます)
金曜日 10 05, 2007
さて今回は、MQ4.1から新たに導入された新機能であるHAクラスタ機能の使い方(構成方法)について説明したいと思います。
HAクラスタはHigh Availabilityクラスタの略で、高可用性クラスタのことです。
前回説明したコンベンショナル(=従来型)クラスタとどう違うかというと、以下の点で大きく異なっています
・あるブローカに障害が発生しても、MQブローカクラスタ側で内部的にフェイルオーバを行う。
送受信中に接続先ブローカがダウンする場合以外は、クライアントはブローカの障害を関知しない。
・サービスの継続性が得られるのみならず、コミット済のデータに関してはロストしない
以下の図を見てください。

コンベンショナルクラスタとは違って、全てのメンバブローカが同一の永続ストアを参照していることがわかります。
例えばクライアントがメッセージをbroker1に送付しコミットした後にbroker1に障害が発生した場合は、broker2またはbroker3にステートが移行されクライアントからは障害を検知しません。
今回は、JDKにも含まれるようになった噂のJava DBを使ってHAクラスタ構成を組んでみたいと思います。
#HAクラスタ構成は、JDBC永続化のみサポートしています。ファイル永続化はサポートしないので注意してください。
#Java DBにはOracle RACのようなクラスタ機能はありませんので、単一障害点になる可能性があります。高い可用性が要求される環境で利用される場合は、次回説明するHADBを永続ストアに使うか、Oracle RACなどの高可用性製品を使用してください。
[Java DBについて]
今回MQの永続ストアに使うJavaDBについて少し解説をしてみたいと思います。Java DBは元々IBMのCouldscapeという製品をオープンソースとしてApache DBプロジェクトにIBMが寄贈したものになります(製品としてのCloudscapeも存在しています)
Apache DBプロジェクトのサブプロジェクトとしてApache Derbyの名前で開発が進められています。
このDerby成果物のSunのサポートディストリビューションがJava DBという名前になります(中身はderbyです)。最近はJDK6などにもバンドルされており、Javaとセットで手軽に使えるRDBMSとなっています。
Java DB、結構機能が豊富で、ロールバック、バックアップリカバリ、XA完全対応はもちろんのこと、内部でトランザクションログもしっかりとっているのでロールフォワードリカバリまで出来る優れものです。もちろん本番環境での使用にも十分耐えます。(Sunは有償でこの製品のサポートも行っています)
[Java DBのインストール]
まずは永続ストアに使用するJavaDBをインストールしてみましょう。
現在JavaDBは色々なプロダクトにバンドルされているので、すでに皆様の環境にもインストールされているかもしれません。
・Java Enterprise System
・JDK6
・GlassFish
・Java Studio Creater2
これらをインストールしたことがある方はもしかしたら既にJavaDBが入っているかもしれません。
今回はSunのサイトからダウンロードするところから始めてみたいと思います。
こちらのページのオレンジ色のGet Itボタンを押します。
すると、MQのダウンロードの時のようにユーザ名とパスワードを聞いてきますので入力後、Loginボタンを押します。
Acceptラジオボタンにチェックを入れてから、ダウンロードしたい環境のモジュールの左側のチェックボックスにチェックを入れてオレンジ色の「Download Selected with Sun Download Manager」ボタンを押します。以後の流れはMQのダウンロードと同じです。
ダウンロードしたモジュールをダブルクリックします。

するとインストーラが起動します。

Nextボタンを押します。

インストール場所を聞いてくるのでインストールしたいフォルダを指定します。

以上で準備完了です。Installボタンを押してください。

インストールが完了するとFinish画面が出ますので、Finishボタンを押してください。
[Java DBの起動]
JavaDBには起動タイプが2通りあります。
・EMBEDDED
・NetworkServer
EMBEDDEDはローカル専用で、同一マシンからのアクセス専用になります。
NetworkServerはJava DBを外部マシン(DBサーバなど)に配置して、クライアントとネットワーク通信で接続できるタイプになります。
今回はNetworkServerモードで起動してみます。
コマンドプロンプトを起動して、インストールしたフォルダのbinディレクトリまで移動します。
cd <<Java DBインストールディレクトリ>>\bin
例:cd C:\software\JavaDB\bin
[お手軽な起動方法]
以下の起動コマンドを実行します
startNetworkServer
実行結果
C:\software\JavaDB\bin>startNetworkServer
DRDA_SecurityInstalled.I
Apache Derby Network Server - 2007-10-02 01:40:16.981 GMT に 10.3.1.4 - (561794) が開始され、ポート 1527 で接続を受け入れる準備ができました
今回はサンプルDBを使ってみたいので、ちょっと環境変数スクリプトを変更します。
<<インストールディレクトリ>>\bin\derby_common.batをnotepadなどで開きます。
set _USE_CLASSPATH=yesの下あたりに、以下の一行を追加します。
set DERBY_OPTS=-Dderby.system.home=C:\software\JavaDB\demo\databases
#c:\software\JavaDBは私の環境でのJavaDBインストール先です。ご使用の環境にしたがって適宜変更してください
derby_common.batへの変更を保存したら次のコマンドでJava DBを起動します。
C:\software\JavaDB\bin>startNetworkServer
[サンプルDBへの接続テスト]
Java DBにはSQLコマンドラインインターフェイスツールIJが付属しています。
#Oracleで言うところのSQLPlusみたいなもの
このIJを使って、Java DBが正常に稼動しているかどうかを見てみましょう。
・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/toursdb';
#「;」を忘れないでください
C:\software\JavaDB\bin>ij
ij バージョン 10.3
ij> connect 'jdbc:derby://localhost:1527/toursdb';
ij>
のように、ij>が返ってくれば接続成功です。
試しにSQLを入力してみましょう。
ij> select * from airlines;
A&|AIRLINE_FULL |BASIC_RATE |DISTANCE_DISCOUNT |BUSINESS_LEVEL_FACTOR |
-------------------------------------------------------------------------------------------------
AA|Amazonian Airways |0.18 |0.03 |0.5 |
US|Union Standard Airlines |0.19 |0.05 |0.4 |
2 行が選択されました
ij>
データがきちんと照会されました。
これで、Java DBがネットワークモードで稼動し、正しく稼動していることが確認できました。
ちょっと長くなってしまったので、次回にMQのHAクラスタの構成方法(続き)を説明したいと思います。
This blog copyright 2009 by naokitakemura





