GlassFish を起動・停止する方法(取扱注意)

この記事はGlassFish Advent Calendar 2013の6日目として新たに書き下ろしたものです。昨日は「『GlassFish 4でかんたんクラスタ構築』のちょっとディープな追補」という、濃い内容の記事でした。


今回はGlassFishで最も基本的な、サーバーの起動と停止について考えます。GlassFishの奥底に近いところまで突っ込みますので、くれぐれもご注意ください。

GlassFishの起動と停止には、お馴染みasadminコマンドを使います。以下をご覧ください。

  • 起動 asadmin start-domain domain1
  • 停止 asadmin stop-domain domain1

これだけで何か気付いた方は感が鋭いです。キーとなるのはdomainという単語です。

GlassFishサーバーの起動・停止コマンドコマンドがstart-server/stop-serverではなくstart-domain/stop-domainと、まるでドメインの起動・停止コマンドのような名前になっています。実際にこれらのコマンドはドメインを起動・停止するためのものですが、事実上サーバーの起動・停止コマンドとなっています。その理由を知るためには、Nucleus(GlassFishカーネルを含むサーバーとしての基盤)の動作モードについて理解しておく必要があります。

Nucleusの動作モードは、ドメイン管理サーバー(Domain Administration Server; DAS)、ノード(Node)、埋め込みサーバー(Embedded Server)の3種類あります。埋め込みサーバーは自身では起動・停止することができず、サーバーを埋め込んだ先のJava SEアプリケーションからGlassFishカーネルを直接操作します(埋め込みサーバーについては先日の記事「GlassFish Embedded Server」もあわせてご覧ください)。他の2つについてはnasminコマンド(asadminと機能的には同じです)で起動・停止しますが条件が異なります。

DASはドメインを構成し制御するための動作モードで、後述するノードの一形態でもあります。ドメインが動作するためにはDASが動作している必要があり、ドメインとDASは同時に起動するようになっています。また、DASが動作していない状態ではドメインは動作することができず、ドメインが停止しているのであればDASの動作は不要であるため、ドメインとDASは同時に停止するようにもなっています。ドメインの再起動は少し特殊で、GlassFish 4の場合は動作中のDASを停止せずにドメインだけ再起動を行います。DASとして動作するNucleusの起動・停止コマンドを以下にまとめます。

  • ドメイン起動 nadmin start-domain domain1
  • ドメイン停止 nadmin stop-domain domain1
  • ドメイン再起動 nadmin restart-domain domain1

同一サーバー上にドメインが1つだけ存在する場合は、ドメイン名(上記の例ではdomain1)を省略することができます。また、通常のGlassFishではnadminコマンドはasadminという名前になっていますが、これについては後述します。なお、ドメインの停止と再起動については管理コンソールから行うこともできますが、ドメイン起動のみnadminで行う必要があります。

DASではないノードは、ドメイン配下のいずれかのクラスタのインスタンスとして構成されていない場合は動作することができません。そのためノードそのものを起動・停止する方法は存在しません。インスタンスとして構成されたノードは、その種類により起動・停止方法が異なります。SSHノードおよびDCOMノードはDAS上から管理コンソールまたはnadminで起動・停止を行います。CONFIGノードはノードが存在するサーバー上からnadminで起動・停止を行います。ノードとして動作するNucleusの起動・停止コマンドを以下にまとめます。

SSHノード・DCOMノード:DAS上から、

  • インスタンス起動 nadmin start-instance instance-name
  • インスタンス停止 nadmin stop-instance instance-name
  • インスタンス再起動 nadmin restart-instance instance-name

CONFIGノード:ノードが存在するサーバー上から、

  • インスタンス起動 nadmin start-local-instance instance-name
  • インスタンス停止 nadmin stop-local-instance instance-name
  • インスタンス再起動 nadmin restart-local-instance instance-name

instance-nameはそれぞれのインスタンスに割り当てられた名前です。サーバー上にインスタンスが1つだけ存在する場合はインスタンス名を省略可能です(インスタンスを個別に起動・停止するような環境下でインスタンスが1つだけというのもレアなケースではありますが)。

なお、DASもノード分類上はCONFIGノードであり、それが存在するサーバー上から起動・停止コマンドを発行する点では共通しています。

asadminコマンドは通常GlassFishのインストールディレクトリ2箇所に存在しています。GlassFish 4の場合、具体的には以下のパスになります。

  • glassfish4/glassfish/bin/asadmin
  • glassfish4/bin/asadmin

これらはリンクではなく同一のコマンド、正確にはCLIフレームワークを呼び出すためのスクリプトになっています。

前者はNucleusのnadmin由来のもので、実質的には同じものです。nadminがNucleusのCLIを呼び出すのに対して、asadminはNucleusのCLIを拡張したものを呼び出していますが、実は機能面で拡張された箇所はありません。後者はJava EEサーバー製品としてのGlassFishにのみ存在するもので、pkgコマンドや更新ツールと並ぶサーバー管理コマンドという位置付けです。nadminはNucleusビルドと呼ばれる、Java EE実装を含まないNucleusだけのものに含まれ、通常のビルドではすべてasadminに置き換えられています。

実はNucleusにはstartserv/stopservという、サーバー起動・停止コマンドらしきものがあります(通常のGlassFishにも含まれます)が、これらの正体はnadmin start-domain/nadmin stop-domainと同じ動作をするスクリプトです。


明日はGlassFishのトリビア的な小ネタを1つ、ご紹介しようかと思っています。どれにするかはまだ決めていませんので、あしからず。