Sun Java Enterprise System 5 安装规划指南

附录 A Java ES 和 Solaris 10 区域

本附录介绍在 Solaris 10 区域中安装和配置 Java ES 组件时会出现的问题,并就解决这些问题提供了一些建议的做法。本附录包含以下各节:

什么是区域?

区域是 Solaris 10 操作系统对应用程序和资源的一种管理功能。此功能使操作系统以独立且安全的虚拟操作系统环境(区域)的形式呈现给应用程序。这些区域具有操作系统独立性的优点,并实现了某种程度的集中化资源管理。因此,通过在不同的区域中安装和运行应用程序,可将应用程序彼此隔离开来,而同时又能够以集中的方式来分配和管理某些操作系统资源。

从支持多个区域的操作系统的角度来看,操作系统资源包括诸如进程管理、内存、网络配置、文件系统、软件包注册表、用户帐户、共享库等资源,在某些情况下还包括已安装的应用程序。

多区域环境的结构

多区域环境包括一个全局区域(默认操作系统)以及一个或多个非全局区域。全局区域包含可由全局(区域)管理员在非全局区域之间分配的资源。非全局区域具有以下特性:

有以下两种类型的非全局区域:完全根区域 (whole root zone) 和稀疏根区域 (sparse root zone):

完全根区域与稀疏根区域

是选择使用完全根非全局区域还是稀疏根非全局区域,需要在资源效率与管理控制之间进行权衡。完全根区域提供了最大化管理控制的能力(独立性和隔离),但要占用更多的内存和其他资源;而稀疏根区域会优化可执行文件和共享库的有效共享(占用更少的磁盘空间),但要以牺牲管理独立性为代价。目前尚未针对稀疏根区域优于完全根区域的性能加以衡量;这很可能要视具体软件而定。

软件包传播

安装在全局区域中的软件包(默认情况下)可供所有非全局区域使用:这一过程称为软件包传播。(为了能够进行传播,新建的非全局区域必须已经完全引导,即,处于运行状态。)传播为安装在全局区域中的软件包提供了本地(非全局)可见性和可用性。传播使得应用程序软件包生命周期管理(安装、升级、卸载)由全局管理员集中执行,而应用程序配置和运行时管理则由(非全局)区域管理员执行。

对于完全根区域,传播通过将已安装的文件从全局区域自动复制到完全根区域以及自动同步注册表信息来实现。对于稀疏根区域,传播通过在全局区域和稀疏根区域之间共享的只读文件系统以及自动同步注册表信息来实现。

软件包到非全局区域的传播是在软件包层级使用内部软件包属性来控制的。对于这些属性的某些值(至少是默认值),可以通过使用 pkgadd —G 选项(它会覆盖属性值)在安装时禁用传播。某软件包安装后,便无法修改它的传播行为,除非将其卸载并重新安装。例如,修补程序无法更改软件包的传播行为;事实上,必须依照修补程序所要升级的软件包的传播行为来应用这些修补程序。

为什么对 Java ES 使用区域?

通过在不同的区域中运行应用程序来实现隔离与通过在不同计算机的操作系统中运行应用程序来实现隔离的效果大致相同。因此,为将 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 共享组件与 Java ES 产品组件之间的大量(30 个左右)复杂交互具有一定的困难,它要求单一操作系统实例中的所有共享组件均同步为同一个 Java ES 版本。换言之,安装在非区域环境或 Solaris 10 环境内任一区域中的所有 Java ES 共享组件必须属于同一个版本。这一要求对于如何在多区域环境中使用 Java ES 方面施加了一定的限制。

这一同步要求包含以下含义:

共享组件同步要求对 Java ES 安装程序在多区域环境中的行为施加了限制(有关更多信息,参见Java ES 安装程序中的区域支持),还会对在多区域环境中安装和升级 Java ES 产品组件的过程产生影响。

共享组件和稀疏根区域

影响在多区域环境中使用 Java ES 的另一个问题是,由于稀疏根区域中存在只读文件系统,因而许多共享组件都无法安装在稀疏根区域中。因此,必须将基目录为 /usr(默认情况下由全局区域共享的目录)的那些共享组件安装在全局区域中,以便能够在稀疏根区域中使用。

许多 Java ES 共享组件不能安装在稀疏根区域中意味着:要将依赖于此类共享组件的产品组件成功安装到稀疏根区域中,必须首先将这些共享组件安装到全局区域中然后再传播到非全局区域。

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 产品组件的安装(和升级)以及共享组件的同步提供有条件的区域支持。安装程序中已经实现策略,以免在安装和升级方案中出现问题。

