JBoss EAPのStandaloneモードとDomainモードはどちらを使えばいいですか?

Red Hat のソリューションアーキテクトの瀬戸です。

今回はお客様から表題のような質問を受けたので簡単にまとめます。

記事の3行サマリー

  • StandaloneモードとDomainモードはサーバー(群)をどのように管理するかの差だけ
  • StandaloneモードとDomainモードのどちらでもセッションレプリケーションなどの高可用性機能を使用できる
  • 台数が多い場合はStandaloneモードでAnsible/OpenShiftなどの自動化ツールを併用することがおすすめ

JBoss EAPの2つの管理モード

Red Hat JBoss Enterprise Application Platform (JBoss EAP) は、エンタープライズJavaアプリケーションの基盤として、2つの運用モードを提供しています。StandaloneモードとDomainモードです。

Standaloneモード:独立したサーバー運用

Standaloneモードは単体でサーバーを運用することができるJBoss EAPの運用モードです。 多くのサンプルではこちらが採用されており、何も考えずに使っているとこのモードになっています。サーバーの設定は各インスタンスが持つ独自の管理インターフェースを通じて個別に管理されます。管理者は、管理用のCLIやWebベースの管理コンソールといったツールを使用して、特定のインスタンスに直接接続し、設定変更やアプリケーションの管理を行います。

勘違いされているお客様も多いですが、Standaloneモードでもセッションレプリケーションなどの高可用性のための機能は使用することができます。デフォルトでもstandalone-ha.xmlという高可用性の機能が設定されたプロファイルが提供されていますので、Standaloneモードで高可用性のための機能を使用したい場合はそちらをベースとし、適切な設定をするようにしてください。

Domainモード:集中型のサーバー管理

Domainモードは一つ制御用のJBoss EAPサーバーを立ち上げて、そこから複数のJBoss EAPをまとめて管理することができるモードです。制御用のJBoss EAPサーバーには既存のEAPサーバーを使用することもできます。

ドメインモードの論理図(マニュアルより)

制御用のJBoss EAPサーバーからは、管理されているサーバーに対する処理を一括して行うことができます。サーバーの起動、停止、再起動やアプリケーションの更新など、Standaloneモードではそれぞれのサーバーに対して直接CLIを使うか、管理コンソール経由で設定を行わなければいけませんでしたが、それらの処理をまとめて制御用のJBoss EAPサーバーから行えるようになります。

Domainモードの詳細については第7章 JBoss EAP のマネージドドメインの設定 | 設定ガイド | Red Hat JBoss Enterprise Application Platform | 8.1 | Red Hat Documentation を参照してください。

Domainモードの本質的な問題

DomainモードではJBoss EAPをまとめて管理する事ができます。とても便利です。しかしながら、JBoss EAPしか管理ができないという致命的な弱点があります。一つのウェブシステムには多くの要素が含まれています。JBoss EAPが必要とされるようなシステムの場合、少なくとも、JBoss EAPの他にデータベースが稼働しているはずです。また、JBoss EAPやデータベースを稼働させているOSについても管理できなくていいのでしょうか?他にバッチとかが動いている場合、そちらも同時に管理する必要はありませんか?Domainモードは便利な機能ですが、JBoss EAPしか管理ができません。JBoss EAPはシステムの一部にしか過ぎず、JBoss EAPだけをまとめて管理ができても、システム運用上、必要十分ではないと言えます。

10年以上前、JavaはJavaVMという名前の通り、Javaという世界の中ですべてを完結できるような世界を構築しようとしていました。しかし、その後に出てきたDockerやコンテナオーケストレーションなどの技術により、すべてをJavaVMで行うよりも、その外側で制御をしたほうが良くなっています。そのため、JavaVMの思想の中で生まれ、作られてきたDomainモードについても現時点ではレガシーなものと言っていいでしょう。いまだに要件としてはDomainモードが必要とされる場合もありますが、多くの場合では技術的にというよりは政治的に必要とされるものになっています。これはJBoss EAPだけではなく、その他の一般的なJavaアプリケーションサーバーすべてについても言えることです。

Ansible/OpenShiftなどの外部自動化ツールを使った運用自動化

Red Hatでは自動化の製品として、AnsibleやOpenShiftを提供しています。これらはJBoss EAPのDomainモードより後に出てきた技術で、OSレイヤーから含めて、JBoss EAPだけではなくサーバー自体をまとめて管理することができます。

JBoss EAPのDomainモードと外部ツール(Ansible/OpenShift)での管理対象の差

JBoss EAPに限らずJavaアプリケーションサーバーを使ったシステムを運用していると、WARファイルの中身は更新されますが、アプリケーションサーバーから下のレイヤーについてはきちんと更新されていない場合があります。OSを含めてセキュリティパッチがきちんと当てられない理由の一つとして、アプリケーションサーバーより下のレイヤーについては集中的な管理ができていないことが挙げられます。最近はJakarta EE問題に対する知見もたまり、多くのお客様がJBoss EAP 7.XからJBoss EAP8.Xに移行しようとしています。これを機会にDomainモードへの依存を止めて、AnsibleやOpenShiftを利用した更に広い範囲での集中管理を行ってみてはどうでしょうか。

AnsibleでのJBoss EAPの運用自動化について興味がある人はRed Hat Developerの方に記事がありますので、そちらを参照してみてください。

まとめ

まとめると次のようなフローでモードを選定するとよいでしょう。

  • サーバーの台数は1台もしくは少数のみか?
    • はい → Standaloneモードを選択
    • いいえ → 次のステップへ
  • アプリケーションサーバーネイティブの集中管理機能が必須要件か?
    • はい → Domainモードを選択
    • いいえ → 次のステップへ
  • 強力な外部自動化ツール(Ansible/OpenShift等)が使用できるか?
    • はい → 自動化を前提としたStandaloneモードを選択
    • いいえ → 次のステップへ
  • サーバー数が5台以上、かつ設定変更が頻繁に発生するか?
    • はい → Domainモードを強く推奨
    • いいえ → Standaloneモードの方がシンプルである可能性が高い

当然、Domainモードと外部自動化ツールを併用することもできます。

JBoss EAPでは最近は起動可能なJARや自動プロビジョニングの仕組みもサポートされており、外部自動化ツールとの親和性が向上しております。それらの機能に興味がある人は前回の記事: JBoss EAP 8.1 で新しくサポートされた起動可能なJAR(Bootable jar)とGalleonによるサーバーの軽量化を試す - 赤帽エンジニアブログ を参照してください。

ぜひ運用を簡単にしていきましょう。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。