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文件也是不存在的,也需要我们自己建立。这个文件的作用是对用于均衡负载的 负载器进行具体的登记。(比如我们用的2个tomcat).换句话说,workers.properties就是对几个worker的登记表。我们的2个tomcat就作为2个worker被登记在这个文件中。而具体要如何进行登记,下面再具体说。
第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 端口号,在tomcat下server.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的结构是随机码加上tomcat的jvmRoute值,如果需要获取sessionId来使用,就需要截取了..
测试完成!!!
问题整理
1、apache启动不起来
建议:通过命令启动,可查看报什么错(我是删除服务,重新注册的。。额,不要笑我)
1.1、端口占用,修改对应的端口
80端口:httpd.conf文件中的所有80端口改成未使用的端口(例如8080);
43的端口:改extra/httpd-ahssl.conf和extra/httpd-ssl.conf中所有的443改成未使用的端口(例如442)。1.2、必须连接有线网络,不能使用无线。
1.3、apache和mod_jk不兼容
2、session共享问题
2.1、如图
2.2、如图
- Tomcat负载均衡和集群环境的搭建(从无到有)
- Tomcat负载均衡和集群环境的搭建(从无到有)
- Tomcat负载均衡和集群环境的搭建
- Tomcat负载均衡和集群环境的搭建
- Tomcat负载均衡和集群环境的搭建
- Tomcat负载均衡和集群环境的搭建
- Tomcat负载均衡和集群环境的搭建
- Tomcat负载均衡和集群环境的搭建
- Tomcat负载均衡和集群环境的搭建
- Tomcat负载均衡和集群环境的搭建
- Tomcat负载均衡和集群环境的搭建
- Tomcat负载均衡和集群环境的搭建
- Tomcat负载均衡和集群环境的搭建
- Tomcat 的集群和负载均衡
- Tomcat 的集群和负载均衡
- Windows+Nginx+Tomcat搭建负载均衡和集群环境同时实现session共享(一)
- Windows+Nginx+Tomcat搭建负载均衡和集群环境同时实现session共享(一)
- tomcat集群和负载均衡(1)
- 移动开发之设计稿转换页面单位尺寸
- [绍棠] iOS开发--AVFoundation自定义相机
- 项目部署时自动停止在ThreadPoolExecutor类中的processWorkerExit(w,completedAbruptly)处
- JQ获取name为test的input文本框中的内容
- 阿里巴巴java开发手册中的为什么说所有的 POJO 类属性必须使用包装数据类型?
- Tomcat负载均衡和集群环境的搭建(从无到有)
- 慢sql日志查询
- ROS与python学习
- java web之七
- 用vs2008创建静态库
- openstack plugin 之(七)怎怎样写 OpenStack Neutron 的 Extension
- qt,qt creator官方下载地址
- Ubuntu软件卸载
- Androidk开发的那些坑之-------------------AndroidManifest.xml里面meta-data 的value定义