Java ES 传播策略

Java ES 安装程序基于第 3 节中论述的限制实现了两个 Java ES 传播策略:

安装产品组件

Java ES 安装程序可以安装产品组件以及为每个产品组件提供支持所需的共享组件。在安装所选产品组件之前,安装程序会检查是否存在当前及先前版本的共享组件。如果安装程序检测到所选组件所需的共享组件属于先前版本或是缺少,则安装程序将会升级目前安装的所有共享组件,并安装所选组件所需的任何缺少的共享组件。该行为满足了同步共享组件的要求,它作用于非区域操作系统、全局区域以及所有非全局区域。

不过,此行为有两种例外情况:

升级产品组件

Java ES 发行版本 5 中实现了一项新功能,以在几种特殊情况下升级以下产品组件:Application Server、Message Queue、HADB 和 Java DB。当 Java ES 安装程序检测到以上产品组件先前安装的发行版本时,会在“组件选择”页面中将它们标记为可升级。如果选择了这四个产品组件中的任何一个,安装程序将使用类似于全新安装所采用的逻辑对其进行升级。

需特别指出的是:在升级所选产品组件之前,安装程序会检查是否存在当前及先前版本的共享组件。如果安装程序检测到所选组件所需的共享组件属于先前版本或是缺少,则安装程序将会升级目前安装的所有共享组件,并安装所选组件所需的任何缺少的共享组件。该行为满足了同步所有共享组件中所述的要求,它作用于非区域操作系统、全局区域以及所有非全局区域。

不过,该行为有三种例外情况:


注 –

有许多特殊情况或例外可能会对非全局区域中产品组件的安装或升级产生干扰。特殊案例或例外情况中对这些情况做了介绍。


同步所有共享组件

提供了一个共享组件同步选项,以满足必须同步所有共享组件情况的需要。如果选择“所有共享组件”选项,则无论任何特定产品组件是否需要,安装程序都会升级当前安装的所有共享组件并安装任何缺少的共享组件。此选项作用于全局区域和完全根区域,但不作用于稀疏根区域。

在以下两种基于区域的方案下,需要使用“所有共享组件”选项:

有关共享组件的 Java ES 安装程序行为摘要

下表汇总了以上介绍的行为,其中说明了 Java ES 安装程序如何根据区域上下文以及在组件选择页面中选择的内容来处理共享组件。

表 A–1 涉及共享组件的安装程序行为

区域环境 

所选的产品组件 

所选的所有共享组件 

非区域操作系统 

升级目前安装的所有共享组件 

安装所选产品组件所需的任何缺少的共享组件 

升级目前安装的所有共享组件 

安装任何缺少的共享组件,无论任何特定的产品组件是否需要这些共享组件 

全局区域:不包含任何非全局区域 

升级目前安装的所有共享组件 

安装所选产品组件所需的任何缺少的共享组件 

升级目前安装的所有共享组件 

安装任何缺少的共享组件,无论任何特定的产品组件是否需要这些共享组件 

全局区域:存在非全局区域 

升级目前安装的所有共享组件 

安装任何缺少的共享组件,无论任何特定的产品组件是否需要这些共享组件 

升级目前安装的所有共享组件并安装任何缺少的共享组件,无论任何特定的产品组件是否需要这些组件 

完全根区域 

升级目前安装的所有共享组件 

安装所选产品组件所需的任何缺少的共享组件 

升级目前安装的所有共享组件 

安装任何缺少的共享组件,无论任何特定的产品组件是否需要这些共享组件 

稀疏根区域 

位于只读目录中的一些共享组件无法升级或安装。如果安装程序遇到此类共享组件,它会阻塞并指示用户在全局区域中管理这些共享组件。 

位于只读目录中的一些共享组件无法升级或安装。因此,安装程序会阻塞并指示用户在全局区域中管理共享组件。 

将区域与 Java ES 配合使用的建议

虽然在多区域环境中部署 Java ES 的总体目标是实现产品组件运行时隔离和有效率的资源利用,但多区域环境可用于实现许多更具体的目标。为什么对 Java ES 使用区域?中对上述内容做了论述。在多区域环境中安装和管理 Java ES 的策略在很大程度上取决于您试图要达到哪个目标。

表 A–2 对五种方案、每种方案所对应的安装和管理策略以及它们旨在实现的目标做了比较。尽管在某些情况下可以将这几种方案混在一起使用,但结果可能会出现问题,并可能会造成管理混乱。因此,Java ES 发行版本 5 通常不支持混合使用这几种方案的部署。

