この付録では、Solaris 10 ゾーンに Java ES コンポーネントをインストールおよび設定するときに起きる問題について説明し、それらの問題に対処するために推奨されているいくつかの手法を示します。この付録は、次の節で構成されています。
ゾーンは、Solaris 10 オペレーティングシステムのアプリケーションおよびリソース管理機能です。この機能により、オペレーティングシステムはアプリケーションに対して、分離およびセキュリティー保護された複数の仮想オペレーティングシステム環境 (ゾーン) として表されます。これらのゾーンを使用すると、オペレーティングシステムに独立性を持たせながら、ある程度の集中リソース管理が可能になるという利点があります。そのため、アプリケーションを互いに別々のゾーンにインストールおよび実行して分離しながらも、特定のオペレーティングシステムリソースを中央に割り当てて集中管理することが可能です。
複数のゾーンをサポートするオペレーティングシステムの観点から見れば、オペレーティングシステムリソースにはプロセス管理、メモリー、ネットワーク構成、ファイルシステム、パッケージレジストリ、ユーザーアカウント、共用ライブラリ、および場合によってはインストール済みのアプリケーションが含まれます。
複数ゾーン環境は、1 つの大域ゾーン (デフォルトのオペレーティングシステム) と 1 つ以上の非大域ゾーンで構成されます。大域ゾーンには、大域 (ゾーン) 管理者が複数の非大域ゾーンに割り振ることのできるリソースが含まれます。非大域ゾーンには次の機能があります。
セキュリティー。分散サービスを非大域ゾーンで実行すると、セキュリティー違反が発生した場合の損害を抑えることができます。あるゾーンでソフトウェアのセキュリティーの欠陥を突いて侵入に成功したとしても、侵入はそのゾーンに限られます。非大域ゾーン内で使用できる特権は、大域ゾーンで使用できる特権の一部のみです。
ランタイムの分離。複数のアプリケーションに異なるレベルのセキュリティー、大域リソースへの排他アクセス、または個別の設定が必要となる場合でも、非大域ゾーンを使用することで、それらのアプリケーションを同じコンピュータ上に配備することが可能となります。たとえば、異なるゾーンで実行中の複数のアプリケーションは、各非大域ゾーンに関連付けられている別個の IP アドレスを使用することで、同じネットワークポートにバインドできます。これにより、アプリケーションが互いのネットワークトラフィック、ファイルシステムデータ、プロセスの活動などを監視したり妨害したりすることが防止されます。
管理の独立。オペレーティングシステム環境を仮想化することで、非大域ゾーンをそれぞれ個別に管理できます。大域管理者ではなくゾーン管理者が非大域ゾーンで行う、ユーザーアカウントの作成、ソフトウェアのインストールと設定、プロセスの管理などのアクションは他のゾーンに影響しません。
非大域ゾーンには、完全ルートゾーンと疎ルートゾーンの 2 種類があります。
完全ルートゾーン: 大域ゾーン上に存在するファイルシステムの読み取り/書き込みコピーがあります。完全ルートゾーンが作成されると、大域ゾーン上にインストールされているすべてのパッケージは完全ルートゾーンで使用可能になります。パッケージデータベースを作成すると、ゾーンを専用かつ単独で使用するために、すべてのファイルが完全ルートゾーンにコピーされます。
疎ルートゾーン: 大域ゾーンに存在するファイルシステムの一部の読み取り/書き込みコピーのみがあり (そのために疎ルートという名前で呼ばれる)、それ以外のファイルシステムは大域ゾーンから読み取り専用でループバック仮想ファイルシステムとしてマウントされます。大域管理者は、疎ルートゾーンの作成時に、この疎ルートゾーンとどのファイルシステムを共有するかを選択します。デフォルトでは、/usr、/lib、/sbin、および /platform が読み取り専用ファイルシステムとして共有されます。大域ゾーンにインストールされているすべてのパッケージが、疎ルートゾーンで利用できるようになります。パッケージデータベースが作成され、マウントされているファイルシステム内のすべてのファイルがゾーンで共有されます。
完全ルート非大域ゾーンと疎ルート非大域ゾーンのどちらを使用するかは、リソースの効率化と管理統制のどちらに重点を置くかによって左右されます。完全ルートゾーンではメモリーや他のリソースを犠牲にして管理統制 (独立性や分離) を最大化できますが、疎ルートゾーンでは管理の独立性を犠牲にして実行可能ファイルや共用ライブラリが効率的に共用されるよう最適化されます (ディスク使用量はずっと少なくなる)。疎ルートゾーンが完全ルートゾーンよりどれだけパフォーマンスに優れているかを測る尺度は今のところありません。通常、それはソフトウェアによって異なります。
パッケージが大域ゾーンにインストールされると、そのパッケージはすべての非大域ゾーンでデフォルトで使用可能となります。このプロセスをパッケージの伝播といいます。この伝播が実行されるには、新たに作成された非大域ゾーンを完全にブートする、つまり実行状態にする必要があります。伝播によって、大域ゾーンにインストールされているパッケージが、ローカルつまり非大域ゾーンから表示および使用できるようになります。伝播によってアプリケーションパッケージのライフサイクル管理 (インストール、アップグレード、アンインストール) は大域管理者が一括して行えるようになりますが、アプリケーション設定とランタイム管理は (非大域) ゾーン管理者が行います。
完全ルートゾーンの場合、伝播は、大域ゾーンから完全ルートゾーンへのインストール済みファイルの自動コピーと、レジストリ情報の自動同期化によって行われます。疎ルートゾーンの場合、伝播は大域ルートゾーンと疎ルートゾーンとが共有する読み取り専用ファイルにより、レジストリ情報の自動同期化によって行われます。
非大域ゾーンへのパッケージの伝播は、内部パッケージ属性を使用してパッケージレベルで制御されます。これらの属性の値の一部、少なくともデフォルト値については、インストール時に pkgadd —G オプションを使用して属性値を上書きすることで、伝播を無効にすることができます。一度インストールした後は、パッケージをアンインストールしてインストールし直さないかぎり、パッケージの伝播の動作を変更できません。たとえば、パッチでパッケージの伝播の動作を変更することはできず、アップグレードする対象のパッケージの伝播の動作に合わせてパッチを適用する必要があります。
異なるゾーンで実行するアプリケーションどうしが互いに孤立している状態は、異なるコンピュータの複数のオペレーティングシステムでアプリケーションを実行するときの状態と似ています。ですから、異なるコンピュータ上で Java ES コンポーネントをインストール、設定、および実行することでそれぞれのコンポーネントを孤立させてセキュリティー保護する代わりに、同じコンピュータの中の異なるゾーンにそれらのコンポーネントをインストールし、設定および実行することができます。
そのようにして Java ES コンポーネントを統合することにより、リソースをより効率的に活用できるようにもなります。複数台の専用コンピュータを中途半端に使って実行していた Java ES コンポーネントを、1 台のコンピュータの複数の非大域ゾーンで実行することが可能になるからです。大域管理者は、ゾーンで実行するコンポーネントのリソース要件に応じて、異なるゾーンの間でリソースを動的に割り当てることができます。このことを実行するには、各種コンポーネントのリソース要件に関して詳細な知識と理解が必要になる場合があります。
複数ゾーン環境は、他の目的を達成する面でも役立ちます。
バージョンの分離: バージョンが異なる Java ES コンポーネントを、異なるゾーンで並行して実行させることができます。この方法で、時間をかけて Java ES のバージョンを変更できます。たとえば、Java ES Release 4 コンポーネントと Java ES Release 5 コンポーネントを別々の非大域ゾーンで並行して実行できます。このような形でバージョンの分離を行えるようにするために、ライフサイクル管理は、設定およびランタイム管理と同様、ゾーン管理者に委任されています。
ライフサイクル管理の集約: Java ES の制限により完全にはサポートされていませんが、ゾーンは Java ES コンポーネントのライフサイクル管理の集約を可能にします。コンポーネントのインストール、アップグレード、およびアンインストールは大域ゾーンで可能ですが、実行時の分離、セキュリティー、スケーラビリティー、およびその他の必要に備えて、設定と実行は複数の非大域ゾーンで行います。ライフサイクル管理の集約は、特定のコンポーネントのインスタンスがいくつも異なるゾーンで実行されている場合や、そのようなインスタンスが確実に同一のリリースバージョンに同期されるようにする場合に便利です。
たとえば、Application Server を大域ゾーンにインストールしておいて、複数のインスタンスをいくつかの非大域ゾーンで実行することもできます。さまざまな Application Server インスタンスが Access Manager、Portal Server、またはその他の Java ES コンポーネントをサポートできます。これらは、異なる非大域ゾーンの同一のコンポーネントでも異なるコンポーネントでもかまいません。あるいは、別々の開発チームが別々の Application Server インスタンスを異なるゾーンで使用するということも可能です。
このことを実現するために、ライフサイクル管理は大域管理者が行い、設定とランタイム管理はそれぞれのゾーン管理者に委任されています。この方法には、アップグレードなどのライフサイクル管理タスクを実行するときに、広範な調整が必要となります。
組織上の独立性: すべてが同じコンピュータ上で共存し実行する Java ES コンポーネントの配備またはそのランタイムインスタンスを、組織別に別個に維持管理することができます。たとえば、異なる開発者グループが Java ES コンポーネントの独自のインスタンスを使用したり、組織ごとにテスト、試作段階、本稼働用で異なる Java ES 配備を使用したりできます。組織上の独立性は様々な方法で達成できますが、その方法は Java ES のライフサイクル管理は集約しつつ設定とランタイム管理はゾーン管理者に委任するか、またはライフサイクル、設定およびランタイムのすべての管理機能をゾーン管理者に委任するかのどちらを目的とするかによって左右されます。
複数ゾーン環境で Java ES を使用して実現する目的、およびその目的に伴う使用のシナリオが異なれば、複数ゾーン環境への Java ES コンポーネントの配備と管理にも異なる方策が必要となります。複数のゾーンの独立性を利用して種々の Java ES コンポーネントとそのランタイムインスタンスを個別に管理するという目的があれば、一方では大域ゾーンの伝播機能を利用して Java ES コンポーネントのライフサイクル管理を簡素化するという目的もあります。
複数ゾーン環境で Java ES を使用するためのインストールおよび管理の方策については、Java ES ソフトウェアの性質ゆえに課せられる複数ゾーン環境の制約についていくらか説明した後で再検討します。
『Sun Java Enterprise System 5 技術の概要』で説明されているように、Java ES コンポーネントはさまざまなタイプにグループ分けされています。それによると、主な Java ES インフラストラクチャーサービスはシステムサービスコンポーネントによって提供されており、システムサービスはサービス品質コンポーネントによって機能が強化されています。この 2 種類の Java ES コンポーネントをここでは製品コンポーネント (Java ES インストーラ内で選択可能なコンポーネント) と呼ぶことにします。
どちらの製品コンポーネントも、Java ES 共有コンポーネントというローカルに共用される 1 つ以上のライブラリに依存します。共有コンポーネントは、Java ES インストーラで製品コンポーネントのインストール時に、インストールされる製品コンポーネントに応じて自動的にインストールされます。Java ES 製品コンポーネントの配備中に、それらが個別に選択されてインストールされたり、設定されることはありません。
「Java ES にゾーンを使用する理由」では、Java ES 製品コンポーネントによるゾーンの使用について論じました。製品コンポーネントは Java ES インストーラで明示的に選択することができ、それぞれ異なるゾーンにインストールして設定することで、希望する配備アーキテクチャーと機能を実現することができます。しかし、製品コンポーネントが依存する共有コンポーネントを使用することにより、Java ES を複数ゾーン環境に配備する方法にいくらかの制限が生じます。Java ES 共有コンポーネントとゾーンに関して、次の 2 つの問題があります。
Java ES 共有コンポーネントと Java ES 製品コンポーネントとの間には複雑な対話が 30 ほどもあり、それらをテストおよびサポートすることは難しいため、単一のオペレーティングシステムインスタンス内のすべての共有コンポーネントは必ず同じ Java ES バージョンに同期されなければなりません。言い換えると、非ゾーン環境にインストールされている、または Solaris 10 環境内の特定のゾーンにインストールされている、すべての Java ES 共有コンポーネントは同じバージョンでなければなりません。この要件によって、複数ゾーン環境で Java ES を使用できる方法に一定の制限が加えられます。
したがって、この同期要件は次のことをも意味します。
バージョンの異なる Java ES 共有コンポーネントは、別々のゾーンにしか配置できません。たとえば、Java ES Release 4 共有コンポーネントと Java ES Release 5 共有コンポーネントをそれぞれ別のゾーンにインストールすることはできますが、それらを組み合わせて 1 つのゾーンにインストールすることはできません。
あるゾーンのいずれかの共有コンポーネントをアップグレードするか、上位バージョンの新しい共有コンポーネントを導入する場合は、そのゾーンのすべての共有コンポーネントも同時にアップグレードする必要があります。共有コンポーネントは下位互換性が保たれている必要があるので、Release 4 製品コンポーネントが Release 5 共有コンポーネントと連動する上での問題はありません。たとえば、Release 5 製品コンポーネントが、1 つ以上の Release 4 製品コンポーネントが配置されているあるゾーンにインストールされているとします。Release 5 製品コンポーネントはいくつかの Release 5 共有コンポーネントを必要とするので、この場合の同期要件は、このゾーンに配置されているすべての Release 4 共有コンポーネントは Release 5 製品コンポーネントのインストールと同時に Release 5 にアップグレードする必要があるということになります。インストール中の Release 5 製品コンポーネントがゾーンにすでにインストールされているものとは異なる共有コンポーネントを必要とする場合であっても、この要件が適用されます。
共有コンポーネントが大域ゾーンにインストールされそこから伝播されるようになったなら (伝播ポリシーについては「Java ES 伝播ポリシー」を参照)、すべてのゾーンで共有コンポーネントの同期が保たれるよう細心の注意を払う必要があります。このことを怠ると、非大域ゾーンにある旧バージョンの共有コンポーネントと大域ゾーンから伝播された Release 5 共有コンポーネントとが混在しかねません。通常、「細心の注意を払う」とは、共有コンポーネントのライフサイクル管理が大域ゾーン内でのみ行われるようにすることを意味します。詳細については、表 A–2、および 「共有コンポーネントの特殊ケース」を参照してください。
共有コンポーネントの同期要件によって、Java ES インストーラが複数ゾーン環境で実行すべき内容に制限が課せられ (詳細は「Java ES インストーラでのゾーンサポート」を参照)、複数ゾーン環境で Java ES 製品コンポーネントをインストールおよびアップグレードする手順に影響が及びます。
複数ゾーン環境での Java ES の使用に影響するもう一つの問題は、疎ルートゾーンの読み取り専用ファイルシステムのために、多数の共有コンポーネントを疎ルートゾーンにインストールできないということです。そのため、ベースディレクトリが /usr (デフォルトで大域ゾーンによって共有されるディレクトリ) である共有コンポーネントを大域ゾーンにインストールして、疎ルートゾーンで使用できるようにする必要があります。
多数の Java ES 共有コンポーネントを疎ルートゾーンにインストールできないということは、それらの共有コンポーネントへの依存関係がある製品コンポーネントを疎ルートゾーンに正常にインストールする場合、まず共有コンポーネントを大域ゾーンにインストールして非大域ゾーンに伝播させなければならないということを意味します。
「Java ES にゾーンを使用する理由」で論じられた複数ゾーン環境での Java ES の使用の目的、およびそれに伴う使用のシナリオは、大域ゾーンの伝播機能を活用して Java ES 製品コンポーネントのライフサイクル管理を簡素化するものでした。たとえば、そのような使用のシナリオでは、Java ES 製品コンポーネントのライフサイクル管理を大域管理者が大域ゾーンで実行し、それらのコンポーネントの設定およびランタイム管理はゾーン管理者が非大域ゾーンで実行することが必要になります。
言い換えると、製品コンポーネントは大域ゾーンでインストールおよびアップグレードし、インスタンスは非大域ゾーンで設定および実行するということです。この使用シナリオは、ライフサイクル集中管理の利点と非大域ゾーンが提供する孤立化とセキュリティーとを兼ね備えています。
しかし、このシナリオは各製品コンポーネントを大域ゾーンにインストールし、非大域ゾーンで設定および実行できることを前提としています。このように処理を分けられるかどうかは、各製品コンポーネントの設定方法、設定と動的アプリケーションデータの格納場所、バイナリを実行して設定データを検出する方法、およびアップグレードの実行方法に依存します。たとえば、インストールまたはアップグレードの前後にスクリプトが何を実行するかによって左右される場合があります。スクリプトがコンポーネントインスタンスを開始または停止するか、設定データへのリンクを作成するか、それ以外にライフサイクル管理と設定管理との区別を付きにくくさせるタスクを実行するかというようなことです。
また、完全ルートゾーンと疎ルートゾーンのどちらで設定が実行されるかによって左右される場合もあります。たとえば、製品コンポーネントの設定スクリプトが読み取り専用ファイルシステムを /usr などの疎ルートゾーンに書き込んでいる場合や、/opt などの非デフォルトファイルシステムが疎ルートゾーンで共有されている場合には、コンポーネントの設定が失敗することがあります。
ほとんどすべての Java ES 製品コンポーネントは、デフォルトでは疎ルートゾーン内で書き込み可能である、/opt の下にインストールされます。詳細は、『Sun Java Enterprise System 5 インストールリファレンス (UNIX 版)』を参照してください。
現時点で、おおよそ 20 個の Java ES 製品コンポーネントについて、大域ゾーンと非大域ゾーンとの間でライフサイクル管理と設定/ランタイム管理の分離をサポートできるようになっていません。各種製品コンポーネントで設定とアップグレードに異なる方法が採用されています。このような事情により、Message Queue 以外の Java ES 製品コンポーネントの伝播は、現時点ではサポートされていません。詳細は、「Java ES 伝播ポリシー」を参照してください。
「Java ES にゾーンを使用する理由」で論じた使用のシナリオ、および「Java ES コンポーネントのゾーン制限」で論じた Java ES コンポーネントの要件と制限に基づいて、Java ES インストーラは、Java ES 製品コンポーネントのインストールおよびアップグレードと共有コンポーネントの同期に適したゾーンサポートを提供します。問題となりうるインストールおよびアップグレードシナリオを回避するために、インストーラにはポリシーも実装されています。
セクション 3 で論じた制限に基づいて、Java ES インストーラは次の 2 つの Java ES 伝播ポリシーを実装しています。
製品コンポーネントが大域ゾーンにインストールされたなら、それらは非大域ゾーンへと伝播しないようにデフォルトで設定されます (Message Queue は例外)。そのため、それらのコンポーネントは非大域ゾーンのレジストリに表示されず、インストールされたコンポーネントにアクセスすることもできません。
製品コンポーネントのインストールなどの一環として共有コンポーネントが大域ゾーンにインストールされると、共有コンポーネントは非大域ゾーンに伝播するよう設定されます。それにより、それらのコンポーネントは非大域ゾーンのレジストリに表示され、インストールされた共有コンポーネントにアクセスできるようになります。このポリシーは、「Java ES 共有コンポーネントとゾーン」で説明されているように、ゾーン内では共有コンポーネントのバージョンを同期させなければならないという要件を実施するのに役立ちます。
Java ES インストーラでは、製品コンポーネントとともに、各製品コンポーネントをサポートするために必要な共有コンポーネントもインストールできます。選択した製品コンポーネントをインストールする前に、インストーラは現行バージョンと以前のバージョンの共有コンポーネントがあるかどうかを確認します。インストーラが選択したコンポーネントに必要な共有コンポーネントが古いバージョンであるか存在しないことを検出すると、インストーラは現在インストールされているすべての共有コンポーネントをアップグレードし、選択したコンポーネントに必要で存在していない共有コンポーネントをすべてインストールします。この動作は「共有コンポーネントの同期」の要件を満たすものであり、非ゾーンオペレーティングシステム、大域ゾーン、およびすべての非大域ゾーンに適用されます。
しかし、この動作には次の 2 つの例外があります。
疎ルートゾーンでは、一部の共有コンポーネントをインストールまたはアップグレードできないため (「共有コンポーネントと疎ルートゾーン」を参照)、それらの共有コンポーネントを大域ゾーンでインストールまたはアップグレードするまでインストールは停止します。インストーラは次のようなメッセージを表示します。「選択したコンポーネントに必要となる次の共有コンポーネントは、疎ルートゾーンではインストールまたはアップグレードできません。それらの共有コンポーネントを大域ゾーンでインストールまたはアップグレードしてから、続行してください。「すべての共有コンポーネント」オプションを使用してください。」詳細は、「すべての共有コンポーネント」を参照してください。
大域ゾーンでは、非大域ゾーンが存在する場合、現在インストールされているすべての共有コンポーネントをアップグレードして、選択したコンポーネントに必要で存在していない共有コンポーネントをインストールすることは行われず、インストーラは特定の製品コンポーネントにとって必要かどうかにかかわりなく、すべての Java ES 共有コンポーネントを同期します。こうすることで、すべての共有コンポーネントは非大域ゾーンに伝播されるので、非大域ゾーンでバージョンの異なる共有コンポーネントが混在することはありません。
Java ES Release 5 には、製品コンポーネントをアップグレードする新しい機能が実装されており、Application Server、Message Queue、HADB、および Java DB に限って有効です。Java ES インストーラは以前にインストールされたこれらの製品コンポーネントのリリースバージョンを検出し、それらがアップグレード可能であることを「コンポーネントの選択」ページに示します。これら 4 つの製品コンポーネントから選択すると、インストーラは新規インストールに使用するのと同種の論理を使用して、それらのコンポーネントをアップグレードします。
詳しく説明すると、選択した製品コンポーネントをアップグレードする前に、インストーラは現行バージョンと以前のバージョンの共有コンポーネントがあるかどうかを確認します。インストーラが選択したコンポーネントに必要な共有コンポーネントが古いバージョンであるか存在しないことを検出すると、インストーラは現在インストールされているすべての共有コンポーネントをアップグレードし、選択したコンポーネントに必要で存在していない共有コンポーネントをすべてインストールします。この動作は「すべての共有コンポーネント」で説明する要件を満たすものであり、非ゾーンオペレーティングシステム、大域ゾーン、およびすべての非大域ゾーンに適用されます。
しかし、この動作には次の 3 つの例外があります。
疎ルートゾーンでは、一部の共有コンポーネントをインストールまたはアップグレードできないため、それらの共有コンポーネントを大域ゾーンでインストールまたはアップグレードするまでアップグレード操作は停止します (詳細は、「共有コンポーネントと疎ルートゾーン」を参照)。インストーラは次のようなメッセージを表示します。「選択したコンポーネントに必要となる次の共有コンポーネントは、疎ルートゾーンではインストールまたはアップグレードできません。それらの共有コンポーネントを大域ゾーンでインストールまたはアップグレードしてから、続行してください。「すべての共有コンポーネント」オプションを使用してください。」(詳細は、「すべての共有コンポーネント」を参照)。
Application Server と Message Queue はともに Solaris オペレーティングシステムにバンドルされています。これらのいずれのバージョンも、疎ルートゾーンでは直接アップグレードできません。これらのバンドルされている 2 つのコンポーネントの詳細については、「製品コンポーネントの特殊ケース」を参照してください。
大域ゾーンでは、非大域ゾーンが存在する場合、現在インストールされているすべての共有コンポーネントのアップグレードと、インストールを選択したコンポーネントに必要で存在していない共有コンポーネントのインストールは行われず、その時点でインストールを選択したコンポーネントに必要かどうかにかかわらず、インストーラがすべての Java ES 共有コンポーネントを同期します。こうすることで、すべての共有コンポーネントは非大域ゾーンに伝播されるので、非大域ゾーンでバージョンの異なる共有コンポーネントが混在することはありません。
非大域ゾーンの製品コンポーネントのインストールやアップグレードを妨げる、数多くの特殊なケースや例外があります。このようなケースについては、「特殊なケースまたは例外」で説明しています。
すべての共有コンポーネントを同期させなければならない状況に対応した、すべての共有コンポーネントの同期オプションが提供されています。「すべての共有コンポーネント」オプションを選択すると、インストーラは特定の製品コンポーネントにとって必要かどうかにかかわりなく、現在インストールされているすべての共有コンポーネントをアップグレードし、存在していない共有コンポーネントがあればインストールします。このオプションは大域ゾーンと完全ルートゾーンには適用されますが、疎ルートゾーンには適用されません。
「すべての共有コンポーネント」オプションは、次のようなゾーンに基づいた 2 つのシナリオで必要になります。
製品コンポーネントの手動によるアップグレード「すべての共有コンポーネント」オプションは、Java ES インストーラではアップグレードできない製品コンポーネントをアップグレードするときに必要となる、共有コンポーネントのインストールとアップグレードを行うために必要です。
疎ルートゾーンでのインストールまたはアップグレード一部の共有コンポーネントは、デフォルトの疎ルートゾーンにインストールできません (詳細は、「製品コンポーネントのインストール」および「製品コンポーネントのアップグレード」を参照)。そのため、疎ルートゾーンでインストーラを実行する場合、関係する共有コンポーネントによっては、まず大域ゾーンで共有コンポーネントを同期することが必要になることがあります。このケースで必要な共有コンポーネントのインストールとアップグレードを実行するには、大域ゾーンで「すべての共有コンポーネント」オプションを使用します。
前述の動作を要約すると、次の表のようになります。この表には、共有コンポーネントに対する Java ES インストーラの処理が、ゾーンコンテキストまたコンポーネント選択ページでの選択にどのように左右されるかを示します。
表 A–1 共有コンポーネントに関連するインストーラ動作
ゾーンコンテキスト |
製品コンポーネントを選択した場合 |
すべての共有コンポーネントを選択した場合 |
---|---|---|
非ゾーンオペレーティングシステム |
現在インストールされているすべての共有コンポーネントをアップグレードする 選択した製品コンポーネントに必要で、存在していない共用コンポーネントをすべてインストールする |
現在インストールされているすべての共有コンポーネントをアップグレードする 特定の製品コンポーネントにとって必要かどうかにかかわりなく、存在しないすべての共有コンポーネントをインストールする |
大域ゾーン: 非大域ゾーンなし |
現在インストールされているすべての共有コンポーネントをアップグレードする 選択した製品コンポーネントに必要で、存在していない共用コンポーネントをすべてインストールする |
現在インストールされているすべての共有コンポーネントをアップグレードする 特定の製品コンポーネントにとって必要かどうかにかかわりなく、存在しないすべての共有コンポーネントをインストールする |
大域ゾーン: 非大域ゾーンあり |
現在インストールされているすべての共有コンポーネントをアップグレードする 特定の製品コンポーネントにとって必要かどうかにかかわりなく、存在しないすべての共有コンポーネントをインストールする |
現在インストールされているすべての共有コンポーネントをアップグレードする 特定の製品コンポーネントにとって必要かどうかにかかわりなく、存在しないすべての共有コンポーネントをインストールする |
完全ルートゾーン |
現在インストールされているすべての共有コンポーネントをアップグレードする 選択した製品コンポーネントに必要で、存在していない共用コンポーネントをすべてインストールする |
現在インストールされているすべての共有コンポーネントをアップグレードする 特定の製品コンポーネントにとって必要かどうかにかかわりなく、存在しないすべての共有コンポーネントをインストールする |
疎ルートゾーン |
読み取り専用ディレクトリ内の一部の共有コンポーネントをアップグレードまたはインストールできない。このような共有コンポーネントを検出すると、インストーラは中断し、大域ゾーンの共有コンポーネントを管理するようユーザーに指示します。 |
読み取り専用ディレクトリ内の一部の共有コンポーネントをアップグレードまたはインストールできない。そのため、インストーラは中断し、大域ゾーンの共有コンポーネントを管理するようユーザーに指示します。 |
複数ゾーン環境への Java ES の配備には製品コンポーネントが実行時に独立性を持ちリソースを効率的に活用できるようにするという大まかな目的がありますが、複数ゾーン環境を使用するより具体的な目的がいくつも存在します。これについては 「Java ES にゾーンを使用する理由」で論じています。複数ゾーン環境での Java ES のインストールと管理の方策は、そのうちのどの目的を実現しようとしているかによって大きく左右されます。
表 A–2 では、5 つのシナリオ、それぞれに対応するインストールと管理の方策、およびそれによって実現しようとする目的を示します。これらのシナリオを組み合わせることが可能な場合もありますが、問題のある結果になったり、管理が混乱する恐れもあります。そのため、Java ES Release 5 では一般にこれらのシナリオを組み合わせた配備はサポートしていません。
また、シナリオ 1 とシナリオ 5 には問題があるため、現在 Java ES Release 5 ではサポートしていません。ただし、シナリオ 5 の場合は特定の製品コンポーネント用に適合させることが可能です。
表 A–2 Java ES のゾーンインストールおよび管理の方策
シナリオ (インストールの方策) |
管理の方策 |
目的 (「Java ES にゾーンを使用する理由」を参照) |
コメント |
---|---|---|---|
1: 製品コンポーネントと共有コンポーネントを大域ゾーンにインストールし、伝播を有効にする。非大域ゾーンにはコンポーネントをインストールしない。* |
コンポーネントのライフサイクル管理: 大域管理者 設定およびランタイム管理: ゾーン管理者 |
製品コンポーネントのライフサイクル管理を集約化 製品コンポーネントの設定およびランタイム管理を組織別に独立化 |
問題あり。Message Queue 以外の Java ES 製品コンポーネントにまだサポートされていない。 製品コンポーネントが、大域ゾーンへのインストールと非大域ゾーンでの設定およびランタイム管理をサポートしている必要がある。 |
2: 共有コンポーネントを大域ゾーンに、製品コンポーネントを完全ルートゾーンにインストールする |
共有コンポーネントのライフサイクル管理: 大域管理者 製品コンポーネントのライフサイクル管理: ゾーン管理者 設定およびランタイム管理: ゾーン管理者 |
共有コンポーネントのライフサイクル管理を集約化 製品コンポーネントのライフサイクル、設定、およびランタイム管理の組織別の独立化 |
すべてのコンポーネントが同じ Java ES バージョンを実行しているか、すべての完全ルートゾーンのすべての製品コンポーネントをアップグレードする場合は、おおかた適用可能。 |
3: 共有コンポーネントを大域ゾーンに、製品コンポーネントを疎ルートゾーンにインストールする** |
シナリオ 2 と同じ |
共有コンポーネントのライフサイクルの管理を集約化 製品コンポーネントのライフサイクル、設定、およびランタイム管理の組織別の独立化 シナリオ 2 のリソース効率をさらに向上 (「完全ルートゾーンと疎ルートゾーンのどちらを選択するか」を参照) |
疎ルートゾーンに製品コンポーネントをインストールする場合に、このシナリオを推奨します。一部の共有コンポーネントは疎ルートゾーンにインストールできない場合があるため、大域ゾーンへのインストールが必要となります。 |
4: 製品コンポーネントと共有コンポーネントを完全ルートゾーンにインストールする |
コンポーネントのライフサイクル管理: ゾーン管理者。設定およびランタイム管理: ゾーン管理者 |
バージョンの分離 |
どの共有コンポーネントおよび製品コンポーネントも大域ゾーンにインストールしないようにします。完全ルートゾーンの場合に推奨されるシナリオです。 |
5: 製品コンポーネントと共有コンポーネントを疎ルートゾーンにインストールする |
シナリオ 4 と同じ |
製品コンポーネントのライフサイクル、設定、およびランタイム管理の組織別の独立化 シナリオ 4 のリソース効率をさらに向上 (「完全ルートゾーンと疎ルートゾーンのどちらを選択するか」を参照) |
問題あり。疎ルートゾーンにインストールできない共有コンポーネントが多数あるため、通常は実現不可能。 |
* シナリオ 1 では、ゾーン環境を完全ルートと疎ルートとに区別しません。このシナリオは、非大域ゾーンにインストールする製品コンポーネントがないことを前提としています。非大域ゾーンへの製品コンポーネントのインストールは、シナリオ 2 〜 5 で扱います。
** シナリオ 3 は、/opt が疎ルートゾーン内の読み取り専用ディレクトリになっていないことを前提とします。/opt が読み取り専用であると、ほとんどの Java ES 製品コンポーネントは疎ルートゾーンにインストールできないため、代わりにシナリオ 1 のように、それらを大域ゾーンにインストールすることが必要になります。
表 A–2 を踏まえ、推奨されている実践事項を次にいくつか紹介します。
「Java ES にゾーンを使用する理由」にある目的の中から達成しようと思うものを選び、それを基にして Java ES ゾーンの配備方針を前もって計画します。表 A–2 のさまざまなシナリオに示されているように、目的が違えば、インストールや管理の方針も違ってきます。
シナリオを組み合わせることは避けてください。特に以下のオプションがあります。
Java ES ゾーンの配備と管理の方針をできるだけシンプルに保ちます。Java ES コンポーネントの完全ルート配備と疎ルート配備を同じコンピュータに混在させないでください。シナリオ 3 のような疎ルートゾーン配備をサポートするために必要となる手順と実践事項は、シナリオ 4 のような完全ルートゾーン配備と相容れないことがあります。
同じ Java ES 製品コンポーネントは、バージョンが違うとしても、大域ゾーンと非大域ゾーンの両方にはインストールしないでください。シナリオ 1 のような大域ゾーンのインストールシステムをアップグレードするために必要な手順は、シナリオ 4 のような非大域ゾーンのインストールシステムを破壊する場合があります。
Release 4 以前の Java ES コンポーネントが完全ルートゾーンにインストールされている場合は、Java ES Release 5 コンポーネントは製品コンポーネントも共有コンポーネントも大域ゾーンにインストールせず、大域ゾーンの Java ES コンポーネントを Release 5 にアップグレードしないでください。言い換えると、完全ルートゾーンに Java ES インストールシステムがすでに存在しているなら、シナリオ 2 はサポートされません。大域ゾーンでインストールまたはアップグレードを行うと、完全ルートゾーンに Release 4 と Release 5 のファイルが混在してしまう可能性があります。
インストールで推奨されている実践事項:
複数のゾーンでそれぞれ異なる Java ES 製品コンポーネントを実行する場合は、製品コンポーネントを非大域ゾーンにインストールします (シナリオ 2、3、4、5)。
複数のゾーンでそれぞれ異なる Java ES 製品コンポーネントを実行するものの、大域ゾーンで共有コンポーネントのライフサイクルの集中管理および共有コンポーネントの同期を行う場合は、製品コンポーネントを非大域ゾーンにインストールします (シナリオ 2、3)。製品コンポーネントを疎ルートゾーンにインストールする場合には必ず実践するよう推奨されています。
Java ES 製品コンポーネントをバージョンごとに分離させる場合、または他の理由で Java ES 製品コンポーネントの配備をそれぞれ独立させる場合は (シナリオ 4)、すべての Java ES コンポーネントを完全ルートゾーンにインストールし設定します。どの Java ES コンポーネントも大域ゾーンにインストールしないでください。
アップグレードで推奨されている実践事項:
インストールされているすべての Release 4 製品コンポーネントを Release 5 にアップグレードする場合、大域ゾーンのすべての Java ES 共有コンポーネントを同期してから、インストールされているゾーンにある希望する製品コンポーネントのアップグレードを実行します。Release 5 の共有コンポーネントには下位互換性があります。
Release 4 または Release 5 製品コンポーネントを非大域ゾーン環境にインストールしてあり、その環境に非大域ゾーンを追加し、その新しい非大域ゾーンに製品コンポーネントをインストールしようと思う場合は、必ず前述の推奨されている実践事項に沿った仕方で行ってください。したがって、場合によっては、大域ゾーンのコンポーネントをアンインストールして非大域ゾーンにインストールすることも必要になります。
表 A–2 のシナリオの説明と前述の推奨されている実践事項には、複数ゾーン環境用に推奨されている Java ES 配備アーキテクチャーに関する内容は含まれていません。このアーキテクチャーは、複数台のコンピュータが接続されているネットワーク環境用に作成された配備アーキテクチャーの改良版です。別の言い方をすれば、複数ゾーン環境を利用するからといって、Java ES 配備システムの高パフォーマンス、高可用性、スケーラビリティー、セキュリティー、および保守性を実現する基本的な配備設計の手法は変わりません。複数ゾーン環境を使用することで、このような配備アーキテクチャーを整理統合してより少ない台数のコンピュータで運用することが可能になります。
しかし、これまでのセクションで論じられてきたように、具体的にどのように Java ES 配備アーキテクチャーを複数ゾーン環境に改良するかは、採用する管理方針によって大きく左右されます。また、配備アーキテクチャーは高可用性を実現する方策にも依存します。
表 A–2 と前述の推奨されている実践事項には、説明されているシナリオを実装する推奨手順は含まれていません。場合によっては、Java ES コンポーネントをインストールする順序と非ローカルゾーンを作成する順序が重要になることがあります。
一部の Java ES 共有コンポーネントと一部の Java ES 製品コンポーネントが Solaris 10 にバンドルされていることが主な原因となっている特殊なケースがいくつかあります。このバンドルが理由となって、これらの Java ES コンポーネントは大域ゾーン、さらには大域ゾーンから作成される任意の非大域ゾーンに存在します。
Message Queue は Solaris 10 にバンドルされているため、先に大域ゾーンから Message Queue を削除していなければ、非大域ゾーンが作成されるときに Message Queue は自動的に伝播されます。Message Queue は疎ルートゾーンにインストールできません。Message Queue は、デフォルトで Java ES インストーラによって大域ゾーンでインストールまたはアップグレードされると、他の製品コンポーネントとはことなり、非大域ゾーンに伝播されます。
Application Server は Solaris 10 にバンドルされているため、先に大域ゾーンから Application Server を削除していなければ、非大域ゾーンが作成されるときに Application Server は自動的に伝播されます。このようにして伝播されると、バンドルされている Application Server (/usr にインストールされている) は、/usr がデフォルトで読み取り専用である疎ルートゾーンでは、Java ES インストーラを使用してアップグレードできません。この問題に対処するため、疎ルートゾーンに Release 5 Application Server をインストールする前に、バンドルされている Application Server を手動で大域ゾーンから削除する必要があります。
Sun Cluster は大域ゾーンにのみインストールできます。Sun Cluster は非大域ゾーンではサポートされていません。
Solaris 10 (Update1 および Update 2) にバンドルされている SJWC パッケージは Java ES インストーラでは削除できません。これらの古い SJWC パッケージでは SUNW_PKG_ALLZONES が True に設定されており、これはパッケージがすべてのゾーンで同一でなければならず、大域管理者によってのみ管理可能であることを意味します。したがって、大域ゾーンにあるこれらのパッケージは手動で削除して正しいパッケージで置き換える必要があります。
Java ES インストーラが非大域ゾーンに選択したコンポーネントをインストールしようとしているところで、SJWC のアップグレードが必要であることを検出すると、インストーラは停止します。この問題は、Solaris 10 の Update 1 および 2 へのインストール時に発生します。
回避方法として、古い SJWC パッケージを大域ゾーンから削除して、ゾーン伝播属性が正しく設定されている SJWC 2.2.6 に置き換える特別なスクリプトが開発されています。結果として、SJWC 2 2.6 はすべての非大域ゾーンに伝播されます。
共通エージェントコンテナ。バージョン 1.1 は、Sun Cluster、Sun Cluster GE、または Sun Cluster Agents がインストールされている場合にのみインストールされます。「すべての共有コンポーネント」オプションが選択されている場合は、インストールされません。その場合はバージョン 2.0 のみがインストールされます。
Sun Explorer データコレクタ。この共有コンポーネントは、Sun Cluster、Sun Cluster GE、または Sun Cluster Agents がインストールされている場合にのみインストールされます。「すべての共有コンポーネント」オプションが選択されている場合は、インストールされません。
次の例は、Java ES ゾーンサポートに伴う複雑さの一面を描き出すために用意されています。この例では、目的は Solaris 10 疎ルートゾーンに Application Server をインストールすることです。このインストールは、Application Server と、Application Server が依存関係にある Message Queue が Solaris 10 にバンドルされており複雑であるため、バンドルされているバージョンはすべての非大域ゾーンにインストールされます。詳細は、「製品コンポーネントの特殊ケース」を参照してください。
Application Server を疎ルートゾーンにインストールするには、まずバンドルされているバージョンを削除する必要があります。疎ルートゾーンのバンドルされているバージョンは、読み取り専用ディレクトリにインストールされているため、アップグレードが単純ではありません。バンドルされているバージョンを疎ルートゾーンから削除するには、それを大域ゾーンで削除する必要があります。
さらに、Message Queue は大域ゾーンにインストールされているので、表 A–2 のシナリオ 3 から出発することになり、その場合製品コンポーネントはインストールされず、共有コンポーネントのみが大域ゾーンにインストールされます。ただし、Message Queue は読み取り専用ディレクトリにインストールするため、疎ルートゾーンにインストールすることはできず、大域ゾーンでインストールとアップグレードを行う必要があります。
手順は次のとおりです。
ご使用のシステム上で Solaris 10 が実行中であることを確認します。
この例では、大域ゾーンに Java ES コンポーネントが何も明示的にインストールされていない、クリーンバージョンの Solaris 10 を想定しています。
疎ルートゾーンを作成し、設定、インストール、およびブートを行います。
このゾーンにはすでに大域ゾーンにインストールされている Java ES コンポーネント、つまり Solaris 10 にバンドルされているバージョンの Message Queue と Application Server がすべて組み込まれます。
バンドルされているバージョンの Application Server を大域ゾーンから削除します。
このことは、次のコマンドを使用して Application Server パッケージを手動で削除することにより行う必要があります。
pkgrm SUNWascmnse SUNWaslb SUNWasut ...
ここで、次のコマンドを使用することにより、完全セットのパッケージを入手できます。
pkginfo -I|grep -I application server
結果として、次のパッケージが組み込まれます。
SUNWascmnse, SUNWaslb, SUNWasut, SUNWasac, SUNWasdem, SUNWasman, SUNWaswbcr, SUNWasacee, SUNWashdm, SUNWasmanee, SUNWascml, SUNWasJdbcDrivers, SUNWasu, SUNWascmn, SUNWasjdoc, SUNWasuee
また、次のローカリゼーションパッケージも組み込まれる場合があります。
SUNWLocaleasacee, SUNWLocaleascmnse, SUNWLocaleasu, SUNWLocaleasuee
大域ゾーンからの Application Server の削除がステップ 2 で作成された疎ルートゾーンに伝播します。このステップとステップ 2 の順序を入れ替えることも可能です。
Java ES 5 共有コンポーネントを大域ゾーンにインストールします。
Java ES インストーラを大域ゾーンで実行します。
コンポーネント選択パネルから「すべての共有コンポーネント」を選択します。それ以外のコンポーネントは選択しないでください。
共有コンポーネントの同期を完了します。これで、すべての共有コンポーネントが大域ゾーンに同期され、すべての非大域ゾーンに伝播されました。
大域ゾーンの Message Queue をアップグレードします。
Solaris 10 にバンドルされているバージョンの Message Queue は、ステップ 2 によってすでに疎ルートゾーンにインストールされています。疎ルートゾーンの Message Queue をアップグレードするには、大域ゾーンの Message Queue をアップグレードするだけでよく、そのアップグレードが疎ルートゾーンに伝播します。Message Queue は、疎ルートゾーンにインストールできないものの、大域ゾーンにインストールすると非大域ゾーンに伝播する唯一の製品コンポーネントです。
Java ES インストーラを大域ゾーンで実行します。
コンポーネント選択パネルで Message Queue を選択します。それ以外のコンポーネントは選択しないでください。
Message Queue のアップグレードを完了します。
Application Server を疎ルートゾーンにインストールします。
Java ES インストーラを疎ルートゾーンで実行します。
コンポーネント選択パネルで Application Server を選択します。アップグレードにそれ以外のコンポーネントを選択しないでください。Message Queue が選択されている場合は、それを解除してください。
Application Server のインストールを完了します。