Apache实现反向代理负载均衡

说到负载均衡LVS这套技术,有很多种实现方法。

本文所说,主要就是利用apache服务器实现反向代理,实现负载均衡。

首先,传统的正向代理如下图所示,正如我们用的游戏加速代理,大多的个人PC把请求发给正向代理服务器,代理服务器通常配置高端的带宽,替我们请求相应的服务。

而负载均衡中的反向代理,通常意义上,是一个请求转发的代理。类似一个收发室的管理人员,外来的很多邮件,传到收发室,然后由管理员分配给不同的办公室。通过这样的操作,可以使每台服务器避免过多的负载导致宕机。而转发的这个过程,通常也有很多种不同的算法。下图所示,就是一个反向代理的过程:

实现这样一个架构,需要几台服务器,不论是linux 或者 windows都可以实现。

如果如图所示,实现,则需要四台服务器,1台apache反向代理服务器,实现请求的转发分配。3台后台的主服务器。

在apache代理服务器上面,如果安装的centos系统,那么自带的httpd服务,就不用再安装apache服务器了。它的apache服务器的配置文件在/etc/httpd/conf/httpd.conf文件中,可以通过vi命令打开。

1 确保需要的mod_proxy模块均加载,主要的模块如下:

mod_proxy.so
mod_proxy_ajp.so
mod_proxy_balancer.so
mod_proxy_connect.so
mod_proxy_ftp.so
mod_proxy_http.so

2 配置相关的代理设置,在httpd.conf文件末尾添加:

ProxyRequest off
<Proxy balancer://testcluster>
  BalancerMember http://192.168.0.1 route=jvm1
  BalancerMember http://192.168.0.2 route=jvm2
  BalancerMember http://192.168.0.3 route=jvm3
</Proxy>
Proxy /tt balancer://test/tt stickysession=JSESSIONID | jsessionid nofailover=On
ProxyPass Reverse /tt balancer://test/tt

3 在后面的主服务器1(例如JBOSS服务器)的/jboss/server/default/deploy/jboss-web.service/servers.xml中

 <Engine name="jboss.web" defaultHost="localhost" jvmRoute="jvm1">

....

这样一个负载均衡就大致 形成了。

其中可能有人考虑到,如果一个请求时登陆请求,而第二个请求时操作,结果第二个请求转发到第二个服务器上面。那么如何操作。这个不用担心,apache反向代理有 session粘连这样一个概念,它会把所有关于cookie的文件保存在apache服务器上面,其他的操作均会读取这样一个文件。

不同的负载分配方案

1 如果按照上面的配置方案:

ProxyRequest off
<Proxy balancer://testcluster>
  BalancerMember http://192.168.0.1:8080 route=jvm1
  BalancerMember http://192.168.0.2:8080 route=jvm2
  BalancerMember http://192.168.0.3:8080 route=jvm3
</Proxy>
Proxy /tt balancer://test/tt stickysession=JSESSIONID | jsessionid nofailover=On
ProxyPass Reverse /tt balancer://test/tt

apache服务器会按照请求,挨个转发,第一个转发给jvm1服务器。第二个请求转发给jvm2服务器。第4个请求转发给jvm1服务器等等

2 如果某台服务器的性能要优于其他几台,那么可以通过loadfactor参数实现负载的分配

ProxyRequest off
<Proxy balancer://testcluster>
  BalancerMember http://192.168.0.1:8080 route=jvm1 loadfactor=1
  BalancerMember http://192.168.0.2:8080 route=jvm2 loadfactor=2
  BalancerMember http://192.168.0.3:8080 route=jvm3 loadfactor=3
</Proxy>
Proxy /tt balancer://test/tt stickysession=JSESSIONID | jsessionid nofailover=On
ProxyPass Reverse /tt balancer://test/tt

这样第一个请求发给jvm1,第二个和第三个发给jvm2,第四个到第六个发给jvm3

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏信安之路

安全开发之 token 那些事

在开发网络应用时,不管是移动端的 APP 也好,还是 web 端 APP 也好,只要有用户群体存在,都绕不开身份认证这个话题,选择一种好的身份认证方法常常在应用...

13300
来自专栏猿人谷

长连接和短连接分析

1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接 时...

59990
来自专栏郭耀华‘s Blog

危化品速查APP--Android Project

开发环境 Android studio 2.3.1 功能描述 集成多种查询方式,查看本地数据库中危险化学品的信息; 按照中文拼音和英文首字母,对化学品进行查询;...

32070
来自专栏林冠宏的技术文章

Go 自带的 http/server.go 的连接解析 与 如何结合 master-worker 并发模式,提高单机并发能力

33250
来自专栏软件开发 -- 分享 互助 成长

代理模式

一、相关介绍 1、代理模式为其他对象提供一种代理以控制对这个对象的访问 2、UML图 ? 3、所属类别:结构型 3、C++程序 1 // 代理模式.cpp :...

22190
来自专栏Linyb极客之路

网络编程之HTTP协议整理分析

维基百科上解释为:超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层...

15570
来自专栏Java后端技术

解决Maven项目pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径。)问题

最近自己在公司项目修改一些代码以后,出现如题的错误,后来各种Google等,最终找到了解决办法。

10510
来自专栏FreeBuf

构建识别恶意软件Autopsy python yara扫描模块

YARA是一款用于识别恶意软件的优秀工具,你可以自己编写规则,也可以借助预制的规则yararules。我需要一个快速的方法用以搜索一些磁盘映像,因此是时候构建一...

23370
来自专栏程序员宝库

webpack 4 升级指北

2018年2月25日,刚过完年webpack就给了一个加班红包。webpack4经过1个月的缓冲期,终于发布了正式版,那么抛给广大开发者的问题又来了,我是不是要...

74970
来自专栏JetpropelledSnake

HCNP学习笔记之IP地址、子网掩码、网关的关系

网络管理中的IP地址、子网掩码和网关是每个网管必须要掌握的基础知识,只有掌握它,才能够真正理解TCP/IP协议的设置。

26710

扫码关注云+社区

领取腾讯云代金券