Sun Java System Application Server 9.1 部署规划指南

Application Server 组件

本节介绍了 Sun Java System Application Server 中的组件:

下图展示了这些 Application Server 组件如何使用提供高可用性的简单示例拓扑进行交互。在此示例拓扑中,一个管理员管理两台组成群集的计算机。HADB 和 Application Server 进程位于同一台计算机上。域管理服务器本身可能位于单独的计算机上,也可能位于承载应用服务器实例的任一计算机上。图表中的线表示通信或控制。

管理工具(如基于浏览器的管理控制台)与域管理服务器 (Domain Administration Server, DAS) 进行通信,后者又与节点代理和服务器实例进行通信。

服务器实例

服务器实例是在单个 Java 虚拟机 (Java Virtual Machine, JVM) 进程中运行的 Application Server。Application Server 已通过 Java 2 Standard Edition (J2SE) 5.0 和 1.4 认证。Application Server 安装中包含建议的 J2SE 分发包。

通常,在计算机上创建单个服务器实例就足够了,因为 Application Server 和附带的 JVM 均可扩展到多个处理器。但是,如果在一台计算机上创建多个实例,则将非常有益于进行应用程序隔离和滚动升级。在某些情况下,可以在多个管理域中使用具有多个实例的大型服务器。管理工具可简化在多台计算机中创建、删除和管理服务器实例的过程。

管理域

管理域(或简称)是一组统一管理的服务器实例。服务器实例属于单个管理域。域中的实例可以在不同的物理主机上运行。

您可以从某个 Application Server 安装中创建多个域。通过将服务器实例分组到域中,不同的组织和管理员可以共享单个 Application Server 安装。每个域都有自己的独立于其他域的配置、日志文件和应用程序部署区域。更改某个域的配置不会影响其他域的配置。同样,在某个域上部署应用程序不会将其部署到任何其他域,或在任何其他域中显示该应用程序。在任何给定时间,管理员只能通过一个域的验证,因而只能在该域中执行管理操作。

域管理服务器 (Domain Administration Server, DAS)

每个域都具有一个域管理服务器 (Domain Administration Server, DAS),这一特别指定的应用服务器实例用于承载管理应用程序。DAS 会对管理员进行验证,接受来自管理工具的请求,并与域中的服务器实例进行通信以执行请求。

管理工具是指 asadmin 命令行工具,即基于浏览器的管理控制台。Application Server 还提供了基于 JMX 的 API 以进行服务器管理。管理员每次只能查看和管理单个域,从而强制进行安全分离。

DAS 有时也称为管理服务器默认服务器。之所以称为默认服务器是因为,它是某些管理操作的默认目标。

由于 DAS 是一个应用服务器实例,因此,它也可以承载用于测试的 J2EE 应用程序。但是,不要使用它来承载生产应用程序。例如,如果尚未创建用于承载生产应用程序的群集和实例,您可能希望将应用程序部署到 DAS 中。

DAS 保存一个系统信息库,其中包含其域和部署的所有应用程序的配置。如果 DAS 处于不活动状态或出现故障,则将不会影响活动服务器实例的性能或可用性,但无法进行管理更改。在某些情况下,为了安全起见,有意地停止 DAS 进程可能是非常有用的;例如,停止 DAS 进程以冻结生产配置。

系统提供了一些管理命令,用于备份和恢复域配置和应用程序。通过使用标准的备份和恢复步骤,您可以快速恢复工作配置。如果 DAS 主机出现故障,您必须创建新的 DAS 安装才能恢复以前的域配置。有关说明,请参见《Sun Java System Application Server 9.1 管理指南》中的“重新创建域管理服务器”

Sun Cluster 数据服务通过转移 DAS 主机 IP 地址故障和使用全局文件系统来提供高可用性的 DAS。这种解决方案提供了几乎持续可用的 DAS 和系统信息库,从而避免出现多种类型的故障。Sun Cluster Data Services 随 Sun Java Enterprise System 附带提供,也可以与 Sun Cluster 一起另行购买。有关更多信息,请参见 Sun Cluster Data Services 文档。

群集

群集是命名的服务器实例集合,这些实例共享相同的应用程序、资源以及配置信息。您可以将不同计算机上的服务器实例分组到一个逻辑群集中并将其作为一个单元来管理。您可以使用 DAS 轻松控制多机群集的生命周期。

