apache - 可以在没有粘性 session 的情况下进行 session 复制吗?

标签 apache tomcat load-balancing cluster-computing session-replication

在 Tomcat 环境中,是否可以在不启用粘性 session 的情况下进行 session 复制?

我理解粘性 session 的目的是让客户端在整个 session 中“粘”到 1 个服务器。通过 session 复制,客户端与服务器的交互将被复制到整个集群(许多 Web 服务器)。

在上述情况下,是否可以进行 session 复制?即客户端的 session 遍布整个 Web 服务器,并且与任何一台 Web 服务器的每次交互都会被复制,从而实现无缝交互。

最佳答案

据我所知,tomcat集群不支持非粘性 session 。来自 tomcat docs :

Make sure that your loadbalancer is configured for sticky session mode.

但是有一个解决方案(我创建的,所以你知道我有偏见:-))称为 memcached-session-manager (msm),也支持非粘性 session 。 msm 使用memcached (或任何使用 memcached 协议(protocol)的后端)作为 session 备份/存储的后端。

在非粘性模式下, session 仅存储在 memcached 中,不再存储在 tomcat 中,与非粘性 session 一样, session 存储必须是外部的(以避免数据过时)。

它还支持 session 锁定:对于非粘性 session ,多个并行请求可能会命中不同的tomcat,并且可能会并行修改 session ,因此某些 session 更改可能会被其他 session 覆盖。 session 锁定允许同步发送到不同 tomcat 的并行请求。

msm home page主要描述粘性 session 方法(因为它仅以此开始),有关非粘性 session 的详细信息,您可以在 mailing list 上搜索或询问。 .

有关配置的详细信息和示例可以在msm wiki (SetupAndConfiguration)中找到.

只是为了让您了解复杂性:您需要的是一个或多个 memcached运行的服务器(或类似的memcached)和更新的tomcat context.xml,如下所示:

<Context>
  ...
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:host1.domain.com:11211,n2:host2.domain.com:11211"
    sticky="false"
    sessionBackupAsync="false"
    lockingMode="auto"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    />
</Context>

您的负载平衡器不需要特殊配置,因此一旦您准备好这些东西,您就可以开始测试您的应用程序。

关于apache - 可以在没有粘性 session 的情况下进行 session 复制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9360372/

相关文章:

apache - 如何使用 Apache 对 Marklogic 集群进行负载平衡

php - 为什么 PHP exec() 命令启动 DOS 窗口?我可以隐藏这个吗?

Docker compose 和 dockerfile/.htaccess 问题

apache - Silex 位于本地主机 : "Sorry, the page you are looking for could not be found" 上的子目录中

linux - 从 Bash 脚本中使用 Apache 执行 'git pull'

protocol-buffers - GRPC 负载均衡器示例

tomcat - 在 apache tomcat 上运行 Tcl

java - Spring 安全 : The authentication stays after server restart

java - Maven Tomcat 插件更改端口

nginx - debian 8 上 nginx 中的用户 'nginx' 在哪里