设为首页 收藏本站
查看: 614|回复: 0

[经验分享] Tomcat集群搭建

[复制链接]

尚未签到

发表于 2015-8-11 15:43:26 | 显示全部楼层 |阅读模式
  关于如何搭建Tomcat集群网上还是能搜到很多相关的教程,这里结合我自己在实际应用中的操作做下备忘。
  案例说明:
  这里以在本机部署的2个tomcat来做集群。当然,tomcat集群可以是分布式的,而差异也仅仅是在地址-端口的配置上,文章后面会讲到。
  部署环境:



操作系统: Red Hat Enterprise Linux Server release 6.0 (Santiago)(x64)
JDK版本: 1.6.0_45
  集群构成:



httpd + tomcat + mod_jk
  版本选择:



httpd-2.2.26
apache-tomcat-7.0.42
mod_jk-1.2.31-httpd-2.2.3 #这里写的是httpd-2.2.3,但其实跟httpd-2.2.26也能适配
  以上文件(都是我从Apache官网下载的)我已经做了打包并上传至百度云盘,需要的朋友可以使用下面的链接下载:



http://pan.baidu.com/s/1mg1I1V6
  把所需文件上传至服务器以后,我们就可以动手来搭建了。
  1.首先安装httpd,过程很简单如下:



#解压httpd包
tar -zxf httpd-2.2.26.tar.gz
cd httpd-2.2.26/
#配置预编译选项,这里只关心输出目录就可以了
./configure --prefix=~/apache2
#编译
make
#安装
make install
  
  2.部署tomcat



#解压tomcat包,并复制成2份
tar -zxf apache-tomcat-7.0.42.tar.gz
mv apache-tomcat-7.0.42/ tomcat1/
cp -r tomcat1/ tomcat2/
  2.1配置tomcat属性,这里以tomcat1、2为例(这里需要注意的地方主要是端口,设置时不要造成冲突即可):



#修改tomcat配置文件server.xml,主要修改:Shutdown端口,Connect服务端口,AJP端口
<Server port="8006" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1" redirectPort="8443" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
#修改集群名称和tomcat别名
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
#去掉cluster节点的注释
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
#修改以上端口是为了避免本机内多个tomcat同时运行造成端口冲突
#修改tomcat配置文件context.xml,为<Context>节点增加distributable="true"属性
  同理,tomcat2的配置:



#修改tomcat配置文件server.xml,主要修改:Shutdown端口,Connect服务端口,AJP端口
<Server port="8007" shutdown="SHUTDOWN">
<Connector port="8082" protocol="HTTP/1.1" redirectPort="8443" />
<Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />
#修改集群名称和tomcat别名
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
#去掉cluster节点的注释
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
#修改以上端口是为了避免本机内多个tomcat同时运行造成端口冲突
#修改tomcat配置文件context.xml,为<Context>节点增加distributable="true"属性
  2.2为tomcat增加个测试文件,后期测试集群性能使用:



<!--编辑webapps/test/test.jsp,主要用来测试负载均衡情况-->
<%@ page contentType="text/html; charset=GB2312" %>
<html>
<head>
<title>tomcat-cluster-test-page</title>
</head>
<body>
SessionID: <%=session.getId() %>
</body>
</html>
  OK,基本上tomcat的配置到这里就结束了。
  
  3.为httpd增加集群配置文件



#在apache2/conf/下增加wokers.properties文件
#文件内添加内容,形式如下:
#server
worker.list=loadbalancer,jkstatus
#tomcat1
worker.tomcat1.port=8010 #该端口是tomcat1的AJP服务端口,设置方式如2.1所示
worker.tomcat1.host=localhost #如果tomcat部署在其他机器上,可填写其服务器IP
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
#tomcat2
worker.tomcat2.port=8011 #该端口是tomcat2的AJP服务端口,设置方式如2.1所示
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
#loadbalancer
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1,tomcat2
worker.loadbalancer.sticky_session=1
worker.jkstatus.type=status
  3.1将mod_jk解压到apache2/modules下并命名文件为mod_jk.so,接下来修改配置文件如下:



#编辑apache2/conf/httpd.conf,在底部增加配置:
#加载mod_jk模块
LoadModule jk_module modules/mod_jk.so
#指定负载均衡配置文件
JkWorkersFile conf/workers.properties
#定义日志输出
JkLogFile logs/mod_jk.log
JkLogLevel debug
#mod_jk按照访问路径来做请求分发
#负载均衡的监控页面请求
JkMount /jkstatus jkstatus
#将其他任意请求都交由loadbalancer控制器处理
JkMount /* loadbalancer
  3.2为httpd手写一个启动控制器:



#!/bin/bash
#     file: run.sh
#     what: httpd-controller, Usage: run.sh [OPTIONS] <start|status|stop>
case "$1" in
start)
/tomcat/apache2/bin/apachectl -f /tomcat/apache2/conf/httpd.conf
echo "apache-httpd started."
;;
stop)
kill -TERM `cat /tomcat/apache2/logs/httpd.pid`
echo "apache-httpd stopped."
;;
status)
if [ -z "`ps -ef|grep httpd|grep -v grep`" ]; then
echo "apache-httpd not started."
else
echo "apache-httpd is running."
fi
;;
*)
echo "Usage: $0 [OPTIONS] <start|stop|status>"
;;
esac
  
  4.启动tomcat和httpd:



tomcat1/bin/startup.sh
tomcat2/bin/startup.sh
apache2/bin/run.sh start
  启动后,通过浏览器访问下监控页面http://192.168.1.100:8080/jkstatus
DSC0000.png
  
  访问http://192.168.1.100:8080/test/test.jsp,页面显示正常:
DSC0001.png
  那么我们来找个机器测试下负载均衡性能,测试结果如下:



[tomcat@server ~/test]$for((i=0;i<1000;i++))
> do
>   wget http://192.168.1.100:8080/test/test.jsp 2>/dev/null
> done
[tomcat@server ~/test]$awk -F. '/SessionID/{a[$2]++}END{for(i in a){print i, a}}' test.jsp*
tomcat1   500
tomcat2   500
  从结果来看:负载后,tomcat接收到的请求占比差不多1:1,还是不错的。
  关掉tomcat1,然后测试下访问会不会出现问题:



[tomcat@server ~]tomcat1/bin/shutdown.sh
[tomcat@server ~]cd test/
[tomcat@server ~/test]$for((i=0;i<1000;i++))
>do
>wget http://192.168.1.100:8080/test/test.jsp 2>/dev/null
>done
[tomcat@server ~/test]
[tomcat@server ~/test]$awk -F. '/SessionID/{a[$2]++}END{for(i in a){print i, a}}' test.jsp*
tomcat2 1000
  OK,所有请求都转发到tomcat2去了,说明节点故障也可以应付。tomcat集群搭建成功。
  
  以上即是tomcat集群搭建的全过程了,文章如有不当之处各位请不吝赐教。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-97577-1-1.html 上篇帖子: javaweb 工程 tomcat启动报错的问你 下篇帖子: maven项目Tomcat controller 404
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表