Spring Boot应用程序与Apache负载均衡

时间:2018-09-20 21:20:29

标签: apache spring-boot load-balancing

我有一个包含多个模块的应用程序

  • 两个Spring Boot后端,可将json服务导出到前端
  • 前端node.js应用程序
  • 从Apache服务器提供几个PHP页面

Web浏览器仅与apache服务器通信,后者将请求路由到这些应用程序(使用虚拟主机和重定向)。

  • admin.myapp.com(php和node.js前端)
  • api.myapp.com(服务后端)
  • scheduler.myapp.com(调度程序后端)

For more clarity, here's a graphic explanation of this distribution

这里是后端的虚拟主机配置

<VirtualHost *:80> 
  ServerName api.myapp.com
  ProxyPreserveHost On
  ProxyRequests Off
  ProxyPass / http://localhost:8080/
  ProxyPassReverse / http://localhost:8080/
</VirtualHost> 

我只需要为后端应用程序保持实现HA (仅)HA(即,我无法添加新的apache专用实例进行平衡)。

我不知道该怎么做,我阅读的教程介绍了如何将整个apache实例转换为负载均衡器,但是我只需要将HA置于一个虚拟主机(后端服务)中,以保持软件实例不变现在。

我将不胜感激。

谢谢

致谢

1 个答案:

答案 0 :(得分:0)

httpd文档乍一看非常令人困惑,它不会合并概念,例如,虚拟主机与Balancer。但是我仍然从他们的docs中提取了很多信息。

一种基本方法是设置一个平衡器及其成员,然后将所有内容代理给它。

要完成此操作,我们将需要安装一些模块:sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests必须足够,否则,请检查日志中是否缺少模块或建议。

然后,填补虚拟主机中的空白:

<VirtualHost *:80>
        ServerName api.myapp.com
        ProxyPreserveHost On
        ProxyRequests Off
        #Your balanced backends
        <Proxy balancer://backend-cluster>
                BalancerMember http://localhost:3000
                BalancerMember http://localhost:9000
                ProxySet lbmethod=byrequests
        </Proxy>
        #Balancer admin interface for localhost access
        <Location /balancer-manager>
                SetHandler balancer-manager
                Order allow,deny
                allow from localhost 
        </Location>

        ProxyPass /balancer-manager !
        #Proxying everything to your backends
        ProxyPass / balancer://backend-cluster/

</VirtualHost>

Httpd还提供了一些其他算法来平衡您的请求。如您所见,提供的示例与 byrequest 保持平衡(简而言之,成员之间共享请求)。其余的是(我鼓励您阅读文档):

  • bytraffic -按每个成员的流量共享负载
  • 忙碌-选择的职位数量较少的成员
  • 心跳-使用mod_heartbeat平衡工作

此最小配置必须足以实现最小的HA后端服务。