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の
起動とデプロイが別々になってしまうので、ケースによってはこちらを使うのもありでしょう。