首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > Apache >

Apache + Tomcat + mod_jk 调度"垂直负载均衡"

2012-06-30 
Apache + Tomcat + mod_jk 部署垂直负载均衡转载请注明:出自?http://nigelzeng.iteye.com/blog/1463735?

Apache + Tomcat + mod_jk 部署"垂直负载均衡"

转载请注明:出自?http://nigelzeng.iteye.com/blog/1463735?

谢谢~

------------------------------------------华丽的分割线-----------------------------------------

?

首先解释一下什么是“垂直负载均衡”:

所谓“垂直负载均衡”,就是负载均衡用的web server在同一台机器上,也就是说两个或者多个tomcat都在一台机器上面,做本地的负载均衡。
当然还有“水平负载均衡”:也就是多个web server部署在多个不同的物理机上。------------------------------------------华丽的分割线-----------------------------------------为什么要使用JK的负载均衡?????除了JK方式之外,还有http_proxy、ajp_proxy两种方式????JK是最常见的方式,你可以在网上找到很多关于配置JK的网页,当然最全的还是其官方所提供的文档。JK 本身有两个版本分别是 1 和 2,目前 1 最新的版本是 1.2.19,而版本 2 早已经废弃了,以后不再有新版本的推出了,所以建议你采用版本 1。????????JK 是通过 AJP 协议与 Tomcat 服务器进行通讯的,Tomcat 默认的 AJP Connector 的端口是 8009。JK 本身提供了一个监控以及管理的页面 jkstatus,通过 jkstatus 可以监控 JK 目前的工作状态以及对到 tomcat 的连接进行设置。????相对于 JK 的连接方式,后两种在配置上是比较简单的,灵活性方面也一点都不逊色。但就稳定性而言就不像 JK 这样久经考验,毕竟 Apache 2.2.3 推出的时间并不长,采用这种连接方式的网站还不多,因此,如果是应用于关键的互联网网站,还是建议采用 JK 的连接方式。------------------------------------------华丽的分割线-----------------------------------------部署环境:CentOS?5.4Apache:httpd?2.2.3Tomcat:apache-tomcat-7.0.21.tarjk_mod:tomcat-connectors-1.2.32-src.tarJDK:jdk-6u27-linux-i586
需要达成的目的:????实现对一个应用目录的负载均衡,即所有用户对这个应用目录的访问流量用多个tomcat来分担。------------------------------------------华丽的分割线-----------------------------------------JK 的配置最关键的有三个文件,分别是?
httpd.conf?????????????????????????????????
Apache 服务器的配置文件,用来加载 JK 模块以及指定 JK 配置文件信息
workers.properties????????????????????????????????
到 Tomcat 服务器的连接定义文件
uriworkermap.properties????????????????????????????????
URI 映射文件,用来指定哪些 URL 由 Tomcat 处理,你也可以直接在 httpd.conf 中配置这些 URI,但是独立这些配置的好处是 JK 模块会定期更新该文件的内容,使得我们修改配置的时候无需重新启动 Apache 服务器。
其中第二、三个配置文件名都可以自定义。
-------------------------------------------华丽的分割线----------------------------------------详细步骤:1、安装软件????1)apache、tomcat的安装步骤省略????2)jk_mod安装也比较简单,可以上网查询如何安装????3)JDK之前我的博客里面也有说过,不赘述。???????这里要注意输入JAVA_HOME、CLASSPATH、还有加上JDK的bin目录的PATH。(特别是JAVA_HOME,一定要export,否则tomcat启动不起来)-------------------------------------------华丽的分割线----------------------------------------2、修改apache的配置文件????1)修改http.conf,配置mod_jk加入:LoadModule jk_module modules/mod_jk.soJkWorkersFile conf/workers.propertiesJkMountFile conf/uriworkermap.propertiesJkLogFile ????logs/mod_jk.logJkLogLevel ???warnJkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

