これは、なにをしたくて書いたもの?
Infinispan 11.0.0.Finalから、Infinispan Serverのネイティブイメージがリリースされています。
Blog: Infinispan 11.0.0.Final - Infinispan
Blog: Infinispan Native Server Image - Infinispan
前々から気になっていたので、ちょっと遊んでみることにしました。
Infinispan Native Server
文字通り、Infinispan ServerをGraalVMを使ってビルドしたネイティブイメージです。通常のInfinispan Serverよりも
コンパクトなサイズになっています。
利用は、実行可能なネイティブイメージではなく、Dockerイメージとして利用することになります。
Infinispan Server Native Image
GitHubリポジトリはこちらです。Infinispan Server向けの、Quarkus Extensionが実装されています。
GitHub - infinispan/infinispan-quarkus: Infinispan Quarkus based extensions and Server
Dockerイメージを作る元になっているリポジトリは、こちら。ネイティブイメージ以外のDockerイメージの元も含まれています。
通常のInfinispan ServerのDockerイメージとのサイズを比較してみましょう。
$ docker image pull quay.io/infinispan/server-native:12.0.2.Final $ docker image pull quay.io/infinispan/server:12.0.2.Final $ docker image ls | grep quay.io/infinispan/server quay.io/infinispan/server-native 12.0.2.Final c0d39bf9da9a 2 weeks ago 280MB quay.io/infinispan/server 12.0.2.Final a85f09e76880 2 weeks ago 476MB
通常のInfinispan Serverのサイズから半減…とまではいきませんが、小さくなっていますね。
現在のInfinispanのドキュメントには、ネイティブイメージに関する情報はなさそうなので、GitHubやブログの内容を元に
見ていきたいと思います。
起動してみる
まずは起動してみましょう。Dockerイメージは、quay.io/infinispan/server-native:12.0.2.Final
を使います。12.0.2.Finalですね。
$ docker container run -it --rm --name infinispan quay.io/infinispan/server-native:12.0.2.Final
起動すると、こんなことを言われます。
################################################################################ # # # IDENTITIES_PATH not specified # # USER and/or PASS env variables not specified. # # Auto generating user and password. # # # # Generated User: 8Wg5LOkbDw # # Generated Password: RWPtynD6w0 # # # # These credentials should be passed via environment variables when adding # # new nodes to the cluster to ensure that clients can access the exposed # # endpoints, on all nodes, using the same credentials. # # # # For example: # # 'docker run -e USER=8Wg5LOkbDw -e PASS=RWPtynD6w0'' # # # ################################################################################
ユーザーを自動生成した、と言っています。指定するには、環境変数で設定すればよさそうですね。
他のログ。
2021-03-27 15:49:09,165 WARN [io.qua.qut.run.ContentTypes] (main) Unable to detect the content type for templates/jgroups-encrypt; using application/octet-stream 2021-03-27 15:49:09,166 INFO [io.quarkus] (main) config-generator 2.1.3.Final native (powered by Quarkus 1.7.6.Final) started in 0.008s. 2021-03-27 15:49:09,166 INFO [io.quarkus] (main) Profile prod activated. 2021-03-27 15:49:09,166 INFO [io.quarkus] (main) Installed features: [cdi, qute] 2021-03-27 15:49:09,170 INFO [io.quarkus] (main) config-generator stopped in 0.000s 2021-03-27 15:49:09,191 INFO [ListenerBean] (main) The application is starting... 2021-03-27 15:49:09,206 INFO [org.inf.CONTAINER] (main) ISPN000556: Starting user marshaller 'org.infinispan.commons.marshall.ImmutableProtoStreamMarshaller' 2021-03-27 15:49:09,263 INFO [org.inf.CONTAINER] (main) ISPN000128: Infinispan version: Infinispan 'Lockdown' 12.0.2.Final 2021-03-27 15:49:09,264 INFO [org.inf.CLUSTER] (main) ISPN000078: Starting JGroups channel infinispan with stack image-tcp 2021-03-27 15:49:11,267 INFO [org.jgr.pro.pbc.GMS] (main) fec90b7741da-38815: no members discovered after 2000 ms: creating cluster as coordinator 2021-03-27 15:49:11,267 INFO [org.inf.CLUSTER] (main) ISPN000094: Received new cluster view for channel infinispan: [fec90b7741da-38815|0] (1) [fec90b7741da-38815] 2021-03-27 15:49:11,268 INFO [org.inf.CLUSTER] (main) ISPN000079: Channel infinispan local address is fec90b7741da-38815, physical addresses are [172.17.0.2:7800] 2021-03-27 15:49:11,269 INFO [org.inf.CONTAINER] (main) ISPN000390: Persisted state, version=12.0.2.Final timestamp=2021-03-27T15:49:11.269025Z 2021-03-27 15:49:11,278 INFO [org.inf.CONTAINER] (main) ISPN000104: Using EmbeddedTransactionManager 2021-03-27 15:49:11,305 INFO [org.inf.SERVER] (main) ISPN080018: Started connector REST (internal) 2021-03-27 15:49:11,306 INFO [org.inf.SERVER] (ForkJoinPool.commonPool-worker-3) ISPN080018: Started connector HotRod (internal) 2021-03-27 15:49:11,307 INFO [org.inf.SERVER] (main) ISPN080004: Connector SINGLE_PORT (default) listening on 172.17.0.2:11222 2021-03-27 15:49:11,307 INFO [org.inf.SERVER] (main) ISPN080034: Server 'fec90b7741da-38815' listening on http://172.17.0.2:11222 2021-03-27 15:49:11,307 INFO [org.inf.SERVER] (main) ISPN080001: Infinispan Server 12.0.2.Final started in 2124ms 2021-03-27 15:49:11,308 INFO [io.quarkus] (main) infinispan-quarkus-server-runner 12.0.2.Final native (powered by Quarkus 1.11.0.Final) started in 2.130s. 2021-03-27 15:49:11,308 INFO [io.quarkus] (main) Profile prod activated. 2021-03-27 15:49:11,308 INFO [io.quarkus] (main) Installed features: [cdi, infinispan-embedded, infinispan-server]
Infinispan Server 12.0.2.Final、Quarkusは1.11.0.Finalですね。
2021-03-27 15:49:11,307 INFO [org.inf.SERVER] (main) ISPN080001: Infinispan Server 12.0.2.Final started in 2124ms 2021-03-27 15:49:11,308 INFO [io.quarkus] (main) infinispan-quarkus-server-runner 12.0.2.Final native (powered by Quarkus 1.11.0.Final) started in 2.130s.
1度止めまして。
中に含まれるファイルおよびディレクトリは、こんな感じです。
$ docker container run -it --rm --name infinispan quay.io/infinispan/server-native:12.0.2.Final find /opt/infinispan /opt/infinispan /opt/infinispan/bin /opt/infinispan/bin/config-generator /opt/infinispan/bin/server-runner /opt/infinispan/bin/server.sh /opt/infinispan/bin/launch.sh /opt/infinispan/server /opt/infinispan/server/conf /opt/infinispan/server/conf/users.properties /opt/infinispan/server/conf/groups.properties /opt/infinispan/data
Infinispan Serverのネイティブイメージは、/opt/infinispan
ディレクトリ内にあります。
また、最初のコメントで表示されていたように、環境変数USER
およびPASS
を指定することでユーザー名および
パスワードを設定できます。
$ docker container run -it --rm -e USER=ispn-user -e PASS=ispn-password --name infinispan quay.io/infinispan/server-native:12.0.2.Final
起動時のコメントが変わりました。
################################################################################ # # # IDENTITIES_PATH not specified # # Generating Identities yaml using USER and PASS env vars. # ################################################################################
このあたりの設定については、README.md
に書かれているのですが。
Infinispan Images / Yaml Configuration
今回は、Infinispan ServerのDockerイメージを使い倒すことを目的はしていないので、あまり深追いしません。
Dockerイメージがどんな構成になっているかや、指定できる環境変数は以下のファイルを見ればよさそうです。
https://github.com/infinispan/infinispan-images/blob/server-native-12.0.2.Final-1/server-native.yaml
ここから先は、まずはSingle Nodeで以下の指定で起動しておきます。
$ docker container run -it --rm -e USER=ispn-user -e PASS=ispn-password --name infinispan --hostname infinispan quay.io/infinispan/server-native:12.0.2.Final
IPアドレスを確認。
$ docker container inspect infinispan | grep IPAddress "SecondaryIPAddresses": null, "IPAddress": "172.17.0.2", "IPAddress": "172.17.0.2",
CLIで接続する
Dockerイメージで起動しているので、設定変更して再起動、というわけにはいきません。
起動時に設定ファイルをマウントしつつ環境変数を指定して設定する方法もあるのですが、今回はそこまでやりません。
なので、CLIを使うことになるわけですが…先ほどのfind
の結果を見るとわかるように、Infinispan Serverのネイティブイメージには
CLIが含まれていません。
CLIは、Infinispan ServerのQuarkus Extensionのリポジトリに含まれています。ネイティブイメージです。
GitHub - infinispan/infinispan-quarkus: Infinispan Quarkus based extensions and Server
こちらをダウンロードして展開。CLIは、ホスト側で利用することにします。
$ curl -LOs https://github.com/infinispan/infinispan-quarkus/releases/download/12.0.2.Final/infinispan-cli-12.0.2.Final-linux-amd64.zip $ unzip infinispan-cli-12.0.2.Final-linux-amd64.zip $ cd infinispan-quarkus-cli-12.0.2.Final
CLIの中身は、これだけです。
$ ls -1 LICENSE.md README.md ispn-cli
ispn-cli
が、CLIの本体ですね。ファイル形式を確認。
$ file ispn-cli ispn-cli: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=e2ac30e01729ed9a282efd755562fdbe00609f66, for GNU/Linux 3.2.0, not stripped
先ほど確認したIPアドレスと、ネイティブイメージの起動時にUSER
、PASS
で指定したユーザー名、パスワードを指定して接続してみます。
$ ./ispn-cli -c http://ispn-user:ispn-password@172.17.0.2:11222 [infinispan-50956@infinispan//containers/default]>
まだCacheはありません。
[infinispan-50956@infinispan//containers/default]> ls caches ___script_cache
作成しましょう。
テンプレートを指定して作成。
[infinispan-50956@infinispan//containers/default]> create cache --template=org.infinispan.DIST_SYNC distCache
[infinispan-50956@infinispan//containers/default]> ls caches distCache ___script_cache
この時、Server側(コンテナ内)ではdata/caches.xml
というファイルに指定したCacheが増えています。
$ docker container exec -it infinispan cat data/caches.xml <?xml version="1.0" ?> <infinispan xmlns="urn:infinispan:config:12.0"> <cache-container> <distributed-cache mode="SYNC" remote-timeout="17500" name="distCache" statistics="true"> <locking concurrency-level="1000" acquire-timeout="15000" striping="false"/> <state-transfer timeout="60000"/> </distributed-cache> </cache-container></infinispan>
テンプレートを使うと簡単にCacheを作れますが、設定の自由度はありません。
テンプレートで定義されているCache定義はこちらですね。
もう少し自由度が欲しい場合は、Cache定義を行ったXMLファイルを用意します。
cache-snippet.xml
<?xml version="1.0" ?> <infinispan> <cache-container> <distributed-cache mode="SYNC" name="cache" /> </cache-container> </infinispan>
今回用意したのは、とても簡単な内容ですが…。
これを、CLIから指定します。XMLファイルは、CLIを実行する環境上に存在していればOKです。
[infinispan-50956@infinispan//containers/default]> create cache --file=cache-snippet.xml myCache
Cacheが増えました。
[infinispan-50956@infinispan//containers/default]> ls caches ___script_cache myCache distCache
Server側でもCacheが増えています。
$ docker container exec -it infinispan cat data/caches.xml <?xml version="1.0" ?> <infinispan xmlns="urn:infinispan:config:12.0"> <cache-container> <distributed-cache mode="SYNC" name="myCache"/> <distributed-cache mode="SYNC" remote-timeout="17500" name="distCache" statistics="true"> <locking concurrency-level="1000" acquire-timeout="15000" striping="false"/> <state-transfer timeout="60000"/> </distributed-cache> </cache-container></infinispan>
Hot Rod Clientから接続してみる
Cacheを作ってみたので、Hot Rod Clientから接続してみましょう。
前提とする環境は、こちらです。
$ java --version openjdk 11.0.10 2021-01-19 OpenJDK Runtime Environment (build 11.0.10+9-Ubuntu-0ubuntu1.20.04) OpenJDK 64-Bit Server VM (build 11.0.10+9-Ubuntu-0ubuntu1.20.04, mixed mode, sharing) $ jbang --version 0.69.2
簡単に、JBangで実行したいと思います。
こんなプログラムを用意。
App.java
//DEPS org.infinispan:infinispan-client-hotrod:12.0.2.Final import java.net.SocketAddress; import java.util.Map; import java.util.Set; import java.util.stream.IntStream; import org.infinispan.client.hotrod.CacheTopologyInfo; import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCacheManager; import org.infinispan.client.hotrod.configuration.Configuration; import org.infinispan.client.hotrod.configuration.ConfigurationBuilder; public class App { public static void main(String... args) { Configuration configuration = new ConfigurationBuilder() .uri("hotrod://ispn-user:ispn-password@172.17.0.2:11222") .build(); RemoteCacheManager manager = new RemoteCacheManager(configuration); RemoteCache<String, String> cache = manager.getCache("myCache"); try { System.out.println("===== put data ====="); IntStream .rangeClosed(1, 10) .forEach(i -> cache.put("key" + i, "value" + i)); System.out.println("===== get data ====="); IntStream .rangeClosed(1, 10) .forEach(i -> System.out.printf(" key%d: %s%n", i, cache.get("key" + i))); System.out.println("===== cache topology ====="); CacheTopologyInfo topology = cache.getCacheTopologyInfo(); for (Map.Entry<SocketAddress, Set<Integer>> segment : topology.getSegmentsPerServer().entrySet()) { System.out.printf(" %s : %s%n", segment.getKey(), segment.getValue()); } } finally { cache.stop(); manager.stop(); } } }
Maven依存関係は、こちらに書いてあります。infinispan-client-hotrod
を使います。
//DEPS org.infinispan:infinispan-client-hotrod:12.0.2.Final
接続情報は、こちら。
Configuration configuration = new ConfigurationBuilder() .uri("hotrod://ispn-user:ispn-password@172.17.0.2:11222") .build();
その他も、通常のHot Rod Clientと使い方は変わりません。
Cacheは、ファイルを元に作成したものを使いました。
RemoteCache<String, String> cache = manager.getCache("myCache");
実行。
$ jbang App.java
動作しましたね。
3月 28, 2021 1:47:29 午前 org.infinispan.client.hotrod.RemoteCacheManager actualStart INFO: ISPN004021: Infinispan version: Infinispan 'Lockdown' 12.0.2.Final 3月 28, 2021 1:47:29 午前 org.infinispan.client.hotrod.impl.protocol.Codec20 readNewTopologyAndHash INFO: ISPN004006: Server sent new topology view (id=1, age=0) containing 1 addresses: [172.17.0.2:11222] ===== put data ===== ===== get data ===== key1: value1 key2: value2 key3: value3 key4: value4 key5: value5 key6: value6 key7: value7 key8: value8 key9: value9 key10: value10 ===== cache topology ===== 172.17.0.2:11222 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255]
OKですね。
クラスタを構成してみる
1度、先ほどまで動かしていたDockerイメージを停止します。
そして、今度はInfinispan Serverのネイティブイメージでクラスタを構成してみましょう。
Infinispan Serverを3 Node起動します。
## 1. $ docker container run -it --rm -e USER=ispn-user -e PASS=ispn-password --name infinispan1 --hostname infinispan1 quay.io/infinispan/server-native:12.0.2.Final ## 2. $ docker container run -it --rm -e USER=ispn-user -e PASS=ispn-password --name infinispan2 --hostname infinispan2 quay.io/infinispan/server-native:12.0.2.Final ## 3. $ docker container run -it --rm -e USER=ispn-user -e PASS=ispn-password --name infinispan3 --hostname infinispan3 quay.io/infinispan/server-native:12.0.2.Final
ログを見ると、クラスタが構成されました。
2021-03-27 16:50:32,208 INFO [org.inf.CLUSTER] (jgroups-5,infinispan1-2518) ISPN000094: Received new cluster view for channel infinispan: [infinispan2-63714|2] (3) [infinispan2-63714, infinispan1-2518, infinispan3-44542] 2021-03-27 16:50:32,208 INFO [org.inf.CLUSTER] (jgroups-5,infinispan1-2518) ISPN100000: Node infinispan3-44542 joined the cluster
IPアドレスを確認。172.17.0.2〜172.17.0.3です。
$ echo 'infinispan1 infinispan2 infinispan3' | xargs -I {} docker container inspect {} | grep IPAddress "SecondaryIPAddresses": null, "IPAddress": "172.17.0.2", "IPAddress": "172.17.0.2", "SecondaryIPAddresses": null, "IPAddress": "172.17.0.3", "IPAddress": "172.17.0.3", "SecondaryIPAddresses": null, "IPAddress": "172.17.0.4", "IPAddress": "172.17.0.4",
CLIでも接続してみましょう。どのNodeでもよいのですが、ひとつ指定して接続してみます。
$ ./ispn-cli -c http://ispn-user:ispn-password@172.17.0.2:11222 [infinispan1-2518@infinispan//containers/default]>
クラスタに、3 Nodeあることが確認できます。
[infinispan1-2518@infinispan//containers/default]> ls /cluster infinispan2-63714 infinispan1-2518 infinispan3-44542
Cacheも作成しておきます。
[infinispan1-2518@infinispan//containers/default]> create cache --file=cache-snippet.xml myCache
ここで、先ほどのプログラムの接続情報を以下のように変更します。
Configuration configuration = new ConfigurationBuilder() .uri("hotrod://ispn-user:ispn-password@172.17.0.2:11222,172.17.0.3:11222,172.17.0.4:11222") .build();
実行。
$ jbang App.java
3 Nodeを認識し、トポロジとしても認識しています。
INFO: ISPN004021: Infinispan version: Infinispan 'Lockdown' 12.0.2.Final 3月 28, 2021 1:56:29 午前 org.infinispan.client.hotrod.impl.protocol.Codec20 readNewTopologyAndHash INFO: ISPN004006: Server sent new topology view (id=9, age=0) containing 3 addresses: [172.17.0.4:11222, 172.17.0.2:11222, 172.17.0.3:11222] ===== put data ===== ===== get data ===== key1: value1 key2: value2 key3: value3 key4: value4 key5: value5 key6: value6 key7: value7 key8: value8 key9: value9 key10: value10 ===== cache topology ===== 172.17.0.4:11222 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 178, 179, 180, 181, 189, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 253, 254, 255] 172.17.0.2:11222 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255] 172.17.0.3:11222 : [52, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252]
OKですね。
ちなみに、Hot Rod URIで指定した各Nodeの接続先は、あくまで初期Nodeです。Hot Rod Clientは、クラスタに参加している
Nodeを知ることができるので、最初の定義に戻して
Configuration configuration = new ConfigurationBuilder() .uri("hotrod://ispn-user:ispn-password@172.17.0.2:11222") .build();
実行しても
$ jbang App.java
ちゃんと3 Node認識します。
3月 28, 2021 1:58:31 午前 org.infinispan.client.hotrod.RemoteCacheManager actualStart INFO: ISPN004021: Infinispan version: Infinispan 'Lockdown' 12.0.2.Final 3月 28, 2021 1:58:31 午前 org.infinispan.client.hotrod.impl.protocol.Codec20 readNewTopologyAndHash INFO: ISPN004006: Server sent new topology view (id=9, age=0) containing 3 addresses: [172.17.0.4:11222, 172.17.0.2:11222, 172.17.0.3:11222] 3月 28, 2021 1:58:31 午前 org.infinispan.client.hotrod.impl.transport.netty.ChannelFactory updateTopologyInfo INFO: ISPN004014: New server added(172.17.0.4:11222), adding to the pool. 3月 28, 2021 1:58:31 午前 org.infinispan.client.hotrod.impl.transport.netty.ChannelFactory updateTopologyInfo INFO: ISPN004014: New server added(172.17.0.3:11222), adding to the pool. ===== put data ===== ===== get data ===== key1: value1 key2: value2 key3: value3 key4: value4 key5: value5 key6: value6 key7: value7 key8: value8 key9: value9 key10: value10 ===== cache topology ===== 172.17.0.4:11222 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 178, 179, 180, 181, 189, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 253, 254, 255] 172.17.0.2:11222 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255] 172.17.0.3:11222 : [52, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252]
この部分ですね。
3月 28, 2021 1:58:31 午前 org.infinispan.client.hotrod.impl.transport.netty.ChannelFactory updateTopologyInfo INFO: ISPN004014: New server added(172.17.0.4:11222), adding to the pool. 3月 28, 2021 1:58:31 午前 org.infinispan.client.hotrod.impl.transport.netty.ChannelFactory updateTopologyInfo INFO: ISPN004014: New server added(172.17.0.3:11222), adding to the pool.
クラスタにも接続できたので、OKとしましょう。
まとめ
Infinispan Serverのネイティブイメージ(のDockerイメージ)を使ってみました。
使い方そのものは通常のInfinispan Serverとあまり変わりませんが、CLIが入っていないとか提供形態がDockerイメージのみという
差はあったりするのでそのあたりを押さえておけばなんとかなるかな、という感じですね。
ネイティブイメージなので、Server Taskや独自のモジュールをデプロイする、といったことはできない気がしますけどね。
Infinispan Serverの1形態として覚えておきましょう。