负载均衡器和 Tomcat

负载均衡器和 Tomcat

目前,我们有一个 Tomcat 7 作为我们的应用服务器运行,但随着用户的增加,我们考虑以下事项,

1)放置硬件负载均衡器2)将两个 tomcat 服务器放置在负载均衡器后面的单独机器上以实现 HA。

问题

  1. 我们想将这两只雄猫进行集群,这会有什么缺点吗?
  2. tomcat之前的硬件负载均衡器是否不够用,放置apache服务器有什么好处?
  3. 我们想要在负载均衡器上卸载 SSL,这种方法会产生什么影响或问题?

答案1

1)我们想将这两只雄猫进行集群,这会有什么缺点吗?

主要缺点是管理服务集群更加复杂,需要大量前期投入,并且需要数据中心的更多资源。管理平衡的会话也更加复杂,否则您的客户端会在每次新请求时丢失登录名和 cookie(有关评论请参见下文)

但是,您要为此付出代价,以换取更大的容量和对故障的恢复能力。我会考虑使用某种东西来管理 tomcat 实例的配置,例如ansible或者厨师或预先构建的 Docker 容器雄猫。一开始需要做很多工作,但从长远来看,回报是丰厚的。

2)tomcat之前的硬件负载均衡器是否不够用,放置apache服务器有什么好处?

我已经很久没有使用硬件负载均衡器了,我主要转向 AWS 和云服务,所以我不能谈论运行自己的硬件负载均衡器,但是 apache 和 nginx 都很容易配置为 tomcat7 的前端代理。以前我在生产中广泛使用过 apache,有很多很好的教程可以解释其中的细微差别;
https://rvdb.wordpress.com/2012/04/26/reverse-proxying-tomcat-webapps-behind-apache/
https://wiki.apache.org/httpd/TomcatReverseProxy

使用 apache 时,您可以选择 mod_proxy 或 mod_proxy_ajp。通常,使用 http 的 mod_proxy 更容易设置,而 ajp 应该更快,因为它使用二进制格式进行通信。(但我实际上没有比较过速度)使用 mod_proxy_ajp 的另一个原因是它还会将 SSL 详细信息发送到 tomcat,因此如果您的应用程序使用 SSL 信息进行身份验证,但您已在前端传递了 HTTPS,那么您将需要 mod_proxy_ajp。

使用 apache 作为前端的另一个优点是,您可以获得所有可配置性,例如日志记录和身份验证。因此,您可以在一个地方获取两个 tomcat 服务器的聚合日志,而不必从每个节点获取日志文件。因此,您可以使用任何与 apache 配合使用的日志分析工具来为您的应用生成统计数据。

mod_proxy;

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_balancer modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so

<VirtualHost *:80>
  ServerName mydomain 
  ServerAlias *.mydomain 
  <Proxy balancer://mycluster>
    BalancerMember http://app1.example.com:8080
    BalancerMember http://app1.example.com:8080
  </Proxy>
  ProxyPass /test balancer://mycluster
</VirtualHost>

或使用 mod_proxy_ajp

<VirtualHost *:80>
  ServerName mydomain 
  ServerAlias *.mydomain 
  <Proxy "balancer://cluster">
    BalancerMember "ajp://app1.example.com:8009" loadfactor=1
    BalancerMember "ajp://app2.example.com:8009" loadfactor=2
    ProxySet lbmethod=bytraffic
  </Proxy>
  ProxyPass "/app" "balancer://cluster/app"      
</VirtualHost>

您还必须考虑维护后端之间的会话。这取决于您的应用程序,但您通常会在 Web 应用程序中启动会话,负载平衡器会使用该 cookie 将请求路由到正确的后端;

ProxyPass "/app" "balancer://cluster/app"  stickysession=JSESSIONID

这里有一些关于其如何运作的细节;
https://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html#stickyness

3)我们想要在负载均衡器上卸载 SSL,这种方法会产生什么影响或问题?

我认为这是标准方法。使用证书配置 apache 比配置 tomcat 要容易得多,而且我知道 apache 处理 SSL 的效率比 tomcat 高得多(不确定 2016 年是否仍然如此...),而且这将提高性能。

我猜 tomcat 应用程序的主要问题是它位于 https:// 后面,但它不知道这一点。因此,您必须小心链接的生成方式,并确保它们正确呈现给客户端。显然,如果所有链接都与服务器相关,<a href=/my/path/to/thing.html">Click</a>那么它应该可以正常工作。

编辑:添加了来自@tweeks200 的关于改进性能的评论

相关内容