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

[经验分享] 搞定apache,tomcat负载均衡

[复制链接]

尚未签到

发表于 2017-1-1 11:33:28 | 显示全部楼层 |阅读模式
最近看集群的资料,利用工作比较空闲的时间,查看网上的资料。搭了一个Apache+JK2+Tomcat的集群环境,经过自己的系统测试,实现了集群的负载均衡和失败托管。简单的说一下这种集群:
反向代理负载均衡 (Apache+JK2+Tomcat)
使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的。这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式。

软件列表如下:
Apache 服务器 下载地址:http://httpd.apache.org/download.cgi  版本2.2
Tomcat 下载地址:http://tomcat.apache.org/download-60.cgi 版本6.0
mod_jk-1.2.30-httpd-2.2.3.so 下载地址:http://tomcat.apache.org/dev/dist/tomcat-connectors/jk/binaries/win32/jk-1.2.30/
1:首先实现负载均衡。
1.1.安装完后,apache,tomcat服务器后,在我的电脑目录结构如下:
D:\apache,D:\ tomcat-6.0.26-1, D:\ tomcat-6.0.26-1.
1.2 .将下载过来的mod_jk-1.2.30-httpd-2.2.3.so,复制放到Apache服务器里面的D:\apache\modules目录下。
1.3.然后在D:\apache\conf\目录下面找到httpd.conf文件。修改文件的最后一行在最后面加上一句.
include "D:\apache\conf\mod_jk.conf",
DSC0000.jpg
1.4.在D:\apache\conf目录下面新建mod_jk.conf文件。文件内容如下:
#加载mod_jk Module
LoadModule jk_module modules/mod_jk-1.2.30-httpd-2.2.3.so
#指定 workers.properties文件路径
JkWorkersFile conf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
JkMount /*.* controller  
DSC0001.jpg
1.5.在http.conf同目录下新建 workers.properties文件,内容如下:
worker.list = controller,tomcat-6.0.26-1,tomcat-6.0.26-2  #server 列表
#======== tomcat-6.0.26-1========
worker.tomcat-6.0.26-1.port=8009       #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat-6.0.26-1.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat-6.0.26-1.type=ajp13
worker.tomcat-6.0.26-1.lbfactor = 1    #server的加权比重,值越高,分得的请求越多
#======== tomcat-6.0.26-2========
worker.tomcat-6.0.26-2.port=9009       #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat-6.0.26-2.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat-6.0.26-2.type=ajp13
worker.tomcat-6.0.26-2.lbfactor = 1    #server的加权比重,值越高,分得的请求越多
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat-6.0.26-1,tomcat-6.0.26-2  #指定分担请求的tomcat
worker.controller.sticky_session=1
DSC0002.jpg
1.6.因为我是一台电脑上配置,所以最后还要修改第二个tomcat服务器的配置端口。如果在两台电脑上就不用修改端口了。
<Server port="9005" shutdown="SHUTDOWN">将关闭端口改为9005。
<Connector port="9080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />将连接端口改为9080。
  <!-- Define an AJP 1.3 Connector on port 8009 -->
   <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />将ajp1.3端口改为9009
DSC0003.jpg

至此负载均衡的配置完成。直接将手上的项目拷贝到两个tomcat目录下。即可进行负载均衡测试。打开多个ie窗口,观察两个tomcat后面的输出。
DSC0004.jpg

2:实现失败托管,也就是session复制。
2.1.在tomcat1里面的server.xml 增加
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat-6.0.26-1">
tomcat2里面增加:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat-6.0.26-2">
这些元素在tomcat里面被注释掉了,找到注释的部分位置,加在那个位置即可。
2.2.对于Cluster元素的配置。我直接从tomcat里面拷贝了完整的代码,在tomcat5.tomcat6里面都是可以的。将它粘贴到两个tomcat的sever.xml

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>因为是在同一台电脑上,所以在粘贴第二个时。微做修改将tomcat将端口改为4002;
   <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4002"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
  2.3.最后要tomcat支持session复制,必须在web.xml里面加上一个标签。<distributable/> 在你工程的web.xml最后面加上这一句即可。最后运行你的tomcat,。用户登陆进系统后,查看tomcat运行的日志。看它运行在那个tomcat下,然后此时关闭这个tomcat。然后会发现另外一个tomcat此时会将关闭的那个tomcat的session复制过来,实现了失败托管。你再继续运行系统,发现不用退出系统,也能够继续运行该系统,此时跳转到另外一个tomcat上了。这样虽然在服务器端down机了,但是对客户来说却是透明的。当然这只是一个demo,实际运行可能比这复制多了。学习中………..
最后强调一点,我的系统原来权限引擎这块实体没有实现序列化接口。以前系统没有考虑到集群环境。(小系统)。这在session复制中肯定会报错。所有实体必须实现序列化接口,现在系统基本实现了集群,但是某些模块还是有些序列化没实现的小问题。有些bug,初学这个,问题还是挺多的,敬请各位指教。

运维网声明 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-322418-1-1.html 上篇帖子: Apache+Tomcat实现负载均衡 下篇帖子: Apache Axis2 环境搭配详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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