CLOVER🍀

That was when it all began.

Apache GeodeのServerにJARファイルをデプロイする

Client/Server ModeのApache Geodeでは、Queryなどを実行する時にはJARファイルをServer側にデプロイする
必要があります。

デプロイには、gfshで「deploy」コマンドを実行するのですが、複数のServerに一気にデプロイ
できるみたいだったので、確認してみました。

Deploying Application JARs to Apache Geode Members | Geode Docs

今回は、Locatorひとつ、Server 3つの構成とします。

Serverのひとつでgfshを起動します。

$ bin/gfsh
    _________________________     __
   / _____/ ______/ ______/ /____/ /
  / /  __/ /___  /_____  / _____  / 
 / /__/ / ____/  _____/ / /    / /  
/______/_/      /______/_/    /_/    1.0.0-incubating

Monitor and Manage Apache Geode (incubating)

Locatorに接続。
※「172.19.0.2」は、自分の手元の環境のLocatorのIPアドレスです

gfsh>connect --jmx-manager=172.19.0.2[1099]
Connecting to Manager at [host=172.19.0.2, port=1099] ..
Successfully connected to: [host=172.19.0.2, port=1099]

クラスタメンバー一覧。

gfsh>list members
        Name         | Id
-------------------- | --------------------------------------------------------
locator-geodelocator | 172.19.0.2(locator-geodelocator:36:locator)<ec><v0>:1024
server-a550bf494fc2  | 172.19.0.3(server-a550bf494fc2:149)<v3>:1024
server-7f12f0c9df78  | 172.19.0.4(server-7f12f0c9df78:39)<v4>:1024
server-61b596c14335  | 172.19.0.5(server-61b596c14335:39)<v5>:1024

デプロイされているJARファイルの確認。

gfsh>list deployed
No JAR Files Found

現時点では、なにもありません。

ここに、deployコマンドでJARファイルをデプロイしてみます。デプロイするJARファイルは、「entity.jar」とします。

gfsh>deploy --jar=/path/to/library-dir/entity.jar
      Member        | Deployed JAR | Deployed JAR Location
------------------- | ------------ | --------------------------------------------------------
server-61b596c14335 | entity.jar   | /opt/apache-geode/server-61b596c14335/vf.gf#entity.jar#1
server-7f12f0c9df78 | entity.jar   | /opt/apache-geode/server-7f12f0c9df78/vf.gf#entity.jar#1
server-a550bf494fc2 | entity.jar   | /opt/apache-geode/server-a550bf494fc2/vf.gf#entity.jar#1

一気に3つのServerにデプロイできたようです。

gfsh>list deployed
      Member        |    JAR     | JAR Location
------------------- | ---------- | --------------------------------------------------------
server-61b596c14335 | entity.jar | /opt/apache-geode/server-61b596c14335/vf.gf#entity.jar#1
server-7f12f0c9df78 | entity.jar | /opt/apache-geode/server-7f12f0c9df78/vf.gf#entity.jar#1
server-a550bf494fc2 | entity.jar | /opt/apache-geode/server-a550bf494fc2/vf.gf#entity.jar#1

しかも、各ServerにJARファイルそのものはなくてもよさそうです。
※コマンドを実行するServerにJARファイルがあればよさそう

また、「--dir」オプションでディレクトリ内のJARファイルを一気にデプロイもできるようです。

gfsh>deploy --dir=/path/to/library-dir

Deploying files: entity.jar
Total file size is: 0.00MB

Continue?  (Y/n): y
      Member        | Deployed JAR | Deployed JAR Location
------------------- | ------------ | --------------------------------------------------------
server-42f3246e5a27 | entity.jar   | /opt/apache-geode/server-42f3246e5a27/vf.gf#entity.jar#1
server-a0d45f9f070f | entity.jar   | /opt/apache-geode/server-a0d45f9f070f/vf.gf#entity.jar#1
server-aa3fdc045291 | entity.jar   | /opt/apache-geode/server-aa3fdc045291/vf.gf#entity.jar#1

一気に複数のServerにデプロイできるのは便利ですね、覚えておきましょう。

なお、アンデプロイもできるようです。

途中でServerを増やした場合は?

ちょっと気になったのが、JARファイルをデプロイした後にServerを追加した場合。この場合はどうなるのかなと
思ったので、確認してみました。

今度は、Locatorひとつ、Serverひとつをスタートとします。

gfsh>list members
        Name         | Id
-------------------- | --------------------------------------------------------
locator-geodelocator | 172.19.0.2(locator-geodelocator:36:locator)<ec><v0>:1024
server-e5c9ddb5489f  | 172.19.0.3(server-e5c9ddb5489f:162)<v3>:1024

JARファイルをデプロイします。

gfsh>deploy --jar=./deploy-libraries/entity.jar
      Member        | Deployed JAR | Deployed JAR Location
------------------- | ------------ | --------------------------------------------------------
server-e5c9ddb5489f | entity.jar   | /opt/apache-geode/server-e5c9ddb5489f/vf.gf#entity.jar#1

gfsh>list deployed
      Member        |    JAR     | JAR Location
------------------- | ---------- | --------------------------------------------------------
server-e5c9ddb5489f | entity.jar | /opt/apache-geode/server-e5c9ddb5489f/vf.gf#entity.jar#1

ここで、Serverをもうひとつ追加します。

gfsh>list members
        Name         | Id
-------------------- | --------------------------------------------------------
locator-geodelocator | 172.19.0.2(locator-geodelocator:36:locator)<ec><v0>:1024
server-e5c9ddb5489f  | 172.19.0.3(server-e5c9ddb5489f:162)<v3>:1024
server-4ffac3317ab3  | 172.19.0.4(server-4ffac3317ab3:39)<v4>:1024

JARファイルのデプロイ状況を確認してみます。

gfsh>list deployed
      Member        |    JAR     | JAR Location
------------------- | ---------- | --------------------------------------------------------
server-4ffac3317ab3 | entity.jar | /opt/apache-geode/server-4ffac3317ab3/vf.gf#entity.jar#1
server-e5c9ddb5489f | entity.jar | /opt/apache-geode/server-e5c9ddb5489f/vf.gf#entity.jar#1

追加されたメンバーにも、デプロイされたJARが伝播するみたいですね。

別解)--classpathを使う

デプロイとは少し異なりますが、Serverの起動時に「--classpath」オプションでServerに読み込ませるJARファイルを
追加することができます。

こんな感じです。

gfsh>start server --name=server --classpath=/path/to/library.jar

JARファイルまでのパスは、deployコマンドと異なり絶対パスで記述する必要があります。

複数ある場合は、「:」で区切ります(Windowsだと「;」とかになるのかな?)

gfsh>start server --name=server --classpath=/path/to/library1.jar:/path/to/library2.jar

「*」も使うことができます。

gfsh>start server --name=server --classpath=/path/to/*

deployコマンドと異なり、途中でアンデプロイなどはできないと思いますが、deployコマンドだとServerの
起動とデプロイが別々になってしまうので、ケースによってはこちらを使うのもありでしょう。