CookBook

Docker Swarm を利用して Payara のクラスタリングを構築する。

投稿日:2018-08-02 更新日:

この CookBook では、Docker Swarm を利用して Payara のクラスタリングを構築する手順について紹介しています。
intra-mart Accel Platform のクラスタリングはこの CookBook では扱いません。
Docker Swarm を利用することで、複数マシンにまたがった仮想 Docker ネットワークを定義し、そのネットワーク上にコンテナをデプロイすることでクラスタリング環境を構築することができます。

レシピ

  1. Docker Swarm Manager を作成する
  2. Docker Swarm クラスタに参加する
  3. Swarm 用 Docker Overlay Network を作成する
  4. Docker Swarm 用 Hazelcast プラグインを作成する
  5. Payara の Docker Image を作成する
  6. Swarm クラスタに Payara タスクをデプロイする

この CookBook では 2 台のマシンを利用します。

1 台目 2 台目
名前 マシン A マシン B
役割 Docker Swarm Manager Docker Swarm Worker
プライベート IP アドレス 192.168.0.2 192.168.0.3

マシン A を Docker Swarm クラスタのマネージャーとします。
マシン B をマシン A のクラスタに参加するノードとします。

1. Docker Swarm Manager を作成する

マシン A 上で以下のコマンドを実行します。

以下のような実行結果が返却されます。

エラーが出た場合 2377 ポートを他のプログラムが使用していないか確認してください。2377 ポートが利用できない場合 --listen-addr フラグを指定することで他のポートを使用することも可能です。
返却された実行結果の docker swarm join --token ... のコマンドをコピーします。

2. Docker Swarm クラスタに参加する

マシン B 上で、先ほどコピーしたコマンドを実行します。

以下のような実行結果が返却されます。
This node joined a swarm as a worker.

マシン A 上で以下のコマンドを実行します。

以下のような実行結果が返却されます。

マシン A とマシン B の 2 ノードで構成されていることが確認できます。

3. Swarm 用 Docker Overlay Network を作成する

マシン A 上で以下のコマンドを実行します

-d overlay を指定することで、Docker Swarm の各ノード上でまたがって利用可能なオーバーレイネットワークを作成します。
ここで作成したネットワークを Docker Swarm の各ノード内で利用する仮想的なネットワークとします。

マシン A 上で以下のコマンドを実行します

以下のように、NAME=payara-cluster, DRIVER=overlay, SCOPE=swarm のネットワークが作成されていることが確認できます。

SCOPE=swarm となっていることから分かるように、オーバーレイネットワークは Docker Swarm と組み合わせた場合のみ利用可能です。
docker run --net=payara-cluster のような利用はできません。

4. Docker Swarm 用 Hazelcast プラグインを作成する

Hazelcast でクラスタリングを構成するためのプラグインを作成します。
のちの手順で「payara-service」という名称でタスクをデプロイするため、DNS「tasks.payara-service」で各サーバのプライベート IP を取得できます。
この DNS からクラスタに参加するノードを返却するプラグインを作成します。

hazelcast_config/src/main/java/com/hazelcast/swarm/HazelcastSwarmDiscoveryStrategy.java

hazelcast_config/src/main/java/com/hazelcast/swarm/HazelcastSwarmDiscoveryStrategyFactory.java

hazelcast_config/src/main/java/com/hazelcast/swarm/ServiceEndpointResolver.java

hazelcast_config/src/main/resources/META-INF/services/com.hazelcast.spi.discovery.DiscoveryStrategyFactory

hazelcast_config/pom.xml

DNS からアドレスを引き、クラスタリングに参加させています。
対象の DNS 名を ServiceEndpointResolver.java に直接記載しているため、他のサービス名を利用したい場合変更しコンパイルしなおしてください。

ソースコードは hazelcast_config.zip からダウンロードできます。

5. Payara の Docker Image を作成する

Dockerfile

ベースイメージとして https://dev.intra-mart.jp/cookbook147109/‎ で作成したイメージを利用します。

作成した Hazelcast プラグインが動作するように hazelcast-config.xml と先ほど作成した Hazelcast プラグイン(hazelcast_config-8.0.0.jar) を追加しています。
マシン A, マシン B の両方で、mypayara_swarm というタグでビルドします。

(イメージを DockerHub に push している場合、Worker ノードは自動的に pull するためすべてのノード上でビルドする必要はなくなります。)

hazelcast-config.xml

6. Swarm クラスタに Payara タスクをデプロイする

マシン A 上で、以下のコマンドでタスクをデプロイします。

サービス名「payara-service」、レプリカ数 = 2, ネットワークは先ほど作成した「payara-cluster」でサービスを作成します。
レプリカを 2 個にしているため、マシン A, マシン B 上にデプロイされます。

以下のコマンドで、どのマシン上で実行されているかを確認できます。

マシン A, マシン B 上で実行されていることが確認できます。

コンテナのホスト名の設定(--hostname)は本来不要ですが、ここでは分かりやすい名前にすることを優先して設定しています。
コンテナの Payara が利用する 4848, 8080, 28080 ポート(target)をそのままホスト側の 4848, 8080, 28080 ポート(published)で開放しています。
そのため、http://192.168.0.2:4848 から管理コンソールにアクセスできます。

管理コンソールの DataGrid を確認することで、クラスタリングが組まれていることを確認できます。

まとめ

このように、Docker Swarm を利用することで、複数マシン上での Payara クラスタリング環境を構築できます。
この CookBook では Payara がもつ Hazelcast 機能を用いて Payara のみのクラスタリングを構築しました。
intra-mart Accel Platform をデプロイする場合、JGroups のクラスタリングの設定も必要です。
その場合、今回の手順では network-agent-config.xml に IP アドレスを列挙することを事前に行えないため、本 CookBook の手順は使えませんので、注意してください。

また、今回の Hazelcast プラグインを用いてクラスタリングを構成する方法が難しい場合、単に replica=1 として二回タスクをデプロイ後、それぞれのタスクのプライベート IP を調査し、それぞれの管理コンソールの DataGrid よりそれぞれのマシンの IP アドレスをコンマ区切りで列挙し設定する方法でもクラスタリングを構築することが可能です。
併せてご活用ください。

-CookBook

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

IM-BloomMaker と IM-LogicDesigner を組み合わせて、請求書を Excel でダウンロードする方法

この CookBook では intra-mart Accel Platform 2021 Spring から追加された、「IM-LogicDesigner フロールーティングにリクエストを送信する」 …

no image

IM-BloomMaker 複数行明細テーブルのような見た目を実現する方法

この CookBook では複数行明細テーブルのような見た目を実現する方法を紹介します。今回紹介するのはテーブルではないエレメントである「ボックス(繰り返し)」と「フレックスコンテナ」を組み合わせて、 …

差戻し先ノードの処理対象者を再展開するフローを作成する方法

このCookBookでは、差戻し先ノードの処理対象者を再展開するフローを作成する方法について紹介しています。 IM-Workflowの仕様として、差戻し先ノードではそのノードを以前に処理した人のみが再 …

no image

IM-FormaDesignerで作成したフォーム内でIME入力モードを制御する方法【IE・EDGE】

注意事項     Microsoft Edge 41 より ime-mode 属性は利用できなくなりました。 このCookbookでは、IM-FormaDesignerで作成したフォーム内の 画面アイ …

no image

IM-BloomMaker Bulma Theme Colored について

この CookBook では intra-mart Accel Platform 2021 Summer から利用可能になった コンテンツ種別「Bulma Theme Colored」について紹介しま …