zhcn 技术 Windows Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性

Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性

使用代理模块和粘性会话通过 Apache 配置 Tomcat

使用 Mod Proxy 通过 Apache Web 服务器配置 Tomcat 负载平衡器非常简单。

如果你遵循命令,一切都会很顺利。下面我们逐步列出了如何在 Tomcat 上配置 Apache 以使用 Mod Proxy 配置负载均衡器。

在生产环境中始终建议进行负载平衡以提高可用性。

Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性
Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性

配置 Apache Web 服务器

  • 在 Apache Web 服务器的 httpd.conf 中启用proxy_moduleproxy_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 

添加代理路径以及应用程序上下文根的平衡器名称。

在此示例中,代理路径为示例,平衡器名称为mycluster

包括StickySession非常重要。这是因为如果没有此选项,相同的请求将分布在多个 Tomcat 服务器上,从而导致应用程序中出现会话过期问题。

 
ProxyRequests Off
ProxyPass /examples balancer://mycluster stickysession=JSESSIONID
ProxyPassReverse /examples balancer://mycluster stickysession=JSESSIONID

BalancerMember http://localhost:8080/examples route=server1
BalancerMember http://localhost:8090/examples route=server2

 

正如您在上面的配置中看到的,我们添加了一条到BalancerMember的路由,以便我们可以将路由值添加到会话ID中。

接下来,让我们配置 Apache 以在访问日志中打印 JSESSIONID。

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

原来的:

 LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""%{JSESSIONID}C"" combined 
  • 重新启动 Apache Web 服务器
Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性
Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性

Tomcat配置

您需要使用与上面的BalancerMember相同的根 ID 配置 Tomcat 实例。

  • jvmRoute参数添加到 Tomcat 的server.xml 。这应该添加到引擎名称标签中。

Tomcat实例配置8080端口

  

Tomcat实例配置8090端口

   
  • 重启Tomcat服务器
Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性
Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性

确认

在您的应用程序上生成一些负载并检查 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 和 Session Sticky 配置 Tomcat 负载均衡器。

如果您想了解 Tomcat 管理,请查看此在线课程

Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性
Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性

《Apache 上的 Tomcat 负载均衡器使用 Mod 代理和会话粘性》浅显易懂的讲解!您必须观看的 2 个最佳视频

How to setup mod_jk and tomcat
https://www.youtube.com/watch?v=4TTEnRZtaOU&pp=ygV3IE1vZCDjg5fjg63jgq3jgrfjgajjgrvjg4Pjgrfjg6fjg7Mg44K544OG44Kj44OD44Kt44O844KS5L2_55So44GX44GfIEFwYWNoZSDjgaf jga4gVG 9tY2F0IOODreODvOODiSDjg5Djg6njg7PjgrUmaGw9SkE%3D
Setup Apache Server as forward proxy, reverse proxy & load balancer. Step by step implementation
https://www.youtube.com/watch?v=eshV2whJrqk&pp=ygV3IE1vZCDjg5fjg63jgq3jgrfjgajjgrvjg4Pjgrfjg6fjg7Mg44K544OG44Kj44OD44Kt44O844KS5L2_55So44GX44GfIEFwYWNoZSDj gafjga4g VG9tY2F0IOODreODvOODiSDjg5Djg6njg7PjgrUmaGw9SkE%3D

使用代理模块和粘性会话通过 Apache 配置 Tomcat

使用 Mod Proxy 通过 Apache Web 服务器配置 Tomcat 负载平衡器非常简单。

如果你遵循命令,一切都会很顺利。下面我们逐步列出了如何在 Tomcat 上配置 Apache 以使用 Mod Proxy 配置负载均衡器。

在生产环境中始终建议进行负载平衡以提高可用性。

Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性
Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性

配置 Apache Web 服务器

  • 在 Apache Web 服务器的 httpd.conf 中启用proxy_moduleproxy_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 

添加代理路径以及应用程序上下文根的平衡器名称。

在此示例中,代理路径为示例,平衡器名称为mycluster

包括StickySession非常重要。这是因为如果没有此选项,相同的请求将分布在多个 Tomcat 服务器上,从而导致应用程序中出现会话过期问题。

 
ProxyRequests Off
ProxyPass /examples balancer://mycluster stickysession=JSESSIONID
ProxyPassReverse /examples balancer://mycluster stickysession=JSESSIONID

BalancerMember http://localhost:8080/examples route=server1
BalancerMember http://localhost:8090/examples route=server2

 

正如您在上面的配置中看到的,我们添加了一条到BalancerMember的路由,以便我们可以将路由值添加到会话ID中。

接下来,让我们配置 Apache 以在访问日志中打印 JSESSIONID。

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

原来的:

 LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""%{JSESSIONID}C"" combined 
  • 重新启动 Apache Web 服务器
Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性
Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性

Tomcat配置

您需要使用与上面的BalancerMember相同的根 ID 配置 Tomcat 实例。

  • jvmRoute参数添加到 Tomcat 的server.xml 。这应该添加到引擎名称标签中。

Tomcat实例配置8080端口

  

Tomcat实例配置8090端口

   
  • 重启Tomcat服务器
Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性
Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性

确认

在您的应用程序上生成一些负载并检查 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 和 Session Sticky 配置 Tomcat 负载均衡器。

如果您想了解 Tomcat 管理,请查看此在线课程

Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性
Apache 上的 Tomcat 负载均衡器,具有 Mod 代理和会话粘性

《Apache 上的 Tomcat 负载均衡器使用 Mod 代理和会话粘性》浅显易懂的讲解!您必须观看的 2 个最佳视频

How to setup mod_jk and tomcat
https://www.youtube.com/watch?v=4TTEnRZtaOU&pp=ygV3IE1vZCDjg5fjg63jgq3jgrfjgajjgrvjg4Pjgrfjg6fjg7Mg44K544OG44Kj44OD44Kt44O844KS5L2_55So44GX44GfIEFwYWNoZSDjgaf jga4gVG 9tY2F0IOODreODvOODiSDjg5Djg6njg7PjgrUmaGw9SkE%3D
Setup Apache Server as forward proxy, reverse proxy & load balancer. Step by step implementation
https://www.youtube.com/watch?v=eshV2whJrqk&pp=ygV3IE1vZCDjg5fjg63jgq3jgrfjgajjgrvjg4Pjgrfjg6fjg7Mg44K544OG44Kj44OD44Kt44O844KS5L2_55So44GX44GfIEFwYWNoZSDj gafjga4g VG9tY2F0IOODreODvOODiSDjg5Djg6njg7PjgrUmaGw9SkE%3D