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

ベースイメージとして http://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

No.1 メールに添付されているExcelファイル読み込み → ワークフロー申請

この記事は、EWS 2017で行われたLogicDesignerの講演内容に関する記事です。 こちらの例では、メールサーバと連携し、メールの添付ファイルの内容から自動的にワークフローを申請できます。 …

no image

IM-BloomMaker のアクション「変数に一覧データから選択したものを代入する」の使い方

このCookBookでは、「変数に一覧データから選択したものを代入する」アクションの使用方法について紹介します。 「変数に一覧データから選択したものを代入する」アクションは、一覧データをダイアログの画 …

no image

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

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

no image

グリッドテーブルのイメージからワークフローの案件内容を表示するには

このCookbookでは、グリッドテーブルの「イメージ」から申請済みの案件の詳細画面を呼び出す方法を紹介します。 この方法を利用すると別の案件を参照しながら新しく申請を行うことができます。 BISで作 …

no image

No.9 音声認識からスケジュール登録

この記事は、EWS 2017で行われたLogicDesignerの講演内容に関する記事です。 こちらの例では、LogicDesignerと音声認識(Web Speech API)の仕組みを利用して、音 …

まだデータがありません。

RSSRSSRSSRSS