GlassFish ドメインのバックアップとリストア

この記事はGlassFish Advent Calendar 2013の7日目として新たに書き下ろしたものです。昨日は「GlassFishを起動・停止する方法(取扱注意)」という、重箱の隅をつつくような記事でした。


今回はGlassFishドメインのバックアップとリストアについてお話しします。

GlassFishのドメインは、as-install/glassfish/domains/ドメイン名 (例: C:\glassfish4\glassfish\domains\domain1)に収められているディレクトリとファイルで構成されています。早い話、GlassFishのドメイン停止した状態でこれらのディレクトリとファイルを別の場所にコピーすればバックアップ、元の場所に戻せばリストアです。逆に言うと、ドメイン動作中はドメインの構成要素、特にdomain.xmlを頻繁に書き換えているので触れてはいけません。

GlassFishのドメインは上記の通り手作業でもバックアップ(およびリストア)可能ですが、asadminを利用するとその作業が少しだけ便利になります。

なお、一部の操作についてはオープンソース版では提供されていません。それらについては、GlassFish 4以降の商用サポート中止により永久に封印される可能性があるため、最後の章で一覧するにとどめます。

1. ドメインのバックアップ手順

GlassFishのドメインを停止またはサスペンドさせた状態で、以下のコマンドを発行します。サスペンドのコマンドである suspend-domain は商用サポートで提供される追加機能に含まれます。

asadmin backup-domain domain1

このコマンドにより、ドメインの構成ファイル一式(具体的にはdomain1以下にあるファイルとディレクトリのうち後述するデフォルトのバックアップ・ディレクトリを除くすべて)をZIPアーカイブしたファイルが作成されます。

バックアップ・ファイルは、バックアップ・ディレクトリに以下のファイル名で作成されます。

ドメイン名_yyyy_MM_dd_v99999.zip

yyyy_MM_dd はバックアップを実行した日付です。v 以降の数字は 00001 から始まる連番で、同じバックアップ日・同じバックアップ先の何番目のバックアップファイルであるかを示しています。

上記のように特に指定がなければ、バックアップ・ディレクトリとしてデフォルトのバックアップ・ディレクトリ as-install/domains/ドメイン名/backups (例: C:\glassfish4\glassfish\domains\domain1\backups)が使用されます。

デフォルト以外のバックアップ・ディレクトリを使用することも出来ます。その場合は、--backupdir オプションを使用します。以下に例を示します。

asadmin backup-domain --backupdir バックアップ・ディレクトリ domain1

デフォルト以外のバックアップ・ディレクトリでは、指定したディレクトリの下にドメイン名のサブディレクトリが作成され、その下にバックアップ・ファイルが作成されます。

バックアップが完了したら、ドメインを起動するかサスペンドから復帰させます。サスペンドから復帰するコマンドである resume-domain は商用サポートで提供される追加機能に含まれます。

作成されたバックアップは、asadmin list-domains コマンドで一覧表示できます。list-domains サブコマンドはドメイン動作中でも使用できます。以下に表示例を示します。

CONFIG  USER      BACKUP-DATE                   FILENAME
hasunuma Tue Dec 03 22:08:51 JST 2013 domain1_2013_12_03_v00001.zip
hasunuma Sat Dec 07 16:18:49 JST 2013 domain1_2013_12_07_v00001.zip
hasunuma Sat Dec 07 16:54:48 JST 2013 domain1_2013_12_07_v00002.zip

CONFIGは、バックアップ設定に基づくバックアップの場合にはその名前が入り、asadmin backup-domain による随時バックアップの場合には空欄となります。バックアップ設定は主にバックアップのスケジュール実行で使用するもので、商用サポートで提供される追加機能に含まれます。従って、オープンソース版ではCONFIGはすべて空欄になります。

list-domains サブコマンドも --backupdir オプションが使用できます。その場合は、--backupdir オプションで指定したバックアップ・ディレクトリ上のバックアップについての一覧を表示します。--backupdir オプションがない場合は、デフォルトのバックアップ・ディレクトリのバックアップを一覧表示します。

2. ドメインのリストア手順

ドメインのリストアでは、以下のいずれかのバックアップ・ファイルを用いてドメインを復元します。

  • バックアップ・ディレクトリ上に存在する最新のバックアップ・ファイル
  • 任意のバックアップ・ファイル(ただし、デフォルトのバックアップ・ディレクトリ上のバックアップ・ファイルを除く)

リストア時には、ドメインは必ず停止している必要があります。サスペンドも不可なのは、そもそもリストアという行為は現在存在しているドメインを破壊することだからです(存在しているドメインが稼働状態にあるかどうかは別の話)。

リストア作業では主に restore-domain サブコマンドを使用し、補助的に list-backups サブコマンドを使用します。list-backups コマンドを用いることで、バックアップ・ディレクトリ上のバックアップ・ファイルの情報を確認し、どのバックアップを使用すべきかを判断することが出来ます。

2.1. バックアップ・ディレクトリを指定してリストアする

バックアップ・ディレクトリを指定してリストアする場合は、以下のコマンドを発行します。バックアップ・ファイルは、ディレクトリ上にある最新のものが使用されます。

asadmin restore-domain --backupdir バックアップ・ディレクトリ domain1

--backupdir オプションを省略した場合、デフォルトのバックアップ・ディレクトリを使用します。

最新でないバックアップを使用するには、次項の手順で直接バックアップ・ファイルを指定するか、バックアップ・ディレクトリから新しいバックアップを削除するかのいずれかを採ります。

2.2. 任意のバックアップ・ファイルを指定してリストアする

任意のバックアップ・ファイルを指定してリストアする場合は、以下のコマンドを発行します。

asadmin restore-domain --filename バックアップ・ファイルのパス domain1

3. バックアップとリストアの応用

バックアップとリストアを応用すると、以下のようなことも実現できます。

  • ドメイン管理サーバー(DAS)の移行
  • ドメインの複製(必要に応じてポート変更等の追加操作を行います)

また、商用サポートで提供されるバックアップ関連の追加機能には以下のようなものがあります。詳細は http://docs.oracle.com/cd/E26576_01/doc.312/e24928/domains.htm のそれぞれの項目を参照願います(注:バージョン3.1.2が対象のドキュメントです)。

  • 自動バックアップ設定 -- スケジュール、バックアップ・ディレクトリ、バックアップ対象(全ドメインまたは設定のみ)、オンライン・バックアップ、バックアップ・ファイル保持数を指定でき、複数の自動バックアップ設定を作成することも可能。asadminのcreate-backup-config、list-backup-config、delete-backup-config、enable-backup-config、disable-backup-config の各サブコマンドが該当する。
  • スケジューラ -- バックアップのスケジュール実行はこの機能を使用する。asadminの create-schedule、list-schedules、delete-schedule の各サブコマンドが該当する。
  • ドメインのサスペンドとレジューム(サスペンドからの復帰) -- 前述の通り、ドメインを停止することなくバックアップが可能になる。suspend-domain および resume-domain サブコマンドが該当する。

現在商用サポートでのみ提供されている機能も含めると、GlassFishも本格的なバックアップ機能を備えていることがわかるでしょう。


明日は「GlassFishのREST backend」と題して、REST管理チャネルのちょっと深い話をします。