我正在评估在tomcat中使用会话复制的粘性会话的情况。从我最初的评估开始,我认为如果我们启用会话复制,那么在一个tomcat节点中启动的会话将被复制到所有其他tomcat节点,因此我们不需要粘性会话来继续会话,并且任何节点都可以接收请求
但似乎会话复制通常与粘性会话一起使用,否则只要请求转到其他节点,就需要更改会话ID。参考:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html#Bind_session_after_crash_to_failover_node
如果您必须启用粘性会话,有人可以解释会话复制的真正用途吗?因为当具有给定会话ID的请求始终到达同一节点时,您将不必要地在每个节点上复制会话。在节点崩溃的情况下它可能是有益的,但是这不会经常发生并且仅使用会话复制似乎是一种过度杀伤。
答案 0 :(得分:67)
正如 Mindas 之前解释过的那样:
当你使用负载均衡时,它意味着你有几个tomcat实例,你需要分割负载。
答案 1 :(得分:8)
我认为唯一真正的好处是能够在没有多想的情况下关闭Tomcat实例。特别是当节点可以经常打开和关闭时,这适用于云世界(想想亚马逊AWS点实例)。替代方案是购买一个支持节点排放的合适负载均衡器。但体面的负载平衡器价格昂贵,而且耗水需要时间。
我能想到的另一个场景是(购物车的实施不佳),其中物品保存在HttpSession
中,关闭则需要用户重新购买(这可能会导致销售损失) )。
但在大多数情况下,你是对的 - 让粘性会话和会话复制都可以忽略不计。
答案 2 :(得分:0)
用mod_jk在“所有”基本配置中澄清JBoss 5.X上的配置问题。在workers.properties文件中设置粘性会话
worker.list=loadbalancer
... nodes configuration omitted
worker.loadbalancer.balance_workers=node1,node2
worker.loadbalancer.sticky_session=True
不会阻止会话复制。为了在JBoss上关闭会话复制,我们需要设置$ JBOSS_HOME \ server \ YOUR_NODE_NAME \ deploy \ cluster \ jboss-cache-manager.sar \ META-INF \ jboss-cache-manager-jboss-beans.xml {{ 1}}参数cacheMode
。
通常在粘性会话场景中,我们不希望会话复制,因为我们不希望额外的开销与复制会话所需的大量I / O操作相关联。
事实上,如果使用粘性会话,我们不需要在“所有”配置中运行JBoss,我们可能会使用“默认”或“基于标准”的配置。
唯一需要做的就是更改$ JBOSS_HOME / server / YOUR_NODE_NAME / deploy / jbossweb.sar / server.xml:
LOCAL