Infinispan 5.3になってから、ずっとEmbedded Cacheしか使っていなかったのですが、6.0に向けた修正内容を見ていて、Remote Cacheでクエリが使えるようになりそうというところがちょっと気になりました。
Remote Query Design in Infinispan
https://community.jboss.org/wiki/RemoteQueryDesignInInfinispan
で、そういえばRemote Cacheをこのところ使ってないなぁと思って、最新安定版の5.3のServerを落として展開してみると…
$ unzip infinispan-server-5.3.0.Final-bin.zip
$ cd infinispan-server-5.3.0.Final/
なんか、5.2までとディレクトリ構成が全然違うんですが…。
$ ll 合計 336 drwxr-xr-x 8 xxxxx xxxxx 4096 Jun 25 17:14 ./ drwxrwxr-x 4 xxxxx xxxxx 4096 Aug 24 00:22 ../ -rw-r--r-- 1 xxxxx xxxxx 26530 Jun 25 17:14 LICENSE.txt -rw-r--r-- 1 xxxxx xxxxx 2617 Jun 25 17:14 README.txt drwxr-xr-x 3 xxxxx xxxxx 4096 Jun 25 17:14 bin/ drwxr-xr-x 4 xxxxx xxxxx 4096 Jun 25 17:14 client/ drwxr-xr-x 4 xxxxx xxxxx 4096 Jun 25 17:14 docs/ -rw-r--r-- 1 xxxxx xxxxx 277941 Jun 25 17:14 jboss-modules.jar drwxr-xr-x 3 xxxxx xxxxx 4096 Jun 25 17:14 modules/ drwxr-xr-x 2 xxxxx xxxxx 4096 Jun 25 17:14 rest/ drwxr-xr-x 5 xxxxx xxxxx 4096 Jun 25 17:14 standalone/
あ、ダウンロードはこちらから。
Downloads
http://www.jboss.org/infinispan/downloads
設定ファイルの場所も、全然違います。
$ ll standalone/configuration/
合計 236 drwxr-xr-x 2 xxxxx xxxxx 4096 Jun 25 17:14 ./ drwxr-xr-x 5 xxxxx xxxxx 4096 Jun 25 17:14 ../ -rw-r--r-- 1 xxxxx xxxxx 634 Jun 25 17:14 application-roles.properties -rw-r--r-- 1 xxxxx xxxxx 812 Jun 25 17:14 application-users.properties -rw-r--r-- 1 xxxxx xxxxx 14213 Jun 25 17:14 clustered-ccl.xml -rw-r--r-- 1 xxxxx xxxxx 16226 Jun 25 17:14 clustered-jdbc.xml -rw-r--r-- 1 xxxxx xxxxx 12748 Jun 25 17:14 clustered-storage-only.xml -rw-r--r-- 1 xxxxx xxxxx 13137 Jun 25 17:14 clustered-topology.xml -rw-r--r-- 1 xxxxx xxxxx 12797 Jun 25 17:14 clustered-two-nodes.xml -rw-r--r-- 1 xxxxx xxxxx 14656 Jun 25 17:14 clustered-xsite.xml -rw-r--r-- 1 xxxxx xxxxx 13395 Jun 25 17:14 clustered.xml -rw-r--r-- 1 xxxxx xxxxx 2231 Jun 25 17:14 keystore_client.jks -rw-r--r-- 1 xxxxx xxxxx 2243 Jun 25 17:14 keystore_server.jks -rw-r--r-- 1 xxxxx xxxxx 2695 Jun 25 17:14 logging.properties -rw------- 1 xxxxx xxxxx 836 Jun 25 17:14 mgmt-users.properties -rw-r--r-- 1 xxxxx xxxxx 10198 Jun 25 17:14 standalone-compatibility-mode.xml -rw-r--r-- 1 xxxxx xxxxx 11196 Jun 25 17:14 standalone-fcs-local.xml -rw-r--r-- 1 xxxxx xxxxx 10306 Jun 25 17:14 standalone-hotrod-multiple.xml -rw-r--r-- 1 xxxxx xxxxx 10253 Jun 25 17:14 standalone-hotrod-rolling-upgrade.xml -rw-r--r-- 1 xxxxx xxxxx 10462 Jun 25 17:14 standalone-hotrod-ssl.xml -rw-r--r-- 1 xxxxx xxxxx 11514 Jun 25 17:14 standalone-rcs-local.xml -rw-r--r-- 1 xxxxx xxxxx 10417 Jun 25 17:14 standalone.xml -rw-r--r-- 1 xxxxx xxxxx 953 Jun 25 17:14 truststore_client.jks -rw-r--r-- 1 xxxxx xxxxx 940 Jun 25 17:14 truststore_server.jks
起動スクリプトは、binディレクトリにstandalone.shもしくは.bat、そしてclustered.shもしくは.batとなっています。起動オプションで使用できる設定ファイルも指定できるようなのですが、デフォルトではそれぞれstandalone.xml、clusterd.xmlが該当します。
というか、設定ファイルの形式も5.2までと全然違うんですが…。
standalone/configuration/standalone.xml
<?xml version='1.0' encoding='UTF-8'?> <server xmlns="urn:jboss:domain:1.4"> <extensions> <extension module="org.infinispan.server.endpoint"/> <extension module="org.jboss.as.clustering.infinispan"/> <extension module="org.jboss.as.connector"/> <extension module="org.jboss.as.jdr"/> <extension module="org.jboss.as.jmx"/> <extension module="org.jboss.as.logging"/> <extension module="org.jboss.as.naming"/> <extension module="org.jboss.as.remoting"/> <extension module="org.jboss.as.security"/> <extension module="org.jboss.as.threads"/> <extension module="org.jboss.as.transactions"/> <extension module="org.jboss.as.web"/> </extensions> <management> 〜省略〜 </management> <profile> 〜省略〜 <subsystem xmlns="urn:infinispan:server:endpoint:5.3"> <hotrod-connector socket-binding="hotrod" cache-container="local"> <topology-state-transfer lazy-retrieval="false" lock-timeout="1000" replication-timeout="5000"/> </hotrod-connector> <memcached-connector socket-binding="memcached" cache-container="local"/> <rest-connector virtual-server="default-host" cache-container="local" security-domain="other" auth-method="BASIC"/> <websocket-connector socket-binding="websocket" cache-container="local"/> </subsystem> 〜省略〜 <subsystem xmlns="urn:infinispan:server:core:5.3" default-cache-container="local"> <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"/> </cache-container> <cache-container name="security"/> </subsystem> 〜省略〜 </profile> 〜省略〜 <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> <socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"/> <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/> <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"/> <socket-binding name="ajp" port="8009"/> <socket-binding name="hotrod" port="11222"/> <socket-binding name="http" port="8080"/> <socket-binding name="https" port="8443"/> <socket-binding name="memcached" port="11211"/> <socket-binding name="remoting" port="4447"/> <socket-binding name="txn-recovery-environment" port="4712"/> <socket-binding name="txn-status-manager" port="4713"/> <socket-binding name="websocket" port="8181"/> </socket-binding-group> </server>
この設定ファイルの書き方は…というか、Infinispan Serverって、JBoss As 7.2で動いてるんですか?
Infinispan Server
https://docs.jboss.org/author/display/ISPN/Infinispan+Server
設定ファイルで、Cacheの設定はこの部分
<subsystem xmlns="urn:infinispan:server:core:5.3" default-cache-container="local"> <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"/> </cache-container> <cache-container name="security"/> </subsystem>
Hot RodやMemcachedプロトコルなどのリッスンポートは、ここを見ればわかります。
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> <socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"/> <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/> <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"/> <socket-binding name="ajp" port="8009"/> <socket-binding name="hotrod" port="11222"/> <socket-binding name="http" port="8080"/> <socket-binding name="https" port="8443"/> <socket-binding name="memcached" port="11211"/> <socket-binding name="remoting" port="4447"/> <socket-binding name="txn-recovery-environment" port="4712"/> <socket-binding name="txn-status-manager" port="4713"/> <socket-binding name="websocket" port="8181"/> </socket-binding-group>
clustered.xmlでは、これにJGroupsの設定が加わります。
5.2からの変わりっぷりにはだいぶ面食らいましたが、こちらを眺めているとなんとか設定できそうな気がします。
Infinispan Server
https://docs.jboss.org/author/display/ISPN/Infinispan+Server
せっかくなので、ちょっと起動してみましょう。今回は、standalone.shで起動することにします。
$ bin/standalone.sh ========================================================================= JBoss Bootstrap Environment JBOSS_HOME: /xxxxx/infinispan-server-5.3.0.Final JAVA: /usr/lib/jvm/java-7-oracle/bin/java JAVA_OPTS: -server -XX:+UseCompressedOops -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true ========================================================================= 00:34:55,817 INFO [org.jboss.modules] (main) JBoss Modules version 1.2.0.CR1 00:34:56,206 INFO [org.jboss.msc] (main) JBoss MSC version 1.0.4.GA 00:34:56,380 INFO [org.jboss.as] (MSC service thread 1-3) JBAS015899: JBoss Infinispan Server 5.3.0.Final (AS 7.2.0.Final) starting 〜省略〜 00:34:58,949 INFO [org.apache.coyote.http11] (MSC service thread 1-4) JBWEB003000: Coyote HTTP/1.1 starting on: http-/127.0.0.1:8080 00:34:59,527 INFO [org.infinispan.server.endpoint] (MSC service thread 1-3) JDGS010000: HotRodServer starting 00:34:59,548 INFO [org.infinispan.server.endpoint] (MSC service thread 1-3) JDGS010001: HotRodServer listening on 127.0.0.1:11222 00:34:59,748 INFO [org.infinispan.server.endpoint] (MSC service thread 1-1) JDGS010000: WebSocketServer starting 00:34:59,759 INFO [org.infinispan.server.endpoint] (MSC service thread 1-1) JDGS010001: WebSocketServer listening on 127.0.0.1:8181 〜省略〜 00:35:01,410 INFO [org.jboss.as.clustering.infinispan] (MSC service thread 1-3) JBAS010281: Started default cache from local container 〜省略〜 00:35:01,474 INFO [org.infinispan.server.endpoint] (MSC service thread 1-2) JDGS010000: REST starting 00:35:01,505 INFO [org.infinispan.jmx.CacheJmxRegistration] (MSC service thread 1-4) ISPN000031: MBeans were successfully registered to the platform MBean server. 00:35:01,507 INFO [org.jboss.as.clustering.infinispan] (MSC service thread 1-4) JBAS010281: Started namedCache cache from local container 00:35:01,596 INFO [org.infinispan.jmx.CacheJmxRegistration] (MSC service thread 1-4) ISPN000031: MBeans were successfully registered to the platform MBean server. 00:35:01,597 INFO [org.jboss.as.clustering.infinispan] (MSC service thread 1-4) JBAS010281: Started memcachedCache cache from local container 00:35:01,627 INFO [org.infinispan.server.endpoint] (MSC service thread 1-4) JDGS010000: MemcachedServer starting 00:35:01,628 INFO [org.infinispan.server.endpoint] (MSC service thread 1-4) JDGS010001: MemcachedServer listening on 127.0.0.1:11211 00:35:02,061 INFO [org.infinispan.server.endpoint] (MSC service thread 1-2) JDGS010002: REST mapped to /rest 00:35:02,213 INFO [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on 127.0.0.1:9999 00:35:02,217 INFO [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on 127.0.0.1:4447 00:35:02,614 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management 00:35:02,617 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990 00:35:02,618 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss Infinispan Server 5.3.0.Final (AS 7.2.0.Final) started in 7483ms - Started 92 of 130 services (38 services are passive or on-demand)
5.2までのInfinispan Serverだと、起動時にHot Rod、Memcachedなど、どのプロトコルを使うかを決めていますが、5.3からは全部使えそうな雰囲気ですね。
あ、この方法で起動した場合は、停止はCtrl-Cで。
JGroupsを使ったクラスタを試したい場合は、
$ bin/standalone.sh -c clustered.xml
として「-c」スイッチ付きで設定ファイルを指定するか、
$ bin/clustered.sh
を使って起動してください。
ログファイルは、デフォルトだと
standalone/log/server.log
に出力されます。
それでは、Hot Rod Clientを使って、ちょっと接続してみます。
build.sbt
name := "infinispan-remote-53" version := "0.0.1-SNAPSHOT" scalaVersion := "2.10.2" scalacOptions += "-deprecation" resolvers += "JBoss Public Maven Repository Group" at "http://repository.jboss.org/nexus/content/groups/public-jboss" libraryDependencies ++= Seq( "org.infinispan" % "infinispan-core" % "5.3.0.Final", "org.infinispan" % "infinispan-client-hotrod" % "5.3.0.Final", "net.jcip" % "jcip-annotations" % "1.0" )
src/main/scala/InfinispanRemote.scala
import org.infinispan.client.hotrod.RemoteCacheManager import org.infinispan.client.hotrod.configuration.ConfigurationBuilder object InfinispanRemote { def main(args: Array[String]): Unit = { val manager = new RemoteCacheManager( new ConfigurationBuilder() .addServers("localhost:11222") .build) val cache = manager.getCache[String, String]("namedCache") try { val range = 1 to 5 if (cache.size > 0) { for (i <- range) { require(cache.get(s"key$i") == s"value$i") } } for (i <- range) { cache.put(s"key$i", s"value$i") } for (i <- range) { require(cache.get(s"key$i") == s"value$i") } } finally { manager.stop() } } }
Cacheは、デフォルトで用意されているnamedCacheを使いました。
2回目以降の起動では、前回起動時に放り込んだエントリの内容を検証するコードになっています。
$ telnet localhost 11211 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. set key1 0 0 6 value1 STORED get key1 VALUE key1 0 6 value1 END quit Connection closed by foreign host.
Memcachedプロトコルを使用した場合は、memcachedCacheという名前のCacheを使うようですよ。このCacheの名前を単純に変更すると、Infinispan Serverの起動に失敗するようになりましたし。
先のプログラムを動かして、telnetでmemcachedCacheに値を入れた後にCLIでstatsしてみると
$ bin/ispn-cli.sh [disconnected//]> connect 8 24, 2013 12:46:01 午前 org.xnio.Xnio <clinit> INFO: XNIO Version 3.0.7.GA 8 24, 2013 12:46:01 午前 org.xnio.nio.NioXnio <clinit> INFO: XNIO NIO Implementation Version 3.0.7.GA 8 24, 2013 12:46:01 午前 org.jboss.remoting3.EndpointImpl <clinit> INFO: JBoss Remoting version 3.2.14.GA [remoting://localhost:9999/local/]> cache namedCache [remoting://localhost:9999/local/namedCache]> stats Statistics: { stores: 10 averageRemoveTime: 0 elapsedTime: 165 numberOfEntries: 5 removeHits: 0 averageReadTime: 0 removeMisses: 0 readWriteRatio: 2.0 statisticsEnabled: true hitRatio: 1.0 evictions: 0 timeSinceReset: 165 misses: 0 averageWriteTime: 0 hits: 20 } LockManager: { concurrencyLevel: 1000 numberOfLocksAvailable: 0 numberOfLocksHeld: 0 } [remoting://localhost:9999/local/namedCache]> cache memcachedCache [remoting://localhost:9999/local/memcachedCache]> stats Statistics: { stores: 1 averageRemoveTime: 0 elapsedTime: 170 numberOfEntries: 1 removeHits: 0 averageReadTime: 0 removeMisses: 0 readWriteRatio: 1.0 statisticsEnabled: true hitRatio: 1.0 evictions: 0 timeSinceReset: 170 misses: 0 averageWriteTime: 0 hits: 1 } LockManager: { concurrencyLevel: 1000 numberOfLocksAvailable: 0 numberOfLocksHeld: 0 }
それぞれ、投入結果が反映されていますしね。
Infinispan Serverの方は全然見てなかったから、知らなかったです。6.0から機能も増えるみたいですし、ちょっとチェックしておきましょう。