本附录介绍在 Solaris 10 区域中安装和配置 Java ES 组件时会出现的问题,并就解决这些问题提供了一些建议的做法。本附录包含以下各节:
区域是 Solaris 10 操作系统对应用程序和资源的一种管理功能。此功能使操作系统以独立且安全的虚拟操作系统环境(区域)的形式呈现给应用程序。这些区域具有操作系统独立性的优点,并实现了某种程度的集中化资源管理。因此,通过在不同的区域中安装和运行应用程序,可将应用程序彼此隔离开来,而同时又能够以集中的方式来分配和管理某些操作系统资源。
从支持多个区域的操作系统的角度来看,操作系统资源包括诸如进程管理、内存、网络配置、文件系统、软件包注册表、用户帐户、共享库等资源,在某些情况下还包括已安装的应用程序。
多区域环境包括一个全局区域(默认操作系统)以及一个或多个非全局区域。全局区域包含可由全局(区域)管理员在非全局区域之间分配的资源。非全局区域具有以下特性:
安全性。通过在非全局区域中运行分布式服务,可在发生安全违规时减少可能的损失。在某一区域内成功地利用了软件安全性缺陷的入侵者将被限定于该区域。在非全局区域内可用的权限是全局区域内可用权限的一部分。
运行时隔离。非全局区域允许将多个应用程序部署在同一台计算机上,即使这些应用程序要求不同等级的安全性、要求以独占方式访问全局资源或是要求个性化配置。例如,通过使用与各个非全局区域相关联的不同 IP 地址,可将运行在不同区域中的多个应用程序绑定到同一网络端口。这样,可防止应用程序监视或截取彼此的网络通信流量、文件系统数据或进程活动。
管理隔离。在虚拟化操作系统环境中,可以对每个非全局区域进行单独管理。区域管理员(区别于全局管理员)在非全局区域中执行的操作(如创建用户帐户、安装和配置软件以及管理进程)不会影响到其他区域。
有以下两种类型的非全局区域:完全根区域 (whole root zone) 和稀疏根区域 (sparse root zone):
完全根区域。包含全局区域中现有文件系统的读/写副本。创建一个完全根区域后,安装在全局区域中的所有软件包便全部可供该完全根区域使用:系统会创建一个软件包数据库,并将所有文件复制到该完全根区域中,专供该区域独立使用。
稀疏根区域。仅包含全局区域中部分文件系统的读/写副本(由此得名为稀疏根),而其他文件系统则是作为回送虚拟文件系统从全局区域以只读方式进行挂载的。创建稀疏根区域后,全局管理员会选择与稀疏根区域共享的文件系统(默认情况下,将 /usr、/lib、/sbin 和 /platform 目录作为只读文件系统进行共享)。系统会将全局区域中安装的所有软件包提供给稀疏根区域使用:系统会创建一个软件包数据库,并将已挂载文件系统中的所有文件与该区域共享。
是选择使用完全根非全局区域还是稀疏根非全局区域,需要在资源效率与管理控制之间进行权衡。完全根区域提供了最大化管理控制的能力(独立性和隔离),但要占用更多的内存和其他资源;而稀疏根区域会优化可执行文件和共享库的有效共享(占用更少的磁盘空间),但要以牺牲管理独立性为代价。目前尚未针对稀疏根区域优于完全根区域的性能加以衡量;这很可能要视具体软件而定。
安装在全局区域中的软件包(默认情况下)可供所有非全局区域使用:这一过程称为软件包传播。(为了能够进行传播,新建的非全局区域必须已经完全引导,即,处于运行状态。)传播为安装在全局区域中的软件包提供了本地(非全局)可见性和可用性。传播使得应用程序软件包生命周期管理(安装、升级、卸载)由全局管理员集中执行,而应用程序配置和运行时管理则由(非全局)区域管理员执行。
对于完全根区域,传播通过将已安装的文件从全局区域自动复制到完全根区域以及自动同步注册表信息来实现。对于稀疏根区域,传播通过在全局区域和稀疏根区域之间共享的只读文件系统以及自动同步注册表信息来实现。
软件包到非全局区域的传播是在软件包层级使用内部软件包属性来控制的。对于这些属性的某些值(至少是默认值),可以通过使用 pkgadd —G 选项(它会覆盖属性值)在安装时禁用传播。某软件包安装后,便无法修改它的传播行为,除非将其卸载并重新安装。例如,修补程序无法更改软件包的传播行为;事实上,必须依照修补程序所要升级的软件包的传播行为来应用这些修补程序。
通过在不同的区域中运行应用程序来实现隔离与通过在不同计算机的操作系统中运行应用程序来实现隔离的效果大致相同。因此,为将 Java ES 组件隔离并保证其安全性,可在同一台计算机内的不同区域中安装、配置或运行这些组件,而不必在不同的计算机上安装、配置和运行它们。
以此方式合并 Java ES 组件还能够更加有效地利用资源。可将在未得到充分利用的专用计算机中运行的 Java ES 组件改为在一台计算机的不同非全局区域中运行。全局管理员可根据在不同区域中运行的组件的资源需求在这些区域之间动态分配资源。(注意,与目前通常具备的关于不同组件资源需求的知识和了解程度相比,要实现上述操作需要更多的知识及更深的了解。)
多区域环境还可以帮助实现其他目标:
版本分离。不同版本的 Java ES 组件并行集可在不同的区域中运行。这样,经过一段时间后,可从一个 Java ES 版本迁移到另一个版本。例如,一个非全局区域中的 Java ES 发行版本 4 组件可与另一个非全局区域中的 Java ES 发行版本 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 的安装和管理策略。
Java ES 组件分为不同的类型,如《Sun Java Enterprise System 5 技术概述》中所述。相应地,系统服务组件提供主要的 Java ES 基础结构服务,而服务质量组件用于增强这些系统服务。本文将这两种类型的 Java ES 组件统称为产品组件,可在 Java ES 安装程序内选择这些组件。
每个产品组件均依赖于一个或多个称为 Java ES 共享组件的本地共享库。共享组件会在产品组件安装期间由 Java ES 安装程序自动安装,具体安装哪些共享组件视所安装的产品组件而定。它们并不是在部署 Java ES 产品组件期间所逐个选择、安装或配置的。
为什么对 Java ES 使用区域?集中论述了 Java ES 产品组件对区域的使用:即,可在 Java ES 安装程序中明确选择并可在不同区域中安装和配置以实现所需的部署体系结构和功能的那些组件。但是,产品组件所依赖的共享组件对于如何在多区域环境中部署 Java ES 方面施加了许多限制。关于 Java ES 共享组件和区域有两个问题:
测试和支持 Java ES 共享组件与 Java ES 产品组件之间的大量(30 个左右)复杂交互具有一定的困难,它要求单一操作系统实例中的所有共享组件均同步为同一个 Java ES 版本。换言之,安装在非区域环境或 Solaris 10 环境内任一区域中的所有 Java ES 共享组件必须属于同一个版本。这一要求对于如何在多区域环境中使用 Java ES 方面施加了一定的限制。
这一同步要求包含以下含义:
不同版本的 Java ES 共享组件只能驻留在不同的区域中。例如,您可在一个区域中安装 Java ES 发行版本 4 共享组件,而在另外一个区域中安装 Java ES 发行版本 5 共享组件,但不能将这二者合并到同一个区域中。
如果升级了区域中的任何共享组件或新引入了更高版本的任何共享组件,则还要必须同时升级该区域中的所有其他共享组件。(共享组件必须向后兼容,所以发行版本 4 产品组件与发行版本 5 共享组件可以协同工作。)例如,假定在驻留有一个或多个发行版本 4 产品组件的区域中安装一个发行版本 5 产品组件。由于发行版本 5 产品组件需要一定数量的发行版本 5 共享组件,所以同步要求意味着必须在安装发行版本 5 产品组件的同时将驻留在该区域中的所有发行版本 4 共享组件均升级到发行版本 5。即使要安装的发行版本 5 产品组件需要的共享组件与事先安装在该区域中的那些共享组件不同,也要这样做。
在全局区域中安装共享组件并从中向外传播时(参见Java ES 传播策略),需特别注意使所有区域中的共享组件保持同步。否则,可能会出现早期版本的共享组件与已从全局区域传播过来的发行版本 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(默认情况下,它在稀疏根区域中是可写的)之下。有关更多信息,参见《适用于 UNIX 的 Sun Java Enterprise System 5 安装参考》
目前,在全局区域与非全局区域之间,尚未建立使 Java ES 产品组件(约 20 个)中的任一组件支持分离生命周期管理和配置/运行时管理的功能。不同产品组件采用的配置和升级方法不同。考虑到这种情况,目前尚不支持 Java ES 产品组件(Message Queue 除外)的传播。有关更多信息,参见Java ES 传播策略。
Java ES 安装程序根据为什么对 Java ES 使用区域?中论述的使用方案和Java ES 组件的区域限制中论述的 Java ES 组件要求和限制,为 Java ES 产品组件的安装(和升级)以及共享组件的同步提供有条件的区域支持。安装程序中已经实现策略,以免在安装和升级方案中出现问题。
Java ES 安装程序基于第 3 节中论述的限制实现了两个 Java ES 传播策略:
如果将产品组件安装到全局区域中,则默认情况下设置为不会传播到非全局区域(Message Queue 例外)。因此,非全局区域既不能在其注册表中看到这些组件,也无权访问这些已安装的组件。
如果将共享组件安装到全局区域中(例如,作为产品组件安装的一部分),则设置为会传播到非全局区域中。因此,非全局区域会在其注册表中看到这些组件,而且有权访问已安装的共享组件。此策略有助于强制执行Java ES 共享组件和区域中所述的在任何区域内都对共享组件版本进行同步的要求。
Java ES 安装程序可以安装产品组件以及为每个产品组件提供支持所需的共享组件。在安装所选产品组件之前,安装程序会检查是否存在当前及先前版本的共享组件。如果安装程序检测到所选组件所需的共享组件属于先前版本或是缺少,则安装程序将会升级目前安装的所有共享组件,并安装所选组件所需的任何缺少的共享组件。该行为满足了同步共享组件的要求,它作用于非区域操作系统、全局区域以及所有非全局区域。
不过,此行为有两种例外情况:
在稀疏根区域中,有些共享组件无法进行安装或升级(参见共享组件和稀疏根区域),安装将会停止,直到已在全局区域中安装或升级了此类共享组件。安装程序会提供以下消息:“所选组件所需的以下共享组件无法在稀疏根区域中安装或升级。请在继续操作之前在全局区域中安装或升级这些共享组件。使用“所有共享组件”选项。”有关更多信息,参见同步所有共享组件。
在全局区域中,如果存在非全局区域,则无论任何特定产品组件是否需要,安装程序都会同步所有 Java ES 共享组件,而不是升级当前安装的所有共享组件及安装所选组件所需的任何缺少的共享组件。这会使所有共享组件都传播到非全局区域,从而确保非全局区域中不出现不同共享组件版本混合存在的情况。
Java ES 发行版本 5 中实现了一项新功能,以在几种特殊情况下升级以下产品组件:Application Server、Message Queue、HADB 和 Java DB。当 Java ES 安装程序检测到以上产品组件先前安装的发行版本时,会在“组件选择”页面中将它们标记为可升级。如果选择了这四个产品组件中的任何一个,安装程序将使用类似于全新安装所采用的逻辑对其进行升级。
需特别指出的是:在升级所选产品组件之前,安装程序会检查是否存在当前及先前版本的共享组件。如果安装程序检测到所选组件所需的共享组件属于先前版本或是缺少,则安装程序将会升级目前安装的所有共享组件,并安装所选组件所需的任何缺少的共享组件。该行为满足了同步所有共享组件中所述的要求,它作用于非区域操作系统、全局区域以及所有非全局区域。
不过,该行为有三种例外情况:
在稀疏根区域中,有些共享组件无法进行安装或升级,升级操作将会停止,直到已在全局区域中安装或升级了此类共享组件。(有关更多信息,参见共享组件和稀疏根区域)安装程序会提供以下消息:“所选组件所需的以下共享组件无法在稀疏根区域中安装或升级。请在继续操作之前在全局区域中安装或升级这些共享组件。使用“所有共享组件”选项。”(有关更多信息,参见同步所有共享组件。)
Application Server 和 Message Queue 均与 Solaris 操作系统捆绑在一起。其中任何一个版本都不能直接在稀疏根区域中升级。有关这两个捆绑组件的详细信息,参见产品组件特殊案例。
在全局区域中,如果存在非全局区域,则无论选择进行安装的任何组件是否需要,安装程序都会同步所有 Java ES 共享组件,而不是升级当前安装的所有共享组件及选择进行安装的组件所需的任何缺少的共享组件。这会使所有共享组件都传播到非全局区域,从而确保非全局区域中不出现不同共享组件版本混合存在的情况。
有许多特殊情况或例外可能会对非全局区域中产品组件的安装或升级产生干扰。特殊案例或例外情况中对这些情况做了介绍。
提供了一个共享组件同步选项,以满足必须同步所有共享组件情况的需要。如果选择“所有共享组件”选项,则无论任何特定产品组件是否需要,安装程序都会升级当前安装的所有共享组件并安装任何缺少的共享组件。此选项作用于全局区域和完全根区域,但不作用于稀疏根区域。
在以下两种基于区域的方案下,需要使用“所有共享组件”选项:
手动升级产品组件。对无法使用 Java ES 安装程序进行升级的产品组件进行升级时,需要使用“所有共享组件”选项来执行所需的共享组件安装和升级。
在稀疏根区域中安装或升级。某些共享组件无法在默认稀疏根区域中安装。(有关详细信息,参见安装产品组件和升级产品组件。)因此,视所涉及的共享组件而定,在稀疏根区域中运行安装程序时,可能必须先同步全局区域中的共享组件。在这种情况下,需要在全局区域中使用“所有共享组件”选项来执行共享组件安装和升级。
下表汇总了以上介绍的行为,其中说明了 Java ES 安装程序如何根据区域上下文以及在组件选择页面中选择的内容来处理共享组件。
表 A–1 涉及共享组件的安装程序行为
区域环境 |
所选的产品组件 |
所选的所有共享组件 |
---|---|---|
非区域操作系统 |
升级目前安装的所有共享组件 安装所选产品组件所需的任何缺少的共享组件 |
升级目前安装的所有共享组件 安装任何缺少的共享组件,无论任何特定的产品组件是否需要这些共享组件 |
全局区域:不包含任何非全局区域 |
升级目前安装的所有共享组件 安装所选产品组件所需的任何缺少的共享组件 |
升级目前安装的所有共享组件 安装任何缺少的共享组件,无论任何特定的产品组件是否需要这些共享组件 |
全局区域:存在非全局区域 |
升级目前安装的所有共享组件 安装任何缺少的共享组件,无论任何特定的产品组件是否需要这些共享组件 |
升级目前安装的所有共享组件并安装任何缺少的共享组件,无论任何特定的产品组件是否需要这些组件 |
完全根区域 |
升级目前安装的所有共享组件 安装所选产品组件所需的任何缺少的共享组件 |
升级目前安装的所有共享组件 安装任何缺少的共享组件,无论任何特定的产品组件是否需要这些共享组件 |
稀疏根区域 |
位于只读目录中的一些共享组件无法升级或安装。如果安装程序遇到此类共享组件,它会阻塞并指示用户在全局区域中管理这些共享组件。 |
位于只读目录中的一些共享组件无法升级或安装。因此,安装程序会阻塞并指示用户在全局区域中管理共享组件。 |
虽然在多区域环境中部署 Java ES 的总体目标是实现产品组件运行时隔离和有效率的资源利用,但多区域环境可用于实现许多更具体的目标。为什么对 Java ES 使用区域?中对上述内容做了论述。在多区域环境中安装和管理 Java ES 的策略在很大程度上取决于您试图要达到哪个目标。
表 A–2 对五种方案、每种方案所对应的安装和管理策略以及它们旨在实现的目标做了比较。尽管在某些情况下可以将这几种方案混在一起使用,但结果可能会出现问题,并可能会造成管理混乱。因此,Java ES 发行版本 5 通常不支持混合使用这几种方案的部署。
此外,由于方案 1 和方案 5 存在问题,因此 Java ES 发行版本 5 当前不支持这两种方案(虽然对于方案 5 而言,可能会针对特定产品组件制定出应对方法)。
表 A–2 Java ES 的区域安装和管理策略
方案(安装策略) |
管理策略 |
注释 |
|
---|---|---|---|
1:在启用传播的全局区域中安装产品组件和共享组件。在非全局区域中不安装任何组件。* |
组件生命周期管理:全局管理员 配置和运行时管理:区域管理员 |
集中式产品组件生命周期管理 产品组件配置和运行时管理的组织独立性 |
存在的问题:尚未针对 Java ES 产品组件(Message Queue 除外)提供支持。要求在全局区域中安装产品组件支持,在非全局区域中进行配置和运行时管理。 |
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 中的非全局区域安装。)
如果完全根区域中已经安装有发行版本 4(或更早版本)的 Java ES 组件,则不要在全局区域中安装 Java ES 发行版本 5 组件(既不能安装产品组件也不能安装共享组件),也不要在全局区域中将 Java ES 组件升级到发行版本 5。换言之,当完全根区域中已经预先安装 Java ES 时,不支持方案 2。(在全局区域中执行安装或升级可能会导致在完全根区域中并存有发行版本 4 和发行版本 5 文件。)
建议的安装做法:
如果要在不同的区域中运行不同的 Java ES 产品组件,则将产品组件安装在非全局区域中(方案 2、3、4、5)。
如果要在不同的区域中运行不同的 Java ES 产品组件,但要集中管理共享组件生命周期,则先在全局区域中同步共享组件,然后在非全局区域中安装产品组件(方案 2、3)。(建议每次在稀疏根区域中安装产品组件时都要采用此做法。)
如果要实现 Java ES 产品组件的版本分离,或是出于其他原因而分离 Java ES 产品组件的部署(方案 4),则在完全根区域中安装和配置所有 Java ES 组件。不要在全局区域中安装任何 Java ES 组件。
建议的升级做法:
如果要将所有已安装的发行版本 4 产品组件升级到发行版本 5,则先在全局区域中同步所有 Java ES 共享组件,然后在安装有所需产品组件的区域中执行这些组件的升级。(发行版本 5 共享组件向后兼容。)
如果已在非区域环境中安装有发行版本 4 或发行版本 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 由 Java ES 安装程序在全局区域中安装或升级时,默认情况下,该组件会被传播到非全局区域。
Application Server 与 Solaris 10 捆绑在一起,因此,该组件会在创建非全局区域时自动传播(除非事先将 Application Server 从全局区域中移除)。捆绑的 Application Server 以此方式传播时,Java ES 安装程序无法在稀疏根区域中对其(安装在 /usr 中)进行升级(默认情况下,/usr 为只读)。要解决这一问题,必须先将捆绑的 Application Server 从全局区域中手动移除,然后才能在稀疏根区域中安装发行版本 5 Application Server。
Sun Cluster 只能安装在全局区域中。非全局区域不支持 Sun Cluster。
Java ES 安装程序无法移除与 Solaris 10(Update 1 和 Update 2)捆绑在一起的 SJWC 软件包。这些旧版 SJWC 软件包已将 SUNW_PKG_ALLZONES 设置为 True,这表示该软件包在所有区域中必须完全相同,且只能由全局管理员进行管理。因此,必须在全局区域中手动移除这些软件包,以替换为正确的软件包。
如果 Java ES 安装程序正要尝试在非全局区域中安装选定组件并检测到 SJWC 需要进行升级,则安装程序将阻塞。在 Solaris 10(Update 1 和 2)上进行安装时会出现这种情况。
解决方法是:已经开发出一个特殊脚本,它将从全局区域中移除旧版 SJWC 软件包并将其替换为 SJWC 2.2.6,这一版本的软件包包含正确的区域传播属性设置。结果是,SJWC 2 2.6 将传播到所有非全局区域。
Common Agent Container。仅当安装 Sun Cluster、Sun Cluster GE 或 Sun Cluster 代理时才安装版本 1.1。如果选择“同步所有共享组件”选项,则不会安装该组件。此时仅安装版本 2.0。
Sun Explorer Data Collector。仅当安装 Sun Cluster、Sun Cluster GE 或 Sun Cluster 代理时才安装此共享组件。如果选择“所有共享组件”选项,则不会安装该组件。
提供以下示例,以概述 Java ES 区域支持所涉及的部分复杂情况。在本示例中,目标是在 Solaris 10 稀疏根区域中安装 Application Server。导致此安装复杂的原因是,Application Server(及其所依赖的 Message Queue)与 Solaris 10 捆绑在一起,因此,捆绑版本会在所有非全局区域中安装。有关更多信息,参见产品组件特殊案例。
要在稀疏根区域中安装 Application Server,必须先删除捆绑版本。(由于捆绑的版本安装在只读目录中,所以仅仅升级捆绑的版本无法在稀疏根区域中实现)。要从稀疏根区域中删除捆绑版本,必须在全局区域中将其删除。
此外,Message Queue 安装在全局区域中,这背离了表 A–2 中的方案 3。在该方案中,只将共享组件(而不是产品组件)安装在全局区域中。不过,Message Queue 无法安装在稀疏根区域中,因为它安装在只读目录中,所以必须在全局区域中对其进行安装和升级。
过程如下所示:
检验 Solaris 10 是否正在系统上运行。
本示例假定的是干净版 Solaris 10,全局区域中没有显示安装任何 Java ES 组件。
创建稀疏根区域(对其进行配置、安装并引导)。
此区域将包含所有已安装在全局区域中的 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。
借助第 2 步,与 Solaris 10 捆绑在一起的 Message Queue 版本已安装在稀疏根区域中。要升级稀疏根区域中的 Message Queue,只需在全局区域中对其进行升级,此升级将传播到稀疏根区域。(Message Queue 是唯一一个无法安装在稀疏根区域中的产品组件,但如果将其安装在全局区域中,则会传播到非全局区域。)
在全局区域中运行 Java ES 安装程序。
在组件选择面板中选择 "Message Queue"。请勿选择任何其他组件。
完成 Message Queue 的升级。
在稀疏根区域中安装 Application Server。
在稀疏根区域中运行 Java ES 安装程序。
在组件选择面板中选择 "Application Server"。请勿选择任何其他组件进行升级。如果已经选择 "Message Queue",请取消选择它。
完成 Application Server 的安装。