我有两个运行 Lucee 的多宿主、Web 平衡网络服务器,我在让会话跨 EHCache 实例复制时遇到问题。我什至不确定自动发现是否有效
这是我的设置和配置:
操作系统设置
- eth0 上的两台服务器的多播设置,地址为 224.0.0.0(我知道这可行,因为当我 ping 224.0.0.1 时,我从两个网络服务器 IP 得到响应)
- /etc/sysctl.conf:
net.ipv4.icmp_echo_ignore_broadcasts = 0
和net.ipv4.ip_forward =1
每个实例的 Lucee SessionCache 对象设置
- 自动对等发现
- 组播用户组地址:
224.0.0.1
- 组播用户组端口:
4446
主机:(
xx.xx.xx.xx
这是我正在使用的每个服务器的 eth0 接口的 IP 地址,我确实确认他们在 ping 多播用户组时做出了响应)同步已检查所有内容
所有其他设置(RMI、侦听器)保留为默认设置(在某些情况下为空白)
当我运行使用此 sessionCache 对象作为会话存储的应用程序并尝试登录时,我只登录一个实例,然后被重定向(负载均衡器)到下一个实例,我必须再次登录,因为会话没有被复制。
更新#1
为了在分布式集群中启用会话复制,您需要 在伪构造函数this.sessionCluster = true
中添加J2EE
会话类型 ( this.sessionType = "j2ee"
)Application.cfc
更新#2
即使使用同步复制,用于会话存储的分布式缓存似乎也很容易出现竞争条件。Asynchronous replication
绝对不推荐,尤其是当您的负载均衡器执行循环时。
这让我想到了负载均衡器Round Robin
。每次跳转实例时,Lucee 都会创建一个全新的会话,所以我的复制没有用,因为我没有点击相同的 sessionid
更新#3
通过属性将会话存储在数据库中sessionStorage
似乎可以缓解我的所有问题。我什至可以在负载均衡器中进行循环。可以在此处找到有关设置的说明。
CFML
建议使用会话而不是J2EE