此外,由于方案 1 和方案 5 存在问题,因此 Java ES 发行版本 5 当前不支持这两种方案(虽然对于方案 5 而言,可能会针对特定产品组件制定出应对方法)。

表 A–2 Java ES 的区域安装和管理策略

方案(安装策略) 

管理策略 

目标(为什么对 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,下面给出了几种建议的做法:

部署体系结构

表 A–2 中的方案描述和上文介绍的建议做法不包括针对多区域环境而建议采用的 Java ES 部署体系结构。此类体系结构将适合针对多计算机网络环境而创建的部署体系结构。也就是说,多区域环境的可用性并不会改变用于实现 Java ES 部署系统高性能、高可用性、可伸缩性、安全性和可维护性的基本部署设计方法。利用多区域环境,您能够将此类部署体系结构合并到更少的计算机中。

不过,有关如何使 Java ES 部署体系结构适应多区域环境的详细信息与前几节中所讨论的所需管理策略密切相关。部署体系结构还取决于用于实现高可用性的策略。

注意,表 A–2 和上文的建议做法不包括建议的所述方案实现过程。在某些情况下,Java ES 组件的安装顺序以及非本地区域的创建顺序可能会非常重要。

特殊案例或例外情况

有些 Java ES 共享组件和 Java ES 产品组件与 Solaris 10 捆绑在一起,这通常会引发许多特殊案例。借助捆绑,这些 Java ES 组件会存在于全局区域中,进而存在于从全局区域创建的任何非全局区域中。

产品组件特殊案例

共享组件特殊案例

说明性示例:在稀疏根区域中安装 Application Server

提供以下示例,以概述 Java ES 区域支持所涉及的部分复杂情况。在本示例中,目标是在 Solaris 10 稀疏根区域中安装 Application Server。导致此安装复杂的原因是,Application Server(及其所依赖的 Message Queue)与 Solaris 10 捆绑在一起,因此,捆绑版本会在所有非全局区域中安装。有关更多信息,参见产品组件特殊案例

要在稀疏根区域中安装 Application Server,必须先删除捆绑版本。(由于捆绑的版本安装在只读目录中,所以仅仅升级捆绑的版本无法在稀疏根区域中实现)。要从稀疏根区域中删除捆绑版本,必须在全局区域中将其删除。

此外,Message Queue 安装在全局区域中,这背离了表 A–2 中的方案 3。在该方案中,只将共享组件(而不是产品组件)安装在全局区域中。不过,Message Queue 无法安装在稀疏根区域中,因为它安装在只读目录中,所以必须在全局区域中对其进行安装和升级。

过程如下所示:

  1. 检验 Solaris 10 是否正在系统上运行。

    本示例假定的是干净版 Solaris 10,全局区域中没有显示安装任何 Java ES 组件。

  2. 创建稀疏根区域(对其进行配置、安装并引导)。

    此区域将包含所有已安装在全局区域中的 Java ES 组件,即,与 Solaris 10 捆绑在一起的 Message Queue 和 Application Server 的版本。

  3. 从全局区域中移除 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 步可以按相反的顺序来执行。)

  4. 在全局区域中安装 Java ES 5 共享组件。

    1. 在全局区域中运行 Java ES 安装程序。

    2. 在组件选择面板中选择“所有共享组件”。请勿选择任何其他组件。

    3. 完成共享组件的同步。现在,全局区域中的所有共享组件均已同步并传播到所有非全局区域。

  5. 在全局区域中升级 Message Queue。

    借助第 2 步,与 Solaris 10 捆绑在一起的 Message Queue 版本已安装在稀疏根区域中。要升级稀疏根区域中的 Message Queue,只需在全局区域中对其进行升级,此升级将传播到稀疏根区域。(Message Queue 是唯一一个无法安装在稀疏根区域中的产品组件,但如果将其安装在全局区域中,则会传播到非全局区域。)

    1. 在全局区域中运行 Java ES 安装程序。

    2. 在组件选择面板中选择 "Message Queue"。请勿选择任何其他组件。

    3. 完成 Message Queue 的升级。

  6. 在稀疏根区域中安装 Application Server。

    1. 在稀疏根区域中运行 Java ES 安装程序。

    2. 在组件选择面板中选择 "Application Server"。请勿选择任何其他组件进行升级。如果已经选择 "Message Queue",请取消选择它。

    3. 完成 Application Server 的安装。