Tomcat负载均衡和集群环境的搭建(从无到有)

来源:互联网 发布:c语言app 编辑:程序博客网 时间:2024/06/17 00:54

1、环境要求:windowns系统 + tomcat7 + Apache2.4 + mod_jk

 

2、下载apache2.4:http://httpd.apache.org/download.cgi






3、下载mod_jk:http://tomcat.apache.org/download-connectors.cgi







4、下载tomcat7:http://tomcat.apache.org/download-70.cgi



5、安装apache

5.1、修改conf/httpd.conf的SRVROOT值


修改为具体的路径:(路径可以自定义的,但是一定要明确,且不能包含中文路径)




5.2、安装apache服务

进入Apache24/bin路径下,执行

httpd.exe -k install -n 自定义服务名

或者

httpd.exe -k install

注意:不指定服务名就是默认的;若指定服务名需要加双引号



5.3、启动Apache2.4,运行bin/ApacheMonitor.exe文件




5.4、访问:http://localhost/

Apache默认是80的端口(可以更改)




恭喜,apache安装成功



6、apache配置负载均衡

6.1、取出下载的mod_jk.so,将其放置到Apache24\modules文件夹下

6.2、在conf/httpd.conf 最后一行添加配置,指向mod_jk.so

include conf/mod_jk.conf

6.3、在conf文件夹下,新建mod_jk.conf文件,内容如下

#加载mod_jk Module
LoadModule jk_module modules/mod_jk.so
#指定 workers.properties文件路径
JkWorkersFile conf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
JkMount /* controller

2行中的mod_jk.so,就是我们之前放到modules目录下的那个.so文件。这里的名字就根据放进去的实际名字来写。版本不同,名字也就不一样。当然,mod_jk.so这个文件允许自己重命名。重命名后,只要在这里相应的配置上重命名后的名字,不会影响这个插件的功能。

4行中conf/workers.properties文件也是不存在的,也需要我们自己建立。这个文件的作用是对用于均衡负载的 负载器进行具体的登记。(比如我们用的2tomcat.换句话说,workers.properties就是对几个worker的登记表。我们的2tomcat就作为2worker被登记在这个文件中。而具体要如何进行登记,下面再具体说。

6行的作用就是配置apache对哪些请求进行转发。这里我按照网络上的教程,配置了对所有的请求的转发。那么,当有请求到达apache时,apache就会根据当时的负载情况,从worker中挑出负载低的那个worker,将这个jsp请求转发给他。(这里需要注意,当部署到tomcat上的项目有更多类型的请求的时候,需要在这里配置更多的请求规则)。而controller会在workers.peroperties中被配置。总的来说,转发规则的格式如下:

JkMount + 过滤请求类型+ 处理器


6.4、接着,在conf 文件夹下新建workers.properties文件夹,内容如下

worker.list = controller,tomcat1-1,tomcat1-2,tomcat2-1,tomcat2-2 #server列表

 

#========tomcat1-1========

worker.tomcat1-1.port=9300 #ajp13 端口号,在tomcatserver.xml配置,默认8009

worker.tomcat1-1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址

worker.tomcat1-1.type=ajp13 #定向包协议

worker.tomcat1-1.lbfactor = 1 #server的加权比重,值越高,分得的请求越多

worker.tomcat1-1.redirect = tomcat1-2

 

#========tomcat1-2========

worker.tomcat1-2.port=9301

worker.tomcat1-2.host=localhost

worker.tomcat1-2.type=ajp13

worker.tomcat1-2.lbfactor = 1

worker.tomcat1-2.redirect = tomcat1-1#会监听tomcat1-1,如果tomcat1-1挂了,会接替tomcat1-1的工作

worker.tomcat1-2.activation=disabled

 

#========tomcat2-1========

worker.tomcat2-1.port=9302

worker.tomcat2-1.host=localhost

worker.tomcat2-1.type=ajp13

worker.tomcat2-1.lbfactor = 1

worker.tomcat2-1.redirect = tomcat2-2

 

#========tomcat1-2========

worker.tomcat2-2.port=9303

worker.tomcat2-2.host=localhost

worker.tomcat2-2.type=ajp13

worker.tomcat2-2.lbfactor = 1

worker.tomcat2-2.redirect = tomcat2-1

worker.tomcat2-2.activation=disabled

 

#========controller,负载均衡控制器========

worker.controller.type=lb

worker.controller.balanced_workers=tomcat1-1,tomcat1-2,tomcat2-1,tomcat2-2 #指定分担请求的tomcat

worker.controller.sticky_session=true    #会话是否有粘性,false表示无粘性,同一个回话的请求会到不同的tomcat中处理

worker.controller.sticky_session_force=false #当一个节点蹦了,如果设值为true,那么服务器返回500错误给客户端,如果设值为false,则转发给其他的tomcat,但是会丢失回话信息

 


7、tomcat配置

7.1、修改tomcat/conf/server.xml 文件中的端口

需要修改以下几个端口(建议:每个端口定义好规则,便于以后拓展tomcat服务



7.2、在tomcat/conf/server.xml 文件中配置集群信息,可用于session共享

Engine 节点下添加以下代码。


<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">

<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="4001"

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>

7.3、指定<Engine>的属性

原来是:

修改后:


jvmRoute 指定的值是Apache24\conf\workers.properties配置文件中配置的的worker名称

 

7.4、web项目的session共享

需要在web项目下web.xml的web-app节点下添加<distributable/> 



8、重启apache

因为修改apache配置,需要重启

 

 

 

完成集群部署!!!

如果问题,我会列举几个问题在文件尾部!

 

测试:

1、启动apache

2、启动tomcat1-1、tomcat2-1

现在请求分给了tomcat2-1


现在我们停止tomcat2-1,结果是



由上图可以知道,tomcat之间已经实现session共享,但是,需要注意的是,这里的sessionId的结构是随机码加上tomcatjvmRoute值,如果需要获取sessionId来使用,就需要截取了..

 

测试完成!!!


问题整理

1apache启动不起来

建议:通过命令启动,可查看报什么错(我是删除服务,重新注册的。。额,不要笑我)

1.1、端口占用,修改对应的端口

80端口:httpd.conf文件中的所有80端口改成未使用的端口(例如8080)

43的端口:改extra/httpd-ahssl.confextra/httpd-ssl.conf中所有的443改成未使用的端口(例如442)1.2、必须连接有线网络,不能使用无线。

1.3apachemod_jk不兼容

 

 

2session共享问题

2.1、如图


2.2、如图




阅读全文
0 0
原创粉丝点击