使用Apache HTTPD和JK实现Tomcat集群
昨天在单位折腾了大半天,tomcat的集群终于弄好了,原来以为Tomcat的集群只需要在tomcat本身配置一下就行了呢,找了很多资料,不是自己想像的这样,下面对tomcat的集群做一下整理吧,备用。PS:集群应用涉及到上传是个小问题。
工具 apache httpd 2.2, jk 1.23 ,tomcat 7
1.tomcat配置
以本机下做tomct集群为例,复制三份tomcat,分别修改server.xml文件,修改地方如下:
1.tomcat关闭时的监听端口
<Server port="18005" shutdown="SHUTDOWN">
2.tomcat对外直接访问的端口
<Connector port="9901" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
3.修改tomcat提供其他容器访问的AJP端口
<Connector port="11009" protocol="AJP/1.3" redirectPort="8443" />
4.修改tomcat的jvmRoute名称
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
//说明:蓝色部分是3个tomcat应该修改的,本机下,参数不能一样
2.一路next安装Apache httpd,将mod_jk-1.2.31-httpd-2.2.3.so复制到apache的modules目录下
3.修改apache配置
修改httpd.conf引入mod_jk.conf配置文件
include conf/mod_jk.conf
conf目录下新建mod_jk.conf文件,内容如下:
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so JkWorkersFile conf/workers.properties #指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器名 JkMount /*.jsp controller
#说明: 1.LoadModule 加载jk插件到apache
2.JkWorkersFile 指定jk配置文件位置
3.JkMount设置过哪些请求滤到tomcat处理,上面是简单示例配置,下面更详细
在conf目录下新建workers.properties文件,内容如下:
#server
worker.list = controller
#========tomcat1========
worker.tomcat1.port=11009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor =1
#========tomcat2========
worker.tomcat2.port=12009
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor =1
#========tomcat3========
worker.tomcat3.port=13009
worker.tomcat3.host=localhost
worker.tomcat3.type=ajp13
worker.tomcat3.lbfactor =1
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balance_workers=tomcat1,tomcat2,tomcat3
worker.controller.sticky_session=false
worker.controller.sticky_session_force=1
#worker.controller.sticky_session=1
//说明:上面蓝色参数就是tomcat中设置的参数
其中lbfactor表示服务器作为主服务器的可能性
4.以上配置完成后,就可以在每个tomcat下部署相同的应用,分别启动tomcat,然后启动apache,然后就可以通过http://localhost/web应用名称/XXX访问了,这里不需要使用tomcat的端口,而是通过apache的端口来访问的,apache会自动负载均衡到每个tomcat应用服务器。