Tomcat 负载均衡器与 Apache 使用 Mod Proxy 和 Session Sticky

配置 Tomcat 和 Apache 的代理模块及粘性会话

使用 Mod Proxy 为 Apache Web 服务器配置 Tomcat 负载均衡器是一项相对简单的任务。

按照正确的步骤进行操作,一切都会顺利进行。以下是我逐步列出的使用 Mod Proxy 配置 Apache 以使用 Tomcat 实现负载均衡的方法。

在生产环境中,为了获得更高的可用性,始终建议使用负载均衡。

Apache Web 服务器配置

  • 首先,需要在 Apache Web 服务器的 httpd.conf 文件中启用 proxy_module, proxy_balancer_moduleproxy_http_module 模块。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
  

接下来,为您的应用程序的上下文根添加代理通道和负载均衡器名称。

在这个示例中,我们使用 “examples” 作为代理路径,并设置负载均衡器名称为 “mycluster”。

请务必包含 stickysession 配置。如果没有此选项,相同的请求可能会被分发到多个 Tomcat 服务器,从而导致应用程序中出现会话过期的问题。

<IfModule proxy_module>
    ProxyRequests Off
    ProxyPass /examples balancer://mycluster stickysession=JSESSIONID
    ProxyPassReverse /examples balancer://mycluster stickysession=JSESSIONID
    <Proxy balancer://mycluster>
        BalancerMember http://localhost:8080/examples route=server1
        BalancerMember http://localhost:8090/examples route=server2
    </Proxy>
</IfModule>
  

如上面的配置所示,我们在 BalancerMember 中添加了路由 (route),以便将路由值附加到会话 ID。

现在,让我们配置 Apache,以便在访问日志中打印 JSESSIONID。

  • LogFormat 指令中添加以下内容:
%{JSESSIONID}C
  

例如:

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""%{JSESSIONID}C"" combined
  
  • 完成以上配置后,请重新启动 Apache Web 服务器。

Tomcat 配置

您必须在 Tomcat 实例中配置相同的路由 ID,就像在上面的 BalancerMember 中配置的那样。

  • 在 Tomcat 的 server.xml 文件中,添加 jvmRoute 参数。 这需要添加到 Engine 标签中。

以下是配置 8080 端口的 Tomcat 实例:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="server1">
  

以下是配置 8090 端口的 Tomcat 实例:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="server2">
  

验证

在应用程序上生成一些负载,并检查 Apache 服务器的访问日志,以确保您的请求被路由到特定的 Tomcat 实例。

您还会注意到会话 ID 已附加了路由,如下面的示例所示。

例如:

127.0.0.1 - - [18/Sep/2013:10:02:02 +0800] "POST /examples/servlets/servlet/RequestParamExample HTTP/1.1" 200 662 "http://localhost/examples/servlets/servlet/RequestParamExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:06 +0800] "GET /examples/servlets/servlet/RequestInfoExample HTTP/1.1" 200 693 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:17 +0800] "GET /examples/servlets/reqinfo.html HTTP/1.1" 200 3607 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:20 +0800] "GET /examples/servlets/servlet/SessionExample HTTP/1.1" 200 1124 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:26 +0800] "POST /examples/servlets/servlet/SessionExample HTTP/1.1" 200 1142 "http://localhost/examples/servlets/servlet/SessionExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:28 +0800] "GET /examples/servlets/servlet/SessionExample?dataname=fda&datavalue=fadaf HTTP/1.1" 200 1159 "http://localhost/examples/servlets/servlet/SessionExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B4EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:32 +0800] "GET /examples/servlets/servlet/SessionExample?dataname=foo&datavalue=bar HTTP/1.1" 200 1174 "http://localhost/examples/servlets/servlet/SessionExample?dataname=fda&datavalue=fadaf" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:36 +0800] "GET /examples/servlets/servlet/RequestHeaderExample HTTP/1.1" 200 1423 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
  

我希望以上配置可以帮助您使用 Apache Mod Proxy 和粘性会话配置 Tomcat 负载均衡器。

如果您有兴趣了解更多关于 Tomcat 管理的知识,可以查看这个 在线课程

喜欢这篇文章吗? 分享给更多人了解如何配置吧!