Loadbalancer和Tomcat

目前我们有一个单独的tomcat 7作为我们的应用服务器运行,但随着用户数量的增加,我们正在考虑以下内容,

1)放置一个硬件负载均衡器2)在负载均衡器后面放置两台tomcat服务器,分别安装HA。

问题

  1. 我们想要把两个雄猫聚在一起,有没有什么不利之处。
  2. 在tomcat之前的硬件负载平衡器是不够的,把Apache服务器的优势是什么?
  3. 我们希望卸载Load-Balancer中的SSL,这是我们在这种方法中看到的一些影响或问题?

1) 我们想要把两个雄猫聚在一起,有什么不利之处。

主要缺点是pipe理一组服务比较复杂,需要大量的前期投资,并且需要更多的资源在您的数据中心。 您还会增加pipe理平衡会话的复杂性,否则您的客户端会在每次新请求时丢失login信息和Cookie(请参阅下面的评论)

但是,您正在为提高容量和恢复失败而进行交易。 我会考虑使用某些东西来pipe理tomcat实例的configuration,例如ansible或chef ,甚至是tomcat的预buildDocker容器。 最初的工作很多,但是从长远来看,还是要付出代价的。

2) tomcat之前的硬件负载均衡不够,放置apache服务器有什么优势?

我很长一段时间没有使用硬件负载平衡器,我主要转移到AWS和云服务,所以我不能说运行自己的硬件负载平衡器,但是Apache和nginx都很容易configuration为前端代理tomcat7。 以前我在生产中广泛地使用了apache,并且有很多很好的教程来解释这些细微之处。
https://rvdb.wordpress.com/2012/04/26/reverse-proxying-tomcat-webapps-behind-apache/
https://wiki.apache.org/httpd/TomcatReverseProxy

用Apache你可以selectmod_proxy或mod_proxy_ajp。 一般情况下,http的mod_proxy更容易设置,并且由于使用二进制格式进行通信,因此ajp应该更快。 (但我没有真正比较速度)使用mod_proxy_ajp的另一个原因是,它也通过SSL的细节发送到tomcat,所以如果你的应用程序使用SSL信息的身份validation,但你已经在前端交给了HTTPS,你将需要mod_proxy_ajp。

使用apache作为前端的另外一个优点是,你可以像日志和authentication那样获得所有的可configuration性。 所以你可以在同一个地方获得两个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,这是我们在这种方法中看到的一些影响或问题?

我认为这是标准的方法。 configurationapache的证书比tomcat要容易得多,而且我知道apache比tomcat更有效地处理SSL(不知道这是否在2016年仍然如此),并且这将会提高性能。

我猜tomcat应用程序的主要问题是,它后面的https://但它不知道它。 所以你必须小心如何生成链接,并确保它们正确地呈现给客户端。 显然,如果所有的链接都是相对于服务器,例如<a href=/my/path/to/thing.html">Click</a>那么它应该没问题。

编辑:添加了关于@ tweeks200提高性能的评论