会话复制是一种机制,用于复制存储在不同实例的会话中的数据。但是,所复制的实例必须为相同群集的一部分。在群集环境中启用会话复制时,将会复制所复制的实例中的完整会话数据。但是,会话复制操作不会复制会话中不可序列化的属性和任何特定于实例的数据。
会话复制和负载平衡为 Web 应用程序提供了很好的故障转移功能。
本节将详细介绍会话复制操作。
Web 请求结束时,Web Server 将确定是否需要通过会话复制配置(存储在服务器配置文件 server.xml 中)来复制会话数据。
假设存在由四个实例构成一个群集的一个使用案例,并且 Administration Server 中启用了会话复制。
由四个节点上运行的四个实例(A、B、C 和 D)构成的 Web Server 群集中的会话复制过程如下:
实例 A 是 D 的备份,B 是 A 的备份,C 是 B 的备份,D 是 C 的备份。这构成一个完整的备份环。
群集中的每个实例记录群集中所有实例的一个静态列表和一个活动备份实例。
根据配置,每次请求结束时,会话数据会被同步发送到备份实例。
Web Server 群集环境中的故障转移过程如下:
如果实例 A 失败,负载平衡器会将目标为实例 A 的所有传入 Web 请求重定向到群集中的其他实例,并按如下所示重新配置备份环:
D 检测出其备份 A 出现故障,将选择有序列表中 A 的下一个实例作为其新的备份实例。
在此情况下,B 将被选择,D 将建立与 B 的新备份连接。B 现在拥有两个备份: A 的只读备份和 D 的活动备份。
备份环现在变为完整,即 B 备份到 C,C 备份到 D,D 备份到 B。
当出现故障的实例 A 再次可用时,它通过向其指定的备份实例 B 发送一条重新加入消息,来重新加入备份环,并建立与 B 的备份连接。
D 通过接收来自 A 的成功 ping 返回或者来自 A 的消息,检测出 A 已联机。
D 然后建立与 A 的备份连接,并终止其与 B 的备份连接。
Web Server 7.0 不支持会话复制中的以下功能:
恢复两个或多个实例同时出现的故障。
两次故障间的时间间隔必须大于复活的实例完全恢复所需的时间。
多个实例的会话备份。在常规操作中,任何会话只能有两份副本: 主会话和备份会话。
会话持久性: 要进行故障转移,只能在另一个实例的内存中备份会话。
Web Server 仅支持 Java Web 应用程序的会话复制。如果使用的是非 Java 应用程序(如 CGI 或 PHP),则不能复制会话数据。
可以使用管理控制台或 CLI 在群集中启用会话复制。在启用会话复制之前,请确保浏览器启用了 cookie。
server.xml 文件包含与会话复制相关的信息。以下所示为启用了会话复制的一个 server.xml 文件样例:
<cluster> <local-host>hostA</local-host> <instance> <host>hostB</host> </instance> <instance> <host>hostC</host> </instance> <instance> <host>hostD</host> </instance> <instance> <host>hostA</host> <session-replication/> </cluster>
如果以下元素使用默认值,server.xml 配置文件中将不包含这些元素的条目:
端口号(默认值为 1099) |
协议(默认值为 jrmp) |
已加密(默认值为 false) |
Getattribute 触发复制(默认值为 true) |
复制搜索 MaxHop(默认值为 –1) |
启动搜索超时(默认值为 0。依赖 Java API 获取系统计时。在非 Unix 操作系统中,此时间可能并不准确。) |
Cookie 名称(默认值为 CLUSTERSESSIONLOCATOR) |
有关这些会话复制属性的更多信息,请参见《Sun Java System Web Server 7.0 Update 3 Administrator’s Configuration File Reference》。
要使服务器复制会话,必须为 Web 应用程序启用会话复制。
要为 Web 应用程序启用会话复制,请修改位于 <web-application>/WEB-INF 目录中的 sun-web.xml 配置文件。
需要在 sunweb.xml 中进行的修改如下:
将元素 <session-manager/> 更改为 <session-manager persistence-type="replicated">
以下所示为启用了会话复制的一个 sun-web.xml 文件样例:
<sun-web-app> <session-config> <session-manager persistence-type="replicated"> </session-manager> </session-config> </sun-web-app>
修改 sunweb.xml 文件后,请重新生成 Web 应用程序,或对应用程序重新进行 jar 操作以创建 Web 应用程序归档(war 文件)。
重新启动所有实例,以使 Web 应用程序在所有实例中可用。
该 Web 应用程序可从群集中的所有节点进行访问。要访问该 Web 应用程序,请在浏览器中键入以下内容:
http://webserver-name/webapplication-name/
目录可以为所有节点访问是存储要进行部署的应用程序的最佳方法。但是,该目录对 Administration Server 来说,无需可访问。建议对大小超过 1 MB 的 Web 应用程序进行基于目录的部署。
要创建搜索集合,请确保该搜索集合驻留在所有节点可以访问的公共目录中。