【问题标题】:How to cluster a Grails 2.3.6 app's session with embedded Tomcat?如何使用嵌入式 Tomcat 对 Grails 2.3.6 应用程序的会话进行集群?
【发布时间】:2014-08-04 03:01:21
【问题描述】:

我正在使用 Grails Standalone App Runner 插件部署我的 Grails (2.3.6) 应用程序,如下所示:

grails -Dgrails.env=prod build-standalone myapp.jar --tomcat

然后,我的 CI 构建将 myapp.jar 放置到我的应用服务器上,例如 myapp01

我现在想在myapp 在多个节点上运行时对应用会话进行集群。因此,如果myapp 被部署到myapp01myapp02myapp03,并且其中一个实例与用户启动了一个新会话,我希望这三个实例都知道同一个会话。这显然是为了让我可以将所有节点放在负载平衡 URL 后面(http://myapp.example.com 等),而路由到哪个节点并不重要:所有节点共享相同的会话。

我搜索了“grails session clustering”,看到一堆似乎需要 terracotta 的文章,但我还听说 Grails 具有内置的 session clustering 功能。但我所做的任何搜索都会空手而归。

所以我问:如何使用嵌入式 Tomcat 实现这种会话集群?

【问题讨论】:

标签: session tomcat grails cluster-computing load-balancing


【解决方案1】:

除了@injecteer 提出的 seesion-cookie 插件之外,还有其他几个插件允许将会话保存在共享存储(DB、mongodb、redis、memcached)中,您的任何 tomcat 实例都可以访问这些插件。看看这些:

【讨论】:

  • 它们似乎都已经过时了……还有那些仍在积极维护中的吗?
【解决方案2】:

我从未听说过这种开箱即用的东西。我会尝试 2 个选项:

  1. 使用 session-cookie 插件,您可以通过该插件将客户端与将会话存储在 tomcat 中分离
  2. 使用或实现持久会话,这些会话存储在某种数据库中并且不绑定到任何 tomcat 实例。

【讨论】:

    【解决方案3】:

    您可以通过使用 tomcat 内置功能来实现这一点。 Tomcat 实例节点可以从其他节点复制会话,然后在节点之间共享所有会话。 您至少可以通过三种方式做到这一点:

    1. 在实例节点之间使用 Muilcast 进行会话复制。
    2. 仅在主节点和辅助节点备份之间进行会话复制。
    3. 静态成员身份之间的会话复制,当无法启用或支持多播时(例如在 AWS EC2 环境中),这个非常有用。

    参考:

    http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html http://khaidoan.wikidot.com/tomcat-cluster-session-replication

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-10
      • 2017-03-26
      • 2013-04-05
      • 2011-12-21
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多