本章介绍了 Sun Java SystemApplication Server Enterprise Edition 中的高可用性功能,包括以下主题:
无论硬件和软件故障,高可用性应用程序和服务均可持续提供其正常功能。Application Server 提供了 HTTP 请求和会话数据(HTTP 会话数据和有状态会话 Bean 数据)的高可用性。
Application Server 通过以下子组件和功能提供高可用性:
负载平衡器插件接受 HTTP 和 HTTPS 请求, 然后将请求转发至群集中的应用程序服务器实例。如果实例出现故障,变得不可用(由于网络故障)或无法响应,负载平衡器会将请求重定向至现有的可用计算机。负载平衡器还可识别故障实例何时恢复并相应地重新分布负载。Application Server Enterprise Edition 包含用于 Sun Java System Web Server 和 Apache Web Server 以及 Microsoft Internet Information Server 的负载平衡器插件。
负载平衡器通过在多台物理计算机中分布工作量来提高系统的整体吞吐量。它还可通过对 HTTP 请求的故障转移提供更高的可用性。对于要保留的 HTTP 会话信息,必须配置 HTTP 会话持久性。
对于简单的无状态应用程序,负载平衡群集可能足够了。但是,对于具有会话状态的重点应用程序,请将负载平衡群集与 HADB 一起使用。
参与负载平衡的服务器实例和群集具有同构环境。通常,这意味着服务器实例均引用相同的服务器配置、可以访问相同的物理资源,以及具有部署到其上的相同的应用程序。同构环境确保了在出现故障前后,负载平衡器可以始终在群集中的活动实例之间平均分布负载。
有关配置负载平衡和故障转移的信息,请参见第 4 章,配置负载平衡和故障转移。
Application Server Enterprise Edition 提供了高可用性数据库 (HADB),以实现 HTTP 会话和有状态会话 Bean 数据的高可用性存储。HADB 旨在通过负载平衡、故障转移和状态恢复等功能支持高达 99.999% 的服务和数据可用性。通常,您必须独立于 Application Server 来配置和管理 HADB。
Application Server 不承担状态管理职责,这有很大的优势。Application Server 实例在其生命周期内作为可伸缩和高性能的 Java™ 2 Platform, Enterprise Edition(J2EE™ 平台)容器运行,并将状态复制委托给外部高可用性状态服务。由于采用这种松散耦合的体系结构,因此可以非常轻松地向群集中添加应用服务器实例或从群集中删除应用服务器实例。HADB 状态复制服务可以单独伸缩,以获得最佳的可用性和性能。如果应用服务器实例同时还执行复制任务,J2EE 应用程序的性能将会降低,并会受到较长的垃圾收集暂停的限制。
有关规划和设置应用程序服务器安装(包括确定硬件配置、大小和拓扑)以通过 HADB 实现高可用性的信息,请参见《Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Deployment Planning Guide》中的“Planning for Availability”和《Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Deployment Planning Guide》中的第 3 章 “Selecting a Topology”。
群集是作为一个逻辑实体一起工作的 Application Server 实例的集合。群集为一个或多个 J2EE 应用程序提供了运行时环境。高可用性群集将状态复制服务与群集和负载平衡器集成在一起。
使用群集具有以下优点:
高可用性(通过允许为群集中的服务器实例提供故障转移保护来实现)。如果一个服务器实例出现故障,其他服务器实例将接管该服务器实例正在服务的请求。
可伸缩性(通过允许向群集中添加服务器实例从而增加系统的容量来实现)。负载平衡器插件会将请求分布到群集中的可用服务器实例。当管理员向群集中添加更多服务器实例时,无需中断服务。
群集中的所有实例具有以下特性:
引用相同的配置。
具有相同的一组已部署应用程序(例如,J2EE 应用程序 EAR 文件、Web 模块 WAR 文件或 EJB JAR 文件)。
具有相同的一组资源,因此具有相同的 JNDI 名称空间。
域中的每一个群集都具有唯一的名称;此外,该名称在所有节点代理名称、服务器实例名称、群集名称和配置名称中也必须是唯一的。此名称不能为 domain。您在群集上执行的操作与在非群集服务器实例上执行的操作相同(例如,部署应用程序和创建资源)。
群集的设置源自该群集可能与其他群集共享的命名配置。其配置不能被其他服务器实例或群集所共享的群集可视为具有独立配置。默认情况下,此配置的名称为 cluster_name-config,其中 cluster_name 是群集的名称。
能与其他群集或实例共享其配置的群集可视为具有共享配置。
群集、服务器实例、负载平衡器和会话的相互关系如下:
服务器实例不需要属于群集。但是,不属于群集的实例无法通过将会话状态从一个实例转移到其他实例来利用高可用性。
群集中的服务器实例可以由一台或多台计算机托管。您可以将不同计算机上的服务器实例组织为一个群集。
特定负载平衡器可以向多个群集中的服务器实例转发请求。您可以使用负载平衡器的此功能来执行联机升级,而不使服务受到损失。有关更多信息,请参见“配置群集”一章中的“使用多个群集进行联机升级而不使服务受到损失”。
一个群集可以从多个负载平衡器接收请求。如果群集由多个负载平衡器提供服务,则必须以完全相同的方式在每个负载平衡器上配置群集。
每个会话都依赖于特定的群集。因此,尽管您可以在多个群集上部署一个应用程序,但是会话故障转移将只能在单个群集中实现。
因此,对于群集中的服务器实例,群集充当的是会话故障转移的安全边界。在 Application Server 中,您可以使用负载平衡器和升级组件,而不使服务受到任何损失。
有关规划高可用性部署(包括评估硬件需求、规划网络配置和选择拓扑)的信息,请参见《Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Deployment Planning Guide》。本手册还对以下概念进行了高层次的介绍:
应用程序服务器组件,如节点代理、域和群集
群集中的 IIOP 负载平衡
HADB 体系结构
消息队列故障转移
有关开发和部署利用高可用性功能的应用程序的更多信息,请参见《Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide》。
有关如何配置和调优应用程序和 Application Server 以获得高可用性的最佳性能的信息,请参见《Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Performance Tuning Guide》,其中包括以下主题:
调优持久性频率和持久性范围
对有状态会话 Bean 执行检查点操作
配置 JDBC 连接池
会话大小
调优 HADB 磁盘使用、内存分配、性能和操作系统配置
配置负载平衡器以获得最佳性能
J2EE 应用程序通常具有大量会话状态数据。Web 购物车是会话状态的一个典型示例。此外,应用程序可以高速缓存会话对象中需要频繁使用的数据。事实上,几乎带有重要用户交互的所有应用程序都需要维护会话状态。HTTP 会话和有状态会话 Bean (stateful session bean, SFSB) 都具有会话状态数据。
保留故障服务器之间的会话状态对最终用户非常重要。为了获得高可用性,Application Server 提供了在 HADB 中保留会话状态的功能。如果托管用户会话的应用程序服务器实例出现故障,则可以恢复会话状态,并且会话可以继续进行而不会丢失信息。
有关如何设置高可用性会话持久性的详细说明,请参见第 8 章,配置高可用性会话持久性和故障转移。