一. 实验环境
三台服务器, IP 为:
Apache:-----------192.168.4.188
Tomcat1:---------192.168.4.191
Tomcat2:---------192.168.4.190
软件需求: httpd-2.2.8.tar.gz jakarta-tomcat-connectors-1.2.15-src.tar.gz jdk1.5.0_08.tar.gz
apache-tomcat-5.5.26.zip
实验思想: apache 和两个 tomcat 分别在不同的服务器上,实现 apache2+tomcat5.5 集群 +session 同步复制
实验原理: tomcat 做个 WEB 服务器有它的局限性,处理能力低,效率低。承受并发小( 1000 左右)。但目前有不少网站或者页面是 JSP 的。并采用了 tomcat 做为 WEB ,因此只能在此基础上调优。
目前采取的办法是 Apache + Mod_JK + tomcat 来解决一部分请求,用户访问的是 apache ,但有 jsp 页面的时候才会去请求 tomcat 。如果量一大,那么 tomcat 无法承受,那么只能做 tomat 集群, Apache + Mod_JK 就是负载均衡器了。
Mod_JK2 负载均衡 可以把不同的 jsp 请求转发到不同的 tomcat 服务器,还可以侦测服务器存活。如果有条件可以给 Mod_JK2 做一个 HA 因为做完集群后压力就在 JK 上了。
linux 2.6 内核 centos 5.1
二.安装配置
A : Apache 和 jk 的安装配置 (192.168.4.188 服务器 )
1 . tar -zxvf httpd-2.2.8.tar.gz
cd httpd-2.2.8
./configure --prefix=/usr/local/apache2 --enable-modules=so --enable-so
make && make install
2 . JK 安装 (整合 apache tomcat )
tar -zxvf jakarta-tomcat-connectors-1.2.15-src.tar.gz
cd jakarta-tomcat-connectors-1.2.15-src/jk/ native/
./configure --with-apxs=/usr/local/apache2/bin/apxs --with-java-home=/usr/local/java
make && make install
3 . Jk 的 apache 配置文件的修改
( 1 ) jk 的配置
mkdir –p /usr/local/apache2/conf/jk
cd /usr/local/apache2/conf/jk
vi workers.properties 内容如下:
#workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/product/3rd/jdk1.5.0_08
ps=/
worker.list=controller
#========tomcat1========
worker.tomcat1.port=8009
worker.tomcat1.host=192.168.4.191
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
#========tomcat2===========
worker.tomcat2.port=8009
worker.tomcat2.host=192.168.4.190
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
#========controller=======
worker.controller.type=lb
worker.controller.balance_workers=tomcat1,tomcat2
worker.controller.sticky_session=1
( 2 ) apache 配置文件的修改
ls /usr/local/apache2/modules/ ( 看看有没有 mod_jk.so 模块 )
vi /usr/local/apache2/conf/httpd.conf
添加内容如下:
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /usr/local/apache2/conf/jk/workers.properties
JkShmFile logs/mod_jk.shm
JkLogFile /usr/local/apache2/logs/mod_jk.log
JkLogLevel info
JkMount /*.jsp controller
4 .启动 apache
/usr/local/apache2/bin/apachectl start
B .( 192.168.4.191 服务器) tomcat01 的配置
1 . Tomcat 和 jdk 的安装(略)
2 . Tomcat01 的配置
# vi /usr/local/tomcat01/conf/server.xml
( 1 )修改 Engine 节点信息:
( 2 )去掉 的注释符
( 3 )修改 Cluster 节点信息
3 . Netstat –antl |grep 4001 同步监听的端口
C .( 192.168.4.190 服务器) tomcat02 的配置
1 . Tomcat 和 jdk 的安装(略)
2 . Tomcat02 的配置
# vi /usr/local/tomcat02/conf/server.xml
( 1 )修改 Engine 节点信息:
( 2 )去掉 的注释符
( 3 )修改 Cluster 节点信息
3 . Netstat –antl |grep 4001 同步监听的端口
C :两台 tomcat 服务器一些修改注意的地方
1 . 修改 web 应用里面 WEB-INF 目录下的 web.xml 文件,加入标签
直接加在 之前就可以了
做 tomcat 集群必须需要这一步,否则用户的 session 就无法正常使用。
2 .注意事项: 1 、 mcastAddr="224.0.0.1" 这主广播地址因此需要开启网卡组播功能
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
分别在各机器上运行
3 . 测试广播 :
java -cp tomcat-replication.jar MCaster 224.0.0.1 45564 Terminal1
java -cp tomcat-replication.jar MCaster 224.0.0.1 45564 Terminal2
如果不报错则能正常广播
tomcat-replication.jar 下载 : http://cvs.apache.org/~fhanik/tomcat-replication.jar
如果是二台机器,可以用 tcpdump 抓取包
三.测试 集群及 session 同步
1 .在 webapps 下新建 test 目录
目录下建 WEB-INF 目录下的 web.xml 文件
TomcatDemo
2 .再在 webapps 下 建立 print.jsp test.jsp
print.jsp :
test.jsp :
Cluster App Test
Server Info:
0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("Session P±?b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"");
System.out.println( name + " = " + value);
}
%>
?3?
?:
重启所有的服务。
3 . 通过不同的浏览器,访问: http://192.168.4.188/test/test.jsp, 显示如下:
IE 显示:
http://blog.运维网.com/attachment/200907/200907101247210433843.bmp
遨游显示:
http://blog.运维网.com/attachment/200907/200907101247210550171.bmp
Session 复制的查看:
同时查看两台 tomcat 的 tomcat 的日志:
tail -f catalina.out
我现在 kill 掉一个 tomcat02 ,注意查看 tomcat01 的日志如下:
009-7-7 15:55:48 org.apache.catalina.cluster.tcp.SimpleTcpCluster memberDisappeared
信息 : Received member disappeared:org.apache.catalina.cluster.mcast.McastMember[tcp://192.168.4.190:4001,catalina,192.168.4.190,4001, alive=44385]
日志说明 tomcat02 的 session 已经通过同步端口 4001 同步到 tomcat01 上了,由于上面用遨游浏览器显示的是 tomcat2 的 session ,现在在刷新一下页面正常显示,日志转移到 tomcat01 上来了,说明成功。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com