Products
GG网络技术分享 2025-03-18 16:13 0
要想使用Apache做反向代理,实现Tomcat负载均衡,首先你要知道有几种连接方式,怎样连接的,还有集群方面比较关心的问题,如何保持Session持久化。原来部署过mod_jk方式的,相对http_proxy比较复杂点,这次就部署测试下http_proxy,因为本公司大多数系统都是Ubuntu,所以这次也用Ubuntu系统吧!与CentOS相比配置基本相同,只是apache安装和配置路径不同。那就简单介绍下,让没有搞过Apche+Tomcat集群的博友们心里有个底。
1、Tomcat+Apache实现负载均衡的三种连接方式
1.1 apache通过mod_proxy(http_proxy)模块,使用HTTP协议与Tomcat连接,并通过route唯一标识关联后端Tomcat
1.2 apache通过mod_jk模块,使用AJP协议与Tomcat连接,这种方式使用广泛
1.3 apache通过mod_proxy(ajp_proxy,Apache2.2中才有)模块,只能用AJP协议代理
2、Tomcat SessionID持久化三种方法
2.1 Session粘性:通过浏览器Cookie绑定SessionID,通过sticky模式将同一Session请求分配到同一Tomcat上
2.2 Session复制:Tomcat通过广播形式将Session同步到其他Tomcat节点,并且Linux下要手动开启开放广播地址。不易后端节点过多
2.3 Session保存数据库(memcache、redis):将SessionID保存在共享的数据库中
3、环境说明
OS:Ubuntu12.04_x64
Apache2.2:192.168.1.100
Tomcat7_node1:192.168.1.111:8080
Tomcat7_node2:192.168.1.112:8090
连接方式采用http_proxy,Session持久化采用Session粘性。
4、安装Apache
# apt-get install apache2
5、开启Apache代理相关模块
# sudo a2enmod proxy
# sudo a2enmod proxy_http
# sudo a2enmod proxy_banancer
# sudo a2enmod proxy_connect
# sudo a2enmod proxy_ftp
6、配置代理(末尾添加)
# vi /etc/apache2/apache2.conf
<VirtualHost *:80>
ServerName 192.168.18.113
ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass / balancer://cluster/ stickysession=JSESSIONID nofailover=Off
ProxyPa***everse / balancer://cluster/
ErrorLog \"/var/log/apache2/cluster-error.log\"
CustomLog \"/var/log/apache2/cluster-access.log\" common
<proxy balancer://cluster>
BalancerMember http://192.168.18.109:8084 loadfactor=1 route=node1
BalancerMember http://192.168.18.109:80 loadfactor=1 route=node2
</proxy>
</VirtualHost>
参数说明:
ProxyPass /images !:图片不交给后端Tomcat处理,也是为了提升对静态文件的处理性能
stickysession:通过Session粘性来Session持久化
nofailove:是否打开失败转移,设置没有session复制情况下,默认Off,如果其中一台故障,那么原来分配这台连接不会自动转移到另外一台上,必须重启浏览器才可以
ProxyPa***everse:#显示由反向代理服务器发送的HTTP回应头的URL,一般与ProxyPass配置相同
loadfactor:请求权重值
route:设置全局唯一标识符,要与Tomcat server.xml配置文件一致
7、配置tomcat_node1和tomcat_node2,node1使用默认8080,node2使用8090端口
# tar zxvf apache-tomcat-7.0.55.tar.gz
# mv apache-tomcat-7.0.55 tomcat_node1
# cd tomcat_node1/webapps/ROOT
# rm ./*
# vi index.jsp #写一个索引页,输出SessionID,方面看测试效果
<%@page contentType=\"text/html;charset=GB2312\"%>
<html>
<head> </head>
<body>
<%String s = session.getId();%>
<p>SessionID: <%=s %></p>
</body>
</html>
8、配置Tomcat全局唯一标识符
将原<Engine name=\"Catalina\" defaultHost=\"localhost\">修改为<Engine name=\"Catalina\" defaultHost=\"localhost\" jvmRoute=\"node1\">
将原<Engine name=\"Catalina\" defaultHost=\"localhost\">修改为<Engine name=\"Catalina\" defaultHost=\"localhost\" jvmRoute=\"node2\">
9、Tomcat项目WEB-INF添加distributable元素,告诉servlet/jsp容器,编写的应用将分布式处理
# /root/tomcat_node1/webapps/ROOT/WEB-INF/web.xml #添加到末尾</web-app>上面,两台都要配置
<description>
Welcome to Tomcat
</description>
<distributable/>
</web-app>
10、启动Apache和Tomcat_node1和node2
# /etc/init.d/apache2 start
# cd tomcat_node1/2
# ./bin/startup.sh
11、测试思路
浏览器访问http://192.168.1.100,按F5刷新就会一直停留在tomcat_node1(SessionID: 7D59B43D2EAA75D15A37886395065AE4.node1),如果不是停留在node1的话,而是轮训访问node1和node2,则说明Session持久化不成功。打开另一个浏览器,这时一般会访问node2(SessionID: 5AFB71ABB3E7FA50067FB4A73CA35F1A.node2),按F5刷新几次也会一直停留在node2上。
如何开启apache?开启apache方法是什么?首先在可执行目录下找到httpd.exe命令,然后运行cmd,执行类似以下命令:
C:\\\"Program Files\"\\\"Apache Software Foundation\"\\Apache2.2\\bin\\httpd.exe -k start
如果端口被占,你可以编辑.conf文件,更改监听端口,改之前备份conf文件。就可以启动服务了。
1.Apache是一款Web服务器软件,有多种产品,可以支持SSL技术,支持多个虚拟主机。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
2.Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。它可以在大多数计算机操作系统中运行,由于其跨平台和安全性被广泛使用。
3.Apache的诞生极富有戏剧性。当NCSAWWW服务器项目停顿后,那些使用NCSA WWW服务器的人们开始交换他们用于该服务器的补丁程序,他们也很快认识到成立管理这些补丁程序的论坛是必要的。
4.就这样,诞生了Apache Group,后来这个团体在NCSA的基础上创建了Apache。
5.Apachehttp server是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上。
Demand feedback