Open MQ4.1を使ってみよう!第9回 MQ-HAクラスタの構成(JavaDBのインストール)
さて今回は、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クラスタの構成方法(続き)を説明したいと思います。
