粘性会话持续时间

时间:2017-02-03 14:00:23

标签: load-balancing mod-cluster sticky-session

是否可以在mod_cluster中指定粘性会话持续时间?

我的意思是当一段时间没有活动时,卡住的会话被清除。

我们有一个可分发的应用程序,可以在Web会话中保留对已登录用户的引用。但是在登录时,Web会话复制速度不足以跟随登录请求的请求。因此,如果对于这些请求,平衡器选择尚未复制的节点,则用户将不会进行会话并发生错误。

此功能的另一个用途是在服务器上使用缓存信息时。如果您不使用粘性会话,您将加载缓存在不同服务器中的相同信息的几次。但是如果你使用粘性会话,你将在所有会话生活中与同一台服务器绑定。

提前致谢

Leandro的

2 个答案:

答案 0 :(得分:2)

答案

无法在mod_cluster中打开和关闭会话粘性一段时间。其中一个开启或关闭。

进一步评论

IIUC,您实际上是在会话到期或会话失效后。您可以随时以编程方式决定使会话无效,也可以通过设置到期超时来让它过期。

您是否可以详细说明如何使用“会话粘性超时”?如果有意义,我们可以创建一个JIRA并实现一个新功能......

答案 1 :(得分:0)

我找到了解决方案以满足我们的需求。

我在balancer(BALANCER_SESSION_ID_HEADER_NAME)配置不同的stickysession属性,并在客户端管理平衡器粘性会话持续时间。

我第一次将counter + JSESSIONID设置为BALANCER_SESSION_ID_HEADER_NAME。每次花费STICKY_SESSION_TIMEOUT时,我都会将++counter + JSESSIONID设置为BALANCER_SESSION_ID_HEADER_NAME

客户代码:

if (USE_STICKY_SESSION_TIMEOUT && this.getjSessionId() != null) {
  if (this.getLastResponseTime() != 0
      && new Date().getTime() - this.getLastResponseTime() > STICKY_SESSION_TIMEOUT) {
    balancerSubsessionCounter++;
  }

  final String cookie = BALANCER_SESSION_ID_HEADER_NAME + "=" + balancerSubsessionCounter + "-"
      + this.getjSessionId();
  this.addCookie(httpPost, cookie);
}

//invoke service

if (USE_STICKY_SESSION_TIMEOUT) {
  this.setLastResponseTime(new Date().getTime());
}