クラスタ化された Payara Server のアップグレード

この記事は Java EE Advent Calendar 2017 の 12 日目です。

今回は Payara Server のアップグレードに関する話題です。基本的には Payara のドキュメントに記載されている手順に従って実施すれば問題ありません。この時点で必要な情報は一通り提供したので終わりにしてもいいのですが、それではさすがに怒られそうなので、ちゃんと書きます。

Payara Server のアップグレード

Payara Server のアップグレードには、大きく 2 通りの方法があります。

  • ドメインのバックアップ (asadmin backup-domain) とリストア (asadmin restore-domain) を利用して、旧バージョンから新バージョンにドメインを移行する。
  • あらかじめドメインを Payara のインストール・ディレクトリの外部に作成しておき、新旧バージョンでそれを参照する (asadmin start-domain の --domaindir オプションを用いる)。

最初の方法は、昨年の Java EE Advent Calendar@tigertaizo さんの記事「Payara Serverアップグレードを試す」で用いられているもので、だいたいのケースがこちらを用いたアップグレードです。第 2 の方法は Payara Server のバックアップとリストアを何度か経験されている方であれば合理的な方法であると感じられるでしょう。この方法を採る場合は、Payara Server を停止させる必要があることに注意してください。かつての Oracle GlassFish Server では商用専用機能としてドメインの一時停止 (asadmin suspend-domain / resume-domain) が提供されており、一時停止中にバックアップの取得が可能でした。さらには無停止でのバックアップやスケジューリングも提供されていました。Payara はオープンソース版 GlassFish をベースにしていますので、これらの機能は引き継いでいません。リストアについてはサーバーの停止を要しますが、これから稼働させる新バージョンのサーバーですから、停止していても問題はありません。

これは Payara と GlassFish v3 以降で共通していることですが、バックアップ対象は $as-install-root/glassfish/domains 以下に配置される各ドメインのディレクトリ (domain1 など) です。原理的には、ドメインのディレクトリを OS のコマンドを使ってコピーするだけでもバックアップは取得できます。実際、現行の asadmin backup-domain コマンドは、ドメインのディレクトリを ZIP アーカイブして保存しているだけです。サポートチームとしては、より確実な asadmin backup-domain / restore-domain の使用を強くお勧めしています。

クラスタ化された Payara Server のアップグレード

ここからが本題です。ここまでの話はドキュメントにも記載があり、比較的多くの方が試されているものですが、クラスタ環境を構築している場合のアップグレードに関しては資料がありません。ここでは、Sun 時代の GlassFish 関連資料 (現在は消失) と私の過去の試行に基づいてクラスタ化された Payara Server のアップグレードについて説明します。システムによってクラスタの形態は様々で、それに伴って詳細な手順が異なるため、あくまで概要に留めておきます。

Case 1 : Shoal を使用していない場合

Payara は GlassFish から引き継いだ Shoal を使用しなくても、Hazelcast のみでクラスタリングが可能です。その場合はおそらく、すべてのノードが DAS となっているはずで、通常のアップグレードをすべてのノードに対して実施すればよいことになります。ノードの接続・切断は Hazelcast が自動的に行うため考慮する必要はありません。

Case 2 : Shoal の SSH ノードを使用している場合

GlassFish 互換の SSH ノード (または DCOM ノード) を使用している場合は、Hazelcast の有効・無効に関わらず、少々複雑になります。大まかな手順は以下の通りです。これは GlassFish 3.1 以降および Payara Server で共通です。

  1. クラスタのインスタンスをすべて停止させます。DAS も停止させます。
  2. DAS をアップグレードします。手順はスタンドアロン構成の場合と全く同じです。
  3. アップグレード後の DAS を起動したら、クラスタのインスタンスと SSH ノードを削除します。ただし SSH ノードはファイルの削除までは行わず (おそらくうまく削除できないはず)、ドメインから削除するに留めてください。
  4. 新たに SSH ノードを作成し、その上にクラスタのインスタンスを作成してください。
  5. クラスタを起動すると、新たに作成したインスタンス / SSH ノードにドメインの情報が行き渡ります。

クラスタにローカル・インスタンス (CONFIG ノード) が混在している場合など、クラスタ構成には様々なトポロジーが存在するため、これ以上の言及は避けます。

最後に Tips です。Payara をインストールする際、例えば /opt/payara/174/payara41 のようにバージョン単位でディレクトリを分けておくと、アップグレードやバージョン間での振る舞いの比較を行うのに便利です。