Sun Java System Application Server Enterprise Edition 8.1 管理指南 2005Q1 |
第 7 章
配置可用性和会话持久性本章介绍了如何在 Sun Java System Application Server Enterprise Edition 环境中配置会话持久性和可用性。它包含以下小节:
关于可用性和会话持久性需要会话持久性的原因
在应用程序会话进行时,属于会话的数据常常不会存储在传统的数据库中。例如,购物车的内容就是这样的数据。Sun Java System Application Server 提供了在系统信息库中保存或保留此会话数据的功能,这样,如果应用程序服务器实例出现故障,会话状态可以恢复并且会话可以继续进行而不会丢失信息。
在 J2EE 应用程序中,会话数据通常存储在 HTTP 会话或有状态会话 Bean (SFSB) 会话中。Sun Java System Application Server 同时支持 HTTP 会话和 SFSB 会话的状态持久性。还支持同时存储在 HTTP 会话和 SFSB 会话中的某些 J2EE 对象参考的故障转移,请参见 Developer's Guide。
具有高可用性的数据库 (HADB) 与 Sun Java System Application Server 捆绑在一起,可用作持久性存储库以便为会话数据提供高可用性。
会话持久性配置概述
为了成功完成会话持久性配置,请确保按其所列顺序执行以下步骤,因为前面的一个或多个步骤将作为执行后面一些步骤的先决条件。
- 为群集创建 HADB 数据库。请参见 Reference Manual 中的
configure-ha-cluster
命令的描述。- 为群集设置 HTTP 负载平衡。请参见第 3 章“配置负载平衡和故障转移”。
- 为应用程序服务器实例和 Web 或 EJB 容器(应支持会话持久性)启用可用性并配置会话持久性设置。选择以下方法之一:
- 请参见“有关配置可用性的管理控制台任务”。
- 请参见 Reference Manual 中的
configure-ha-persistence
命令的描述。
- 如果您不启用可用性,则可以为 SFSB 更改文件系统会话存储(如果需要)。请参见“在禁用可用性时配置 SFSB 会话存储”。
- 重新启动群集中的每个服务器实例。
- 为需要可用性的任何特定 SFSB 启用可用性,然后选择需要为其进行会话状态检查点操作的方法。请参见 Developer's Guide。
- 使每个应具有高可用性的 Web 模块可分布。请参见 Developer's Guide。
- 在部署期间,为 J2EE 应用程序、Web 模块或 EJB 模块启用可用性。在管理控制台中,选取“启用可用性”框,或结合使用
deploy
命令和设置为true
的--availabilityenabled
选项。
注
会话持久性与动态部署、动态重新装入和自动部署不兼容。这些部署功能适用于开发环境而非生产环境。有关如何禁用这些功能的信息,请参见第 5 章“部署应用程序”。
注
如果实例当前正在处理请求,请在重新启动该实例前停止它,这样,它就有足够的时间来处理它正在处理的请求。有关更多信息,请参见“禁用(停止)服务器实例或群集”。
可用性的级别
可用性可在五个不同级别启用:
要启用给定级别的可用性,它必须已在所有更高级别中启用。例如,要启用应用程序级别的可用性,必须在服务器实例级别和容器级别启用可用性。
给定级别的默认值是其上一级别的设置值。例如,如果已启用容器级别的可用性,则默认情况下,启用应用程序级别的可用性。
如果禁用了服务器实例级别的可用性,则启用其他任何级别的可用性都不生效。如果启用了服务器实例级别的可用性,则将启用所有级别的可用性,除非已明确禁用。
处于 HTTP 会话状态的单点登录的可用性
在单个应用程序服务器实例中,如果一个应用程序验证了用户,则运行在同一个实例上的其他应用程序不会对用户进行重新验证。这称为单点登录。有关单点登录的更多信息,请参见“检验单点登录”。
为了使 HTTP 会话故障转移到群集中另一个实例后该功能仍然可用,必须将单点登录信息保留在 HADB 中。首先启用服务器实例和 Web 容器的可用性,然后启用单点登录状态持久性。请参见“配置服务器实例级别的可用性”。
可以通过单个名称和密码的组合进行访问的应用程序组成了单点登录组。
对于与应用程序(是单点登录组的一部分)相对应的 HTTP 会话,如果其中一个会话超时,其他会话并不会失效,并且仍然可用。这是因为一个会话的超时不应影响其他会话的可用性。
作为这个行为的推论,如果一个会话超时并且您尝试从运行该会话的同一浏览器窗口访问相应的应用程序,则您无需再次进行验证。但是,将创建一个新的会话。
以属于含有其他两个应用程序的单点登录组的购物车应用程序为例。假设其他两个应用程序的会话超时值大于购物车应用程序的会话超时值。如果购物车应用程序的会话超时,并且您尝试从运行该会话的同一浏览器窗口运行购物车应用程序,则您无需再次进行验证。但是,前一个购物车将丢失,并且您必须创建一个新的购物车。即使运行购物车应用程序的会话已超时,其他两个应用程序也会继续照常运行。
类似地,可假定与其他两个应用程序中的任何一个应用程序对应的会话超时。当从运行该会话的同一浏览器窗口连接应用程序时,您无需再次进行验证。
注
此行为仅适用于会话超时情况。如果启用了单点登录并且您使用
HttpSession.invalidate()
令其中一个会话失效,则属于单点登录组的所有应用程序的会话都将失效。如果您尝试访问属于单点登录组的任一应用程序,则需要再次进行验证,系统将为访问该应用程序的客户机创建一个新的会话。
样例应用程序
以下目录包含用于演示 HTTP 和 SFSB 会话持久性的样例应用程序:
install_dir/samples/ee-samples/highavailability
install_dir/samples/ee-samples/failover
有关配置可用性的管理控制台任务在禁用可用性时配置 SFSB 会话存储
如果禁用了可用性,本地文件系统将用于 SFSB 状态钝化,但不是持久性。要更改 SFSB 状态的存储位置,请更改 EJB 容器中的“会话存储位置”设置。请参见“配置常规 EJB 设置”。
配置服务器实例级别的可用性
要使用管理控制台启用或禁用服务器实例级别的可用性,请执行以下步骤:
配置 Web 容器级别的可用性
要启用可用性或覆盖单个 Web 应用程序的可用性设置,请使用
sun-web.xml
文件中的设置。有关详细信息,请参见 Developer's Guide。要使用管理控制台启用或禁用 Web 容器的可用性,请执行以下步骤:
- 选择“Web 容器可用性”选项卡,然后选中“可用性服务”框。要禁用可用性,请取消选中该框。您还可以更改以下可选设置:
- 持久性频率:指定存储会话状态的频率。仅当持久性类型为
ha
时适用。允许的值包括:
web-method
——将响应发送回客户机之前,将在每个 Web 请求结束时存储会话状态。此模式为发生故障时完全更新会话状态提供了最好的保证。这是默认选项。time-based
——在后台按照reapIntervalSeconds
存储属性设置的频率存储会话状态。此模式不能保证完全更新会话状态。但是,它可以提供很大的性能改善,因为在每个请求之后都不存储状态。要设置此属性,请参见“配置存储属性”。
- 持久性范围:指定存储会话状态的量。仅当持久性类型为
ha
时适用。允许的值包括:
session
——每次都存储整个会话状态。此模式为正确存储任何可分发 Web 应用程序的会话数据提供了最好的保证。这是默认选项。modified-session
——如果会话状态已被修改,则存储整个会话状态。如果调用了HttpSession.setAttribute()
或HttpSession.removeAttribute()
,则系统将认为会话状态已被修改。您必须保证每次更改属性时都调用setAttribute()
。这不是 J2EE 规范的要求,但是此模式需要这样做才能正常工作。modified-attribute
——仅存储修改后的会话属性。要使此模式正常工作,您必须遵循一些指导原则。- 单点登录状态:选中此框以启用单点登录状态的持久性。要禁用持久性,请取消选中该框。
- HTTP 会话存储:如果更改了用于连接 HADB 的 JDBC 资源以获得会话持久性,您可以更改 HTTP 会话存储。有关详细信息,请参见 Reference Manual 中的
configure-ha-cluster
命令的描述。
- 单击“保存”按钮。
- 要更改影响会话持久性的其他可选设置,请参见“配置 Web 容器会话”。
- 展开“实例”节点。
- 选择服务器实例。
- 转至服务器实例页面。
- 重新启动服务器。
配置 EJB 容器级别的可用性
要启用可用性并为单个有状态会话 Bean (SFSB) 选择要执行检查点操作的方法,请使用
sun-ejb-jar.xml
文件中的设置。有关详细信息,请参见 Developer's Guide。要使用管理控制台来启用或禁用 EJB 容器的可用性,请执行以下步骤:
- 选择“EJB 容器可用性”选项卡,然后选中“可用性服务”框。要禁用可用性,请取消选中该框。您还可以更改以下可选设置:
如果将任一持久性类型设置为
file
,EJB 容器都将指定用于存储已钝化的会话 Bean 状态的文件系统位置。请参见“配置常规 EJB 设置”。文件系统的检查点操作对于内部测试很有用,但不受生产环境支持。- 单击“保存”按钮。
- 展开“实例”节点。
- 选择服务器实例。
- 转至服务器实例页面。
- 重新启动服务器。