0

我有两个运行 Lucee 的多宿主、Web 平衡网络服务器,我在让会话跨 EHCache 实例复制时遇到问题。我什至不确定自动发现是否有效

这是我的设置和配置:

操作系统设置

  1. eth0 上的两台服务器的多播设置,地址为 224.0.0.0(我知道这可行,因为当我 ping 224.0.0.1 时,我从两个网络服务器 IP 得到响应)
  2. /etc/sysctl.conf:net.ipv4.icmp_echo_ignore_broadcasts = 0net.ipv4.ip_forward =1

每个实例的 Lucee SessionCache 对象设置

  1. 自动对等发现
  2. 组播用户组地址:224.0.0.1
  3. 组播用户组端口:4446
  4. 主机:(xx.xx.xx.xx这是我正在使用的每个服务器的 eth0 接口的 IP 地址,我确实确认他们在 ping 多播用户组时做出了响应)

  5. 同步已检查所有内容

所有其他设置(RMI、侦听器)保留为默认设置(在某些情况下为空白)

当我运行使用此 sessionCache 对象作为会话存储的应用程序并尝试登录时,我只登录一个实例,然后被重定向(负载均衡器)到下一个实例,我必须再次登录,因为会话没有被复制。

更新#1

为了在分布式集群中启用会话复制,您需要 在伪构造函数this.sessionCluster = true中添加J2EE会话类型 ( this.sessionType = "j2ee")Application.cfc

更新#2

即使使用同步复制,用于会话存储的分布式缓存似乎也很容易出现竞争条件。Asynchronous replication绝对不推荐,尤其是当您的负载均衡器执行循环时。

这让我想到了负载均衡器Round Robin。每次跳转实例时,Lucee 都会创建一个全新的会话,所以我的复制没有用,因为我没有点击相同的 sessionid

更新#3

通过属性将会话存储在数据库中sessionStorage似乎可以缓解我的所有问题。我什至可以在负载均衡器中进行循环。可以在此处找到有关设置的说明。 CFML建议使用会话而不是J2EE

4

0 回答 0