????2)修改conf/下的workers.properties???# list the workers by name
worker.list=DLOG4J, status
# localhost server 1# ------------------------worker.s1.port=8019worker.s1.host=localhostworker.s1.type=ajp13worker.s1.lbfactor=1
# localhost server 2# ------------------------worker.s2.port=8029worker.s2.host=localhostworker.s2.type=ajp13worker.s2.lbfactor=1#worker.s2.stopped=1
worker.DLOG4J.type=lbworker.retries=3worker.DLOG4J.balanced_workers=s1, s2worker.DLOG4J.sticky_session=1
worker.status.type=status
注:里面的port指的是tomcat的AJP端口:默认是8009,修改之后,这里的端口要和server.xml里的AJP端口一致哦。
????3)修改conf下的uriworkermap.properties:/*=DLOG4J/jkstatus=status
!/*.gif=DLOG4J!/*.jpg=DLOG4J!/*.png=DLOG4J!/*.css=DLOG4J!/*.js=DLOG4J!/*.htm=DLOG4J!/*.html=DLOG4J
注:这个应该都能看明白了……status是JK提供的监控页面,用http://yoursite/jkstatus来访问
-------------------------------------------华丽的分割线----------------------------------------
3、修改tomcat的server.xml文件????主要是端口的修改:我列出我的tomcat1和tomcat2的端口配置:tomcat 1 :????<Server port="8015" shutdown="SHUTDOWN"> ?#这里的端口两个tomcat的要不一样
????<Connector port="8081" protocol="HTTP/1.1" ?#这里的监听端口也需要不一样???????????????connectionTimeout="20000"????????????????redirectPort="8443" />
????<Connector port="8019" protocol="AJP/1.3" redirectPort="8443" /> #AJP端口
????<Engine name="Catalina" defaultHost="localhost"?debug="0" jvmRoute="s1"> ?????# s1是worker.properties里定义的,要一致
????<Host name="localhost" ?appBase="webapps"????????????unpackWARs="true" >??????<Context path="" docBase="/var/www/html/" debug="0" /> # 新加的
注意:????红色部分表示新增或者修改的地方,要特别注意!
tomcat 2 :
????<Server port="8025" shutdown="SHUTDOWN">????????<Connector port="8082" protocol="HTTP/1.1"????????????????connectionTimeout="20000"????????????????redirectPort="8443" />??????<Connector port="8029" protocol="AJP/1.3" redirectPort="8443" />????????<Engine name="Catalina" defaultHost="localhost"?debug="0" ?jvmRoute="s2">
????<Host name="localhost" ?appBase="webapps"????????????unpackWARs="true" >????<Context path="" docBase="/var/www/html/" debug="0" />
-------------------------------------------华丽的分割线----------------------------------------
4、测试配置是否成功????1)先启动tomcat,再启动apache????2)在/var/www/html 目录里写入test.jsp文件,内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";System.out.println(">>>>>>This is 37 JSP page."); //注意这里可以显示能标识所在tomcat的信息,如IP%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>??<head>????<base href="<%=basePath%>">????<title>My JSP 'test.jsp' starting page</title>????<meta http-equiv="pragma" content="no-cache">????<meta http-equiv="cache-control" content="no-cache">????<meta http-equiv="expires" content="0">????<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">????<meta http-equiv="description" content="This is my page">????<!--????<link rel="stylesheet" type="text/css" href="styles.css">????-->??</head>??<body>????This is 37 JSP page. <br> / /注意这里可以显示能标识所在tomcat的信息,如IP??</body></html>
????3)访问这个文件,多访问几次,然后查看tomcat的catalina.out 日志????你会看到两个tomcat的日志里输入的“>>>>>>This is 37 JSP page.”内容差不多一样多,因为我们之前配置的lbfactor是1:1,这个权重数字越大,分到的访问量就越多。
tomcat 1 :[root@CentOS logs]# tail catalina.out?Sep 20, 2011 3:47:43 AM org.apache.catalina.startup.Catalina startINFO: Server startup in 694 ms>>>>>>This is 37 JSP page.>>>>>>This is 37 JSP page.>>>>>>This is 37 JSP page.>>>>>>This is 37 JSP page.>>>>>>This is 37 JSP page.>>>>>>This is 37 JSP page.>>>>>>This is 37 JSP page.
tomcat 2 :[root@CentOS logs]# tail catalina.out?Sep 20, 2011 3:47:46 AM org.apache.coyote.AbstractProtocol startINFO: Starting ProtocolHandler ["http-bio-8082"]Sep 20, 2011 3:47:46 AM org.apache.coyote.AbstractProtocol startINFO: Starting ProtocolHandler ["ajp-bio-8029"]Sep 20, 2011 3:47:46 AM org.apache.catalina.startup.Catalina startINFO: Server startup in 484 ms>>>>>>This is 37 JSP page.>>>>>>This is 37 JSP page.>>>>>>This is 37 JSP page.>>>>>>This is 37 JSP page.>>>>>>This is 37 JSP page.
-------------------------------------------华丽的分割线----------------------------------------
5、最后,我们看一下jkstatus这个页面:

? ?(图找不见了……用?http://yoursite/jkstatus来访问 就可以看到了,)(图片又刷出来了,我从我的新浪博客里弄过来)

Apache + Tomcat + mod_jk 调度"垂直负载均衡"
?
-------------------------------------------华丽的分割线----------------------------------------
全文完,之后我会试试两个不同的项目目录来做负载均衡,当然,不同目录里的应用都是一样的这个负载均衡才有意义~!!!
(2011-09-20 18:53:18)都是同一个目录?那么如果我要更新应用那么不就是2个都同时更新了吗?

如:java某些情况下修改配置文件tomcat会自动重启。那么会不会2个tomcat都在同一时间重启?而不能先断一个这样?都是同一个目录?那么如果我要更新应用那么不就是2个都同时更新了吗?

如:java某些情况下修改配置文件tomcat会自动重启。那么会不会2个tomcat都在同一时间重启?而不能先断一个这样?

第一个问题,因为是针对同一个应用做的垂直备份,当然也可以在目录设置成不一样,目录不一样就需要注意两个Tomcat的Session同步问题了。

第二个问题我倒没认真思考,不过如果是同一个目录的话,更新了里面的文件,你可以先重启一个使用新配置,后面那个就还是加载的未更新前的配置,这样就可以逐个重启了。

热点排行