24.proxy_balancer_module,用它来实现负载均衡。类似nginx upstream模块
http负载均衡依赖模块 httpd -M
mod_proxy
mod_proxy_http
mod_proxy_balancer
ajp负载均衡依赖模块
mod_proxy
mod_proxy_ajp
mod_proxy_balancer
负载均衡参数说明
配置代理到balancer
ProxyPass [path] !|url [key=value [key=value ...]]
Balancer成员
BalancerMember [balancerurl] url [key=value [key=value ...]]
min 0 连接池最小容量
max 1 – n 连接池最大容量
retry 60 apache请求发送到后端服务器错误后等待的时间秒数。0表示立即重试
设置Balancer或参数
ProxySet url key=value [key=value ...]
stickysession 调度器的sticky session名字,根据web后台编程语言不同,可以设置为JSESSIONID或PHPSESSIONID
loadfactor 定义负载均衡后端服务器权重,取值范围1 – 100
lbmethod 负载均衡调度方法。
byrequests 基于权重的统计请求个数进行调度(默认)
bytrafficz 执行基于权重的流量计数调度
bybusyness 通过考量每个后端服务器当前负载进行调度
maxattempts 1 放弃请求前实现故障转移的次数,默认为1,其最大值不应该大于总的节点数
nofailover Off 如果后端服务器没有Session副本,可以设置为On不允许故障转移。Off故障可以转移
实验: Httpd实现后端tomcat的负载均衡调度
负载均衡 + 会话保持方式 + session sticky会话黏性
1.规划
192.168.80.120 t0 调度器 Nginx、HTTPD
192.168.80.100 t1 tomcat1 JDK8、Tomcat8
192.168.80.110 t2 tomcat2 JDK8、Tomcat8
四台主机的域名解析
192.168.80.120 t0.magedu.com t0
192.168.80.100 t1.magedu.com t1
192.168.80.110 t2.magedu.com t2
启用模块
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
2.Tomcatt1和t2节点 /data/webapps/ROOT/index.jsp测试用jsp
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>lbjsptest</title>
</head>
<body>
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>
3.Tomcat两台主机设置
t1虚拟主机配置
<Engine name="Catalina" defaultHost="t1.magedu.com" jvmRoute="Tomcat1">
<Host name="t1.magedu.com" appBase="/data/webapps" autoDeploy="true" />
</Engine>
t2虚拟主机配置
<Engine name="Catalina" defaultHost="t2.magedu.com" jvmRoute="Tomcat2">
<Host name="t2.magedu.com" appBase="/data/webapps" autoDeploy="true" />
</Engine>
4.http设置
cat /etc/httpd/conf.d/www.conf
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED #
<VirtualHost *:80>
ServerName t0.magedu.net
ProxyRequests Off
ProxyVia On
ProxyPreserveHost off
proxypass / balancer://tomcat-server/
ProxyPassReverse / balancer://tomcat-server/
</VirtualHost>
<Proxy balancer://tomcat-server>
BalancerMember http://t1.magedu.net:8080 loadfactor=1 route=Tomcat1 #名称要跟jvmRoute的值一样。
BalancerMember http://t2.magedu.net:8080 loadfactor=2 route=Tomcat2
ProxySet stickysession=ROUTEID #启用会话黏性
</Proxy>
总结:同后端主机和同一浏览器 SessionID 不变
同后端主机和不同浏览器 SessionID 变
不同后端主机SessionID 都变。
AJP协议设置部分
在上面基础上修改httpd的配置文件
#cat /etc/httpd/conf.d/www.conf
<VirtualHost *:80>
ServerName t0.magedu.org
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
ProxyPass / balancer://tomcat-server/
ProxyPassReverse / balancer://tomcat-server/
</VirtualHost>
<Proxy balancer://tomcat-server>
BalancerMember ajp://t1.magedu.net:8009 loadfactor=1 route=Tomcat1
BalancerMember ajp://t2.magedu.net:8009 loadfactor=2 route=Tomcat2
ProxySet stickysession=ROUTEID
</Proxy>
tomcat配置文件AJP协议启用
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
启用模块
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so