2013年3月29日金曜日

JBossDataGridインストール

こんにちは、JBossテクニカルチームの大村です。

今回から昨年JBossファミリーに加わったJBoss Data Gridについてご紹介させていただきます。

JBoss Data GridはオープンソースデータグリッドプラットフォームのInfinispanをベースとする分散インメモリーデータグリッド製品です。

JBoss Data Gridについて

JBoss Data Gridには以下のような特徴があります。
  • スキーマレスなKVSで様々なデータを格納できます。
  • 簡単にノードの追加と削除が行える。データを分散して保持するため動的にスケールアップ、スケールダウンすることが可能です。
  • データ分散を行い、システムに障害が発生した場合にデータを保ちつづけるために十分なデータのコピーをクラスタ内に保ちつづけます。
  • ディスクやデーターベースを利用して永続化を行います。また、プロセスがメモリ不足になると自動でディスクへの書き出しを行います。
  • REST,Memcached,HodRod,自作のプロトコルをサポートするので、Javaに限定されず主要なWEBサイトやアプリケーションに使用できます。

今回はJBoss Data Grid6 スタートガイドを参考に、JBoss Data Gridのインストールとサンプルの実行を行ってみました。

JBossDataGridの導入

前提条件

JBoss Data Gridの実行には、Java6.0およびそれ以降のバージョンと互換性を持つJava仮想マシン(JVM)のみが必要です。RedHat環境ではOpenJDKの使用が推奨されています。

JBoss Data Gridのダウンロード

利用するモードによってダウンロードファイルが違います。
  • リモートクライアントサーバモード:JBoss Data Grid Server 6.X.X
  • ライブラリモード:JBoss Data Grid Library 6.X.X

インストール

ダウンロードしてきたファイルを希望の場所に展開するだけです。(以下、このディレクトリを$JDG_HOMEとします。)

JBoss Data Gridの実行

次のスクリプトを実行すると、JBoss Data Gridを実行できます。
    $JDG_HOME/bin/standalone.sh
短時間で起動することができました。

リモートクライアントサーバモードのCarMart

クイックスタートに記載されていたWebアプリケーションとして動作させるCarmartをリモートクライアントサーバモードで実行してみました。このサンプルはRDBの代わりにJBoss Data Gridを使用する簡単なWEBアプリケーションです。今回はJBossEAPにデプロイして実行しました。(クイックスタートには他のサンプルも存在しますが、今回はインストールしたDataGridサーバを使用するため、リモートクライアントモードのみを実施し、他のサンプルは省略しております。)

スタンドアロンファイルの設定

$JDG_HOME/standalone/configuration/standalone.xmlに追記します。
  1. extensionsタグの次に下記を追加しました。(赤字部分)
    ・・・・
    </extensions>
    <paths>
        <path name="temp" path="/tmp"/>
    </paths>
    <management>
    ・・・・
    
  2. infinispanサブシステムのタグ内に下記を追加しました。(赤字部分)
    ・・・・
    <cache-container name="local" default-cache="default">
        <local-cache name="default" start="EAGER">
            <locking isolation="NONE" acquire-timeout="30000" concurrency-level="1000" striping="false"/>
            <transaction mode="NONE"/>
        </local-cache>
        <local-cache name="memcachedCache" start="EAGER">
            <locking isolation="NONE" acquire-timeout="30000" concurrency-level="1000" striping="false"/>
            <transaction mode="NONE"/>
        </local-cache>
        <local-cache name="namedCache" start="EAGER"/>
        <local-cache name="carcache" start="EAGER" batching="false" indexing="NONE">
            <locking isolation="REPEATABLE_READ" striping="false"
       acquire-timeout="20000" concurrency-level="500"/>
            <eviction strategy="LIRS" max-entries="4"/>
            <file-store relative-to="temp" path="carstore" passivation="false"/>
        </local-cache>
    </cache-container>
    ・・・・
    
  3. 今回はアプリケーションサーバと同一マシンで起動したので、ポートが競合しないように、下記のようにPortオフセットを0から100に修正しました。(赤字部分)
    <socket-binding-group 
        name="standard-sockets" 
          default-interface="public" 
            port-offset="${jboss.socket.binding.port-offset:100}">
    

JBoss Data Gridサーバの起動

先ほどと同じようにJBoss Data Gridサーバを起動します。

JBossEAPサーバの起動

carmartサンプルをディプロイするアプリケーションサーバを起動します。

JBoss Data Gridサーバアドレスの指定

carmart/src/main/resources/META-INF/datagrid.propertiesの設定を行います。(今回はアプリケーションサーバと同一マシンで起動しPortオフセットに100を設定しているため、ポート番号を100増加させています。)
datagrid.address=localhost
datagrid.hotrod.port=11422

実行

デプロイを行い、アプリケーションの表示を行いました。
http://localhost:8080/carmart-quickstart

新しい車の追加を行うと指定したキャッシュディレクトリ(/tmp)にファイルが一つ増えているのが確認できました。

JBoss Data Gridを利用しているのかを確認するためにJBoss Data Gridサーバのみを停止してみました。

車の一覧が表示されなくなってしまいました!!

このサンプルはcarmartアプリケーション起動時に1度だけJBoss Data Gridキャッシュを参照し、既存の車一覧をキャッシュに書き込んでいるので、JBoss Data Gridサーバを停止してしまうとキャッシュの参照ができなくなってしまうことが確認できました。このことからローカルのキャッシュではなく、リモートのData Gridサーバでデータを格納・取得していることがわかります。

今回はアプリケーションとJBoss Data Gridを1対1で利用するサンプルでしたが、次回からは他のサンプルを利用しながら、より詳細な内容をご紹介させていただきます。

0 件のコメント:

コメントを投稿