前回のサーバをクラスタ構成にしてテストしてみました。
参考)
「Infinispan 10のServerNGを試す」
https://kazuhira-r.hatenablog.com/entry/2019/07/27/020002
環境)
Infinispan Server 13.0.15.Final / Java 17 / Ubuntu 22.04 x 二台
n10: 192.168.1.172 (前回環境)
n0k: 192.168.1.192 (新規)
前回との設定ファイル(server/conf/infinispan.xml)の違い
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
7a8,11 > <jgroups> > <stack-file name="default-udp" path="default-configs/default-jgroups-udp.xml"/> > </jgroups> > 9c13,18 < <transport cluster="${infinispan.cluster.name:cluster}" stack="${infinispan.cluster.stack:tcp}" node-name="${infinispan.node.name:}"/> --- > <!-- > <transport cluster="${infinispan.cluster.name:cluster}" stack="${infinispan.cluster.stack:tcp}" node-name="${infinispan.node.name:}"/> > --> > > <transport cluster="cluster" stack="default-udp"/> > <distributed-cache name="default"/> 10a20 > 27a38,40 > <!-- > <distributed-cache name="plainCache"/> > --> 29d41 < <distributed-cache name="plainCache"/> |
※クラスタをくむすべてのサーバで同じ設定
最初はこれだけでできるのだろうか、という疑問があったため、動作しないときは他の要因をいろいろと調べました。
※JGroups の設定について
https://access.redhat.com/documentation/ja-jp/red_hat_data_grid/6.5/html/administration_and_configuration_guide/sect-configure_jgroups_library_mode
動作しなかった原因は、Javaのバージョンで、ver11の場合マルチキャストバケットが飛びませんでした。
参考サイトではポートのオフセットをづらして(例 -o 100)同一サーバにInfinispan Serverを複数同居させていますが、やはり別のサーバでないと分散している感じがしないため分けました。(このオフセットずらしはWeb画面などのポートもずらしてくれるので便利です)
テストで確認したいこと
- n10サーバの内容が、n0kサーバに反映されるか
- n10サーバをダウンさせてもデータは消えないか(n0k側をWebツールで確認)
- n10サーバを復帰、そしてn0kサーバをダウンさせた後、n10のサーバのデータは同様にプログラムから取得できるか
- n10サーバをダウンさせるとプログラムから取得できないか(nullになる)
手順
n10のサーバを起動
bin/server.sh -b 0.0.0.0
別コンソールで前回作成したプログラムでキーの書き込み(key01=>value01, key02=>value02)
java -jar target/hello2-1.0-SNAPSHOT-jar-with-dependencies.jar
前回同様n0kサーバにInfinispanをインストールしてinfinispan.xmlを書き換える
n0kのサーバを起動
bin/server.sh -b 0.0.0.0
コンソール表示
…
2023-03-14 01:59:20,014 INFO (main) [org.infinispan.CLUSTER] ISPN000094: Received new cluster view for channel cluster: [n10-61159|5] (2) [n10-61159, n0k-26382]
2023-03-14 01:59:20,121 INFO (main) [org.infinispan.CLUSTER] ISPN000079: Channelcluster
local address isn0k-26382
, physical addresses are[192.168.1.192:38784]
2023-03-14 01:59:20,634 INFO (main) [org.jboss.threads] JBoss Threads version 2.3.3.Final
2023-03-14 01:59:21,302 INFO (main) [org.infinispan.CONTAINER] ISPN000104: Using EmbeddedTransactionManager
…
このとき、n10にも情報が表示される。
マルチキャストパケットも確認
n@n10:~/infinispan-server-13.0.15.Final/_work/hello2$ sudo tcpdump -i enp0s3 -n igmp
tcpdump: verbose output suppressed, use -v[v]… for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), snapshot length 262144 bytes
02:02:30.387613 IP 192.168.1.192 > 228.6.7.8: igmp v2 report 228.6.7.8
02:02:31.628466 IP 192.168.1.192 > 228.6.7.8: igmp v2 report 228.6.7.8
n10のサーバをCTL-Cでダウンし再度起動そしてn0kのサーバをダウン
n10でプログラムを実行して内容確認(このときはキーをセットせず取得するだけのプログラムを使用)
n10のサーバをダウンさせ、再びプログラムを実行してnullになっていることを確認
プログラムは下記のようにコメントをしたりして、設定と取得を確認しました。(本題でないため手抜きでスミマセン)
1 2 3 4 |
//c.put("key01", "value01"); //c.put("key02", "value02"); System.out.println(c.get("key01")); System.out.println(c.get("key02")); |
以上、当たり前の機能ですが、すべて確認することができました。