群集可以实现水平可伸缩性、负载平衡和故障转移保护。根据定义,群集中的所有实例都具有相同的资源和应用程序配置。当群集中的服务器实例或计算机出现故障时,负载平衡器检测到该故障,会将通信从出现故障的实例重定向至群集中的其他实例,并恢复用户会话状态。由于群集中所有实例上的应用程序和资源都相同,因此一个实例可以故障转移至群集中的任何其他实例。

群集、域和实例是相关的,如下所示:

节点代理

节点代理是一个轻量级进程,它在每台承载服务器实例的计算机上运行,其中包括承载 DAS 的计算机。节点代理:

每个物理主机对其所属的每个域都必须至少具有一个节点代理。如果物理主机包含来自多个域的实例,则每个域需要有一个节点代理。虽然允许在主机上为每个域设置多个节点代理,但这样做并没有什么好处。

因为节点代理用于启动和停止服务器实例,所以它必须始终保持运行。因此,在操作系统引导时,将启动该代理。在 Solaris 和其他 Unix 平台上,可通过 inetd 进程来启动节点代理。在 Windows 上,可以将节点代理指定为 Windows 服务。

有关节点代理的更多信息,请参见《Sun Java System Application Server 9.1 高可用性管理指南》中的第 8  章 “配置节点代理”

命名配置

命名配置是一个抽象概念,用于封装 Application Server 属性设置。群集和独立服务器实例引用命名配置以获取其属性设置。通过使用命名配置,J2EE 容器的配置独立于其所在的物理计算机,但特定细节除外,例如 IP 地址、端口号以及堆内存量。使用命名配置可以为 Application Server 管理提供强大的功能和较高的灵活性。

要应用配置更改,只需更改命名配置的属性设置,这样引用它的所有群集和独立实例便可获取更改。仅当删除了对命名配置的所有引用后,才能删除该命名配置。每个域可以包含多个命名配置。

Application Server 附带提供一个名为 default-config 的默认配置。该默认配置已进行了优化,以便在 Application Server Platform Edition 中提高开发者的生产效率以及在 Application Server Enterprise Edition 中提供较高的安全性和可用性。

您可以根据该默认配置创建自己的命名配置,并根据自身需要对其进行自定义。请使用管理控制台和 asadmin 命令行实用程序来创建和管理命名配置。

HTTP 负载平衡器插件

负载平衡器可以在多个物理计算机中分配工作负载,从而提高系统的整体吞吐量。Application Server Enterprise Edition 包含用于 Sun Java System Web Server、Apache Web Server 以及 Microsoft Internet Information Server 的负载平衡器插件。

负载平衡器插件接受 HTTP 和 HTTPS 请求,然后将请求转发到群集中的某个应用服务器实例。如果某个实例出现故障、变得不可用(由于网络故障)或无法响应,则会将请求重定向到现有的可用计算机。负载平衡器还可识别故障实例何时恢复并相应地重新分配负载。

对于简单的无状态应用程序,一个负载平衡群集可能就足够了。但是,对于具有会话状态的重点应用程序,请将负载平衡群集与 HADB 一起使用。

要为系统设置负载平衡,除了 Application Server 以外,还必须安装 Web 服务器和负载平衡器插件。然后,您必须:

参与负载平衡的服务器实例和群集必须具有同构环境。通常,这意味着服务器实例均引用相同的服务器配置、可以访问相同的物理资源,以及具有部署到其上的相同的应用程序。同构环境确保了在出现故障前后,负载平衡器可以始终在群集中的活动实例之间平均分配负载。

可以使用 asadmin 命令行工具来创建负载平衡器配置,将对群集和服务器实例的引用添加到该配置中,启用负载平衡器对群集的引用,为应用程序启用负载平衡,选择创建运行状况检查器,生成负载平衡器配置文件,最后将负载平衡器配置文件复制到 Web 服务器的 config 目录中。管理员可以创建脚本以自动完成整个过程。

有关更多详细信息以及完整的配置说明,请参见《Sun Java System Application Server 9.1 高可用性管理指南》中的第 5  章 “配置 HTTP 负载平衡”

会话持久性

J2EE 应用程序通常具有大量会话状态数据。Web 购物车是会话状态的一个典型示例。此外,应用程序可以高速缓存会话对象中需要频繁使用的数据。事实上,几乎所有包含大量用户交互的应用程序都需要保留会话状态。HTTP 会话和有状态会话 Bean (Stateful Session Bean, SFSB) 均包含会话状态数据。

虽然会话状态没有存储在数据库中的事务状态那样重要,但对于最终用户来说,在出现服务器故障时保留会话状态是非常有必要的。Application Server 提供了在系统信息库中保存或保留此会话状态的功能。如果承载用户会话的应用服务器实例出现故障,则可以恢复会话状态。会话可以继续进行,而不会丢失信息。

