为 Liberty 配置会话持久性
如果必须在服务器重新启动或意外的服务器故障期间保留会话数据,那么可以配置 Liberty 以将会话数据持久存储到数据库。此配置可让多个服务器共享相同的会话数据,这样在发生故障转移时可以恢复会话数据。
关于此任务
要在 Liberty 中配置一个或多个服务器以将会话数据持久存储到数据库,请完成下列步骤。
过程
- 定义可以在您的所有服务器之间复用的共享会话管理配置。作为最低要求,您必须完成下列步骤:
- 启用 sessionDatabase-1.0 功能部件。
- 定义数据源:
<dataSource id="SessionDS" ... />
- 请参阅会话数据库配置中的数据源。
<httpSessionDatabase id="SessionDB" dataSourceRef="SessionDS" ... />
- 请参阅会话管理配置中的持久存储位置。
<httpSession storageRef="SessionDB" ... />
注: httpSession 元素的 storageRef 属性及 httpSessionDatabase 元素的 id 属性不是必需的。如果已启用 sessionDatabase-1.0 功能部件,并且 httpSessionDatabase 元素引用了有效的数据源,那么即使未设置 storageRef 属性,也会启用会话持久性。有关 httpSession 和 httpSessionDatabase 元素的详细信息,请参阅 Database Session Persistence。
例如,可以创建名称为 ${shared.config.dir}/httpSessionPersistence.xml 的文件,如下所示:<server description="Demonstrates HTTP Session Persistence Configuration"> <featureManager> <feature>sessionDatabase-1.0</feature> <feature>servlet-3.0</feature> </featureManager> <httpEndpoint id="defaultHttpEndpoint" host="*" httpPort="${httpPort}"> <tcpOptions soReuseAddr="true"/> </httpEndpoint> <fileset id="DerbyFiles" includes="*.jar" dir="${shared.resource.dir}/derby/client"/> <library id="DerbyLib" filesetRef="DerbyFiles"/> <jdbcDriver id="DerbyDriver" libraryRef="DerbyLib"/> <dataSource id="SessionDS" jdbcDriverRef="DerbyDriver"> <properties.derby.client user="user1" password="password1" databaseName="${shared.resource.dir}/databases/SessionDB" createDatabase="create"/> </dataSource> <httpSessionDatabase id="SessionDB" dataSourceRef="SessionDS"/> <httpSession storageRef="SessionDB" cloneId="${cloneId}"/> <application id="test" name="test" type="ear" location="${shared.app.dir}/test.ear"/> </server>
注: 配置多个服务器以将会话数据持久存储到同一个数据库时,这些服务器必须共享同一项会话管理配置。不支持任何其他配置。例如,不可能是一个服务器使用多行模式,而另一个服务器使用单行模式。HTTP Server 插件使用插入至 response/request 头的克隆标识来维护请求之间的会话亲缘关系。虽然克隆标识通常保持不变,但在 Liberty 中,克隆标识是在您首次启动服务器时生成的,如果您在指定 --clean 选项的情况下启动服务器,那么将重新生成克隆标识。在生产环境中使用时,手动分配克隆标识将确保该标识保持不变并且请求亲缘关系得到正确维护。此克隆标识对于每个服务器必须是唯一的,长度可为 8 到 9 个字母数字字符,并且在步骤 3 中指定。
- 在每个服务器中包括共享会话管理配置。例如,为名称为 s1 和 s2 的服务器实例创建两个 server.xml 文件,如下所示:
- ${wlp.user.dir}/servers/s1/server.xml
- ${wlp.user.dir}/servers/s2/server.xml
<server description="Example Server"> <include location="${shared.config.dir}/httpSessionPersistence.xml"/> </server>
请参阅 在配置文件中使用 include 元素。
- 在每个服务器的 bootstrap.properties 文件中指定唯一变量。
- ${wlp.user.dir}/servers/s1/bootstrap.properties
httpPort=9081 cloneId=s1
- ${wlp.user.dir}/servers/s2/bootstrap.properties
httpPort=9082 cloneId=s2
- ${wlp.user.dir}/servers/s1/bootstrap.properties
- 启动服务器之前,请为会话持久性创建表。
- 如果要更改缺省行大小、表名或表空间名称,请参阅 Database Session Persistence,以了解有关 httpSessionDatabase 元素的详细信息。
如果服务器是安装在其中一个分布式操作系统上,那么不需要执行其他操作。服务器会自动创建表。
- 如果服务器正在为会话持久性使用 DB2®,那么可以增加页大小以优化将大量数据写入数据库的性能。
- 使主管 Liberty 服务器的所有机器的系统时钟同步。如果系统时钟不同步,那么可能会使会话过早地失效。
- 可选: 必要时,在 Liberty 中将 HTTP 会话和安全性集成在一起。缺省情况下,在启用了安全性的受保护资源中创建和访问会话之后,只有该会话的始发所有者可以访问该会话。缺省情况下,会启用会话安全性(安全性集成)。
- 可选: 必要时,安装和配置 Web 服务器插件以将请求路由到您所配置的每个服务器。只有在插件配置指定与服务器配置中所定义克隆标识匹配的克隆标识时,才会保留会话亲缘关系。


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_admin_session_persistence
文件名:twlp_admin_session_persistence.html