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
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一般是面试的热身题——LeetCode题目21:合并两个有序链表
- LeetCode题目22:括号生成
- OpenGL ES 3.0 | 着色器编译器
- LeetCode题目23:合并K个排序链表
- LeetCode题目24:两两交换链表中的节点
- 最难链表题——LeetCode题目25:K 个一组翻转链表
- LeetCode题目26:删除排序数组中的重复项
- PCA算法原理及实现
- LeetCode题目27:移出元素
- LeetCode题目28:实现strStr()
- LeetCode题目29:两数相除
- LeetCode题目30:串联所有单词的子串
- LeetCode题目31:下一个排列
- LeetCode题目33:搜索旋转排序数组
- LeetCode题目34:在排序数组中查找元素的第一个和最后一个位置