Application Server 支持以下类型的会话持久性存储:

利用内存持久性,状态可始终保存在内存中,但会在出现故障时丢失。利用 HA 持久性,Application Server 可将 HADB 用作 HTTP 和 SFSB 会话的持久性存储。利用文件持久性,Application Server 可序列化会话对象,并将其存储到由会话管理器属性指定的文件系统位置。对于 SFSB,如果未指定 HA,则 Application Server 会将状态信息存储在此位置的 session-store 子目录中。

对需要保存的 SFSB 状态更改进行检查称为检查点操作。如果启用检查点操作,则通常会在完成任何涉及 SFSB 的事务之后(即使该事务回滚)执行该操作。有关开发有状态会话 Bean 的更多信息,请参见《Sun Java System Application Server 9.1 Developer’s Guide》中的“Using Session Beans”。有关启用 SFSB 故障转移的更多信息,请参见《Sun Java System Application Server 9.1 高可用性管理指南》中的“有状态会话 Bean 故障转移”

除了 Application Server 正在处理的请求数以外,会话持久性配置设置还会影响 HADB 每分钟收到的请求数以及每个请求中的会话信息。

有关配置会话持久性的更多信息,请参见《Sun Java System Application Server 9.1 高可用性管理指南》中的第 9  章 “配置高可用性会话持久性和故障转移”

群集中的 IIOP 负载平衡

利用 IIOP 负载平衡,可以将 IIOP 客户机请求分配到不同的服务器实例或名称服务器。目标是将负载平均分布在群集中,从而提供可伸缩性。通过结合使用 IIOP 负载平衡以及 Sun Java System Application Server 中的 EJB 群集和可用性功能,不仅可以提供负载平衡,而且还可以提供 EJB 故障转移。

当客户机对某个对象执行 JNDI 查找时,命名服务会创建一个与特定服务器实例关联的 InitialContext (IC) 对象。从此时起,使用该 IC 对象进行的所有查找请求都会发送给相同的服务器实例。使用该 InitialContext 查找的所有 EJBHome 对象都托管在相同的目标服务器上。此后获得的所有 Bean 引用也创建在相同的目标主机上。这就有效地提供了负载平衡,原因是所有客户机都在创建 InitialContext 对象时随机使用动态目标服务器的列表。如果目标服务器实例发生故障,查找或 EJB 方法调用会将故障转移到另一个服务器实例。

例如,图中显示的 ic1、ic2 和 ic3 是在 Client2 的代码中创建的三个不同 InitialContext 实例。它们将被分配到群集的三个服务器实例中。因而,此客户机创建的 Enterprise JavaBeans 便会随之分布到这三个实例中。Client1 仅创建一个 InitialContext 对象,并且来自此客户机的 Bean 引用仅位于服务器实例 1 上。如果服务器实例 2 出现故障,ic2 上的查找请求会将故障转移到另一个服务器实例(不一定是服务器实例 3)。对于服务器实例 2 上以前承载的 Bean,还会自动将对其进行的任何 Bean 方法调用重定向到另一个实例(如果此操作安全)。虽然查找故障转移是自动完成的,但 Enterprise JavaBeans 模块将仅在安全时才重试方法调用。

IIOP 负载平衡和故障转移将透明地发生。在应用程序部署过程中无需特殊的步骤。在群集中添加或删除新实例将不会更新该群集的现有客户机视图。您必须在客户端手动更新端点列表。

消息队列和 JMS 资源

Sun Java System Message Queue (MQ) 为分布式应用程序提供了可靠的异步消息传送功能。MQ 是一个企业消息传送系统,它实现了 Java 消息服务 (Java Message Service, JMS) 标准。MQ 为 J2EE 应用程序组件提供了消息传送功能,例如,消息驱动 Bean (Message-Driven Bean, MDB)。

Application Server 通过集成 Sun Java System Message Queue 来实现 Java 消息服务 (Java Message Service, JMS) API。Application Server Enterprise Edition 包含 MQ 企业版,该版本具有故障转移、群集和负载平衡功能。

对于基本 JMS 管理任务,请使用 Application Server 管理控制台和 asadmin 命令行实用程序。

对于高级任务(包括管理 Message Queue 群集),请使用 install_dir/imq/bin 目录中提供的工具。有关管理 Message Queue 的详细信息,请参见 Sun Java System Message Queue 管理指南

有关部署 JMS 应用程序和 MQ 群集以进行消息故障转移的信息,请参见Message Queue 代理部署规划