apache tomcat 集群 负债均衡 部署

阅读:343 2019-03-19 14:40:08 来源:开源中国

apache+tomcat配置负载均衡

此文档内容已经经过测试

javasdk版本:1.6.20apache版本:2.2.15http://httpd.apache.org/tomcat版本:apache-tomcat-6.0.35http://tomcat.apache.org/download-60.cgi====================================安装javasdk就默认安装了.

apache的安装没有什么特别的,一路下一步即可,当然,最好修改apache的默认安装目录.安装时注意,80端口不要被占用了.

tomcat的安装需要考虑下,是采用解压版本的tomcat,还是安装版本的tomcat.我们这里采用解压版的tomcat

因为需要做tomcat的负载均衡,因此肯定需要解压2个以上的tomcat.我们这里用两个tomcat.

解压到某一个目录中后,需要修改tomcat目录中bin目录下的catalina.bat文件和catalina.bat文件,在文件首部加入:setjdk_dir=c:programfilesjavajdk1.6.0_20setjava_home=%jdk_dir%settomcatstart="d:tomcat1bin"这样运行每个tomcat时,就不会因java和tomcat路径混乱导致出错了.

配置一、配置apache修改apache的配置文件httpd.conf

1.启用moddle将以下module的注释去掉,这里并没有使用mod_jk.so进行apache和tomcat的链接,从2.x以后apache自身已集成了mod_jk.so的功能

。只需简单的把下面几行去掉注释,就相当于以前用mod_jk.so比较繁琐的配置了。这里主要采用了代理的方法,就这么简单。loadmoduleproxy_modulemodules/mod_proxy.soloadmoduleproxy_connect_modulemodules/mod_proxy_connect.soloadmoduleproxy_ftp_modulemodules/mod_proxy_ftp.soloadmoduleproxy_http_modulemodules/mod_proxy_http.soloadmoduleproxy_ajp_modulemodules/mod_proxy_ajp.soloadmoduleproxy_balancer_modulemodules/mod_proxy_balancer.so

注:我启用了三个就ok了mod_proxy.so/mod_proxy_ajp.so/mod_proxy_balancer.so

2.添加页面再找到加上index.jsp修改成directoryindexindex.htmlindex.jsp

3、在httpd.conf同级目录新建mod_jk.conf

内容

#加载mod_jkmoduleloadmodulejk_modulemodules/mod_jk-1.2.26-httpd-2.2.4.so#指定workers.properties文件路径jkworkersfileconf/workers.properties#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器jkmount/*.jspcontrollerjkmount/*.docontrollerjkmount/*.actioncontroller

然后在httpd.conf文件最下方加入:includeconf/mod_jk.conf

文件workers.properties内容

worker.list=controller#server列表#========tomcat1========worker.tomcat1.port=8009#ajp13端口号,在tomcat下server.xml配置,默认8009worker.tomcat1.host=localhost#tomcat的主机地址,如不为本机,请填写ip地址worker.tomcat1.type=ajp13worker.tomcat1.lbfactor=1#server的加权比重,值越高,分得的请求越多#========tomcat2========worker.tomcat2.port=8010#ajp13端口号,在tomcat下server.xml配置,默认8009worker.tomcat2.host=localhost#tomcat的主机地址,如不为本机,请填写ip地址worker.tomcat2.type=ajp13worker.tomcat2.lbfactor=1#server的加权比重,值越高,分得的请求越多

#========controller,负载均衡控制器========worker.controller.type=lbworker.controller.balanced_workers=tomcat1,tomcat2#指定分担请求的tomcatworker.controller.sticky_session=1

4.虚拟主机设置(这一步还没做)接下来进行虚拟主机的设置。apache的虚拟主机设置如下:首先要修改conf/httpd.conf找到(#includeconf/extra/httpd-vhosts.conf),把注释去掉。#virtualhostsincludeconf/extra/httpd-vhosts.conf在下面加入serveradmintgh1981@163.comservernamelocalhostserveraliaslocalhostproxypass/balancer://cluster/stickysession=jsessionidnofailover=onproxypassreverse/balancer://cluster/其中的域名和路径根据你自己情况设置然后再设置tomcat虚拟主机

二、tomcat配置

修改tomcat1的配置文件server.xml

1.修改shutdown端口(tomcat的关闭端口)tomcat1:tomcat2:

2.修改运行端口因为tomcat有两个,因此只需要修改其中某一个tomcat运行的端口即可:tomcat1:tomcat2:注:只需要修改port参数,不用修改redirectport参数

3.修改connector的端口tomcat1:tomcat2:注:只需要修改port参数,不用修改redirectport参数

4.启用配置engine为了通过ajp来支持负载均衡,需要配置engine的jvmroute属性.server.xml文件中,修改engine段,增加jvmroute参数,如下:tomcat1:tomcat2:

5.配置clusterserver.xml文件中,原来的配置应该是被注释的,现在

用下面的配置代替:(tomcat文档中推荐的).这个设置是主要用以tomcat的集群.关键在于receiver段中的port参数,tomcat之间必须不同:tomcat1:

tomcat2:

三、启动服务,测试tomcat自带的例子

1、测试apache和tomcat协作。先在每个tomcat中的webappsroot下的index.jsp下面加上以下的测试代码部分:(x代表不同的tomcat的输出不同的信息),把

index.html删除,以免影响测试效果。在最后面的加上.即之间。<%system.out.println("hello,world!");%>然后再通过http://127.0.0.1/来访问一下,就会出现大家熟悉的猫猫。然后再通过分别访问http://127.0.0.1:8080/,http://127.0.0.1:8081/,它们访问的内容和上面的http://127.0.0.1/是一样的。这样就说明apache和tomcat整合成功!2、测试均衡器通过http://127.0.0.1多次访问,要想看到真正的效果,必须用一些压力测试工具,可用微软microsoftwebapplicationstress

tool进行简单压力测试,不然你靠不停刷新是体现不出来的,你只会在一个tomcat的控制台有输出结果。只用用压力测试工具模拟

大量用户同时访问,你会发现四个tomcat控制台均有打出控制信息,说明均衡器工作正常。

四、问题处理

若启动时出现这样的错误提示:2010-06-2815:04:51org.apache.catalina.ha.deploy.farmwardeployerstart严重:farmwardeployercanonlyworkashostclustersubelement!则将以下部分注释掉:(一般情况都会遇到的)

以上内容参考了诸多文档,终于自己测试ok并部署成功了.

http://127.0.0.1/test.jsp打开多个窗口分别访问上面地址。。确保请求的不是一个tomcat都输入输入名称,值,如:tomcat1输入tomcat1,tomcat1tomcat2输入tomcat2,tomcat2提交后session列表会显示当前session中保持的值,这时可以停止tomcat1服务(此时tomcat1服务已停止,),再刷新访问

tomcat1的浏览器,在输入新值提交,如原来tomcat1还存在说明session同步成功,(因为此时tomcat1已停止,请求的是tomcat2服

务,tomcat1中session已成功复制到tomcat2服务中)

在做session同步的时候,需要注意一点的是:

1、保存至session中的对象一定要是可进行序列化的(实现serializable接口),俺在

这个问题上折腾了会,其实想想也不难,session同步就是将对象/值在网络中传输的一个过程,apache,tomcat底层做session同步

也不过这样做,所以对象的话必须是可序列化的。

2、当然还有一种方法,在你的项目不要经过分布试部署的时候比较简单:去掉web.xml中的。这种不太赞成,因为这样设置session将不能同步,session不能同步会导致可不是个理想的状态,你说呢、、、

ok!!完成!

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服