Apache httpd 和tomcat集群环境,负载均衡,本次配置采用最新版本的httpd2.4.3,tomcat7.0.32和connector1.2.37,jdk1.7
,步骤如下。安装所需的全部包和我自己的配置文件(可以参考下),http://pan.baidu.com/share/link?shareid=122285&uk=537055152
一:安装apache-httpd:
1. 首先下载httpd-2.4.3.tar.gz,输入命令:gunzip httpd-2.4.3.tar.gz, 解压出来tar包,再解压:tar -xvf httpd-2.4.3.tar,进入httpd-2.4.3目录 配置命令:./configure --prefix=/home/youthflies/work/http,--prefix用来指定configure目录,也就是安装路径。系统提示缺少apr。
2. 下载apr-1.4.6.tar.gz,同样的方式解压,进入apr-1.4.6目录,输入命令:./configure --prefix=/home/work/tem/apr-1.4.6,完成之后,输入:make进行编译,最后make install进行安装。
3.回到httpd-2.4.3目录,再次尝试命令:./configure --prefix=/home/youthflies/work/httpd --with-apr=/home/youthflies/work/tem/apr-1.4.6 ,提示缺少apr-util,下载apr-util。解压。进行config(注意要指明刚才安装的apr路径)./configure --prefix=/home/work/tem/apr-util-1.5.1 --with-apr=/home/youthflies/work/tem/apr-1.4.6,然后输入make编译,最后make install安装
4. 再次回到httpd-2.4.3目录,进行尝试:./configure --prefix=/home/youthflies/work/httpd --with-apr=/home/youthflies/work/tem/apr-1.4.6 --with-apr-util=/home/youthflies/work/tem/apr-util-1.5.1。系统提示缺少pcre-config,去下载pcre-8.20.tar.gz,同样的方法解压,进入pcre-8.20目录,输入命令:./configure --prefix=/home/youthflies/work/tem/pcre-8.20 ,之后进行make
如果出现make[1]:*** [pcrecpp.lo] 错误1,应该是系统中缺少gcc和g++,需要下载包进行安装(ubuntu下执行命令:sudoapt-get install gcc g++即可,Fedora下用yum代替apt-get)。安装完gccg++后,重新config,之后make,最后make install安装。
5. 应该不少包了,再次回到httpd-2.4.3目录下输入命令:./configure --prefix=/home/youthflies/work/httpd --with-apr=/home/youthflies/work/tem/apr-1.4.6 --with-apr-util=/home/youthflies/work/tem/apr-util-1.5.1 --with-pcre=/home/youthflies/work/tem/pcre-8.20 , 之后make,最后make install,成功,至此httpd安装完成。
二: 安装tomcat
下载tomcat包apache-tomcat-7.0.32.tar.gz,tomcat只是个压缩包,解压即可,但是需要有 jdk环境,jdk-7u9-linux-i586.tar.gz。解压(一般是解压到/usr/local下,这样jdk路径就是/usr/local/jdk1.7.0_09,也就是JAVA_HOME的路径,然后在/ect/profile中配置jdk的路径,网上教程有具体方法(注,ubuntu下执行命令:source/etc/profile使配置的jdk生效,其他系统暂未尝试,如有问题,一般注销重启即可)。如果不想改动系统中的jdk,也可以在tomcat/bin/catalina.sh中手动配置JAVA_HOME的路径,方法参考https://www.yeetrack.com/?p=106。可以将tomcat多copy几次,作成集群环境,配置文件server.xml修改方法在后面。
三:安装mod_JK
下载tomcat-connectors-1.2.37-src.tar.gz,同样方法解压,进入tomcat-connectors-1.2.37-src/native目录,执行命令./bulidconf.sh(自己安装的ubnutn12.04中,默认没有autocon包,sudoapt-get install autocon进行安装),再次./buildconf.sh,提示没有libtool,好吧,再次sudoapt-get installlibtool进行安装,再次build,成功(工作的机器不能联网,且各种文件夹没权限,真是疼)。然后./configure --prefix=/home/youthflies/work/tem/tomcat-connectors-1.2.37-src/native --with-apxs=/home/youthflies/work/httpd/bin/apxs (注意需要指定apacheapxs的路径),然后执行make编译, 最后 makeinstall,我们需要的mod_jk.so文件出现在/work/tomcat-connectors-1.2.37-src/native/apache-2.0目录下。将mod_jk.so文件copy到apache目录中的mudules文件夹中。然后开始配置文件。
四:修改配置文件
1. 进入httpd配置文件的路径,即/home/youthflies/work/httpd,在conf文件夹下新建配置文件mod_jk.conf和workers.properties。
编辑mod_jk.conf文件,命令有vi,vim或者图形界面gedit。
在文件中添加:
#指出mod_jk模块工作所需要的工作文件workers.properties的位置 JkWorkersFile/home/youthflies/work/httpd/conf/workers.properties #指定mod_jk的日志文件 JkLogFile/home/youthflies/work/httpd/logs/mod_jk.log # Set the jk loglevel [debug/error/info] JkLogLevel info #指定日志的格式 JkLogStampFormat"[%a %b %d %H:%M:%S %Y]" # JkOptions indicate tosend SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat-ForwardDirectories # JkRequestLogFormat set the requestformat JkRequestLogFormat "%w %V %T" #将所有servlet,jsp和do请求通过ajp13协议送给controller,让controller来处理,这里的controller的角色是httpd来扮演,它接受用户的请求,然后根据指定的策略分发到tomcat节点上
JkMount/servlet/* controller JkMount /*.jsp controller JkMount/*.controller
好了,保存退出。
编辑workers.properties文件
在文件中添加:
worker.list=controller #设置tomcat1 #我是全部搭在本机上,如果是在别的机器上,在host中指明机器名或者IP即可。 worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=8009 #lbfactor值越大,该tomcat分得的请求就越多 worker.worker1.lbfactor=1 worker.worker1.cachesize=10 worker.worker1.cache_timeout=600 worker.worker1.socket_keepalive=1 worker.worker1.socket_timeout=300 #设置tomcat2 #如果tomcat全在本机上,注意修改各个tomcat的端口 worker.worker2.type=ajp13 worker.worker2.host=localhost worker.worker2.port=8011 worker.worker2.lbfactor=1 worker.worker2.cachesize=10 worker.worker2.cache_timeout=600 worker.worker2.socket_keepalive=1 worker.worker2.socket_timeout=300 #========controller,负载均衡控制器======== worker.controller.type=lb worker.controller.balanced_workers=worker1,worker2 #指定分担请求的tomcat worker.controller.sticky_session=1#设置session粘性 worker.worker1.socket_keepalive=1 worker.worker1.socket_timeout=300
修改httpd的配置文件http.conf
在文件中添加下面两行:
#加载mod_jk
Load Modulejk_module modules/mod_jk.so Include /home/youthflies/work/httpd/conf/mod_jk.conf
然后在DirectoryIndex中添加index.jsp(当然这条意思是如果当前目录有index.jsp就默认返回index.jsp,不配也行)。
修改各个tomcat的配置文件server.xml。
需要修改的地方有5处
a.修改每个tomcat的shutdown端口,默认是8005,改成每个tomcat均不同即可。
<Serverport="8005" shutdown="SHUTDOWN"> <!--Security listener. Documentation at /docs/config/listeners.html <ListenerclassName="org.apache.catalina.security.SecurityListener"/>
b. 修改每个tomcat的start端口,默认是8080,同样改成每个tomcat不同即可。
<Connectorport="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/> <!--A "Connector" using the shared thread pool--> <!-- <Connectorexecutor="tomcatThreadPool" port="8080"protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
c. 修改tomat的ajp端口,ajp协议用来和httpd通信,默认是8009端口。
<!--Define an AJP 1.3 Connector on port 8009 --> <Connectorport="8011" protocol="AJP/1.3"redirectPort="8443" />
d.修改tomcatEngine节点,设置tomcat节点名字,如下面的worker1,注意一定要和http/conf/workers.properties配置文件中的名字一致,如果有两个tomcat,就分别为worker1和worker2。
<Enginename="Catalina" defaultHost="localhost"jvmRoute="worker1"> <!--Forclustering, please take a look at documentation at: /docs/cluster-howto.html (simple how to) /docs/config/cluster.html(reference documentation)
e. 在Host节点中添加下面两行,其中的docBase设置成httpd中的文件发布路径,
<Contextpath="" docBase="/home/youthflies/work/httpd/htdocs"debug="0" reloadable="true"crossContext="true"/>
修改完毕,在/home/youthflies/work/httpd/htdocs目录下新建一个test.jsp文件,代码如下:
<%@ page contentType="text/html; charset=utf-8" %> <%@ page import="java.util.*" %> <html><head><title>Cluster App Test</title></head> <body> Server Info: <% out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%> <% out.println("<br> ID " + session.getId()+"<br>"); // 如果有新的 Session 属性设置 String dataName = request.getParameter("dataName"); if (dataName != null && dataName.length() > 0) { String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName, dataValue); } out.println("<b>Session 列表</b><br>"); System.out.println("============================"); Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println( name + " = " + value+"<br>"); System.out.println( name + " = " + value); } %> <form action="test.jsp" method="POST"> 名称:<input type=text size=20 name="dataName"> <br> 值:<input type=text size=20 name="dataValue"> <br> <input type=submit> </form> </body> </html>
启动tomcat和httpd,启用httpd的命令为 ./httpd-k start, 关闭是 ./httpd-k stop.用不同的浏览器去访问,应该可以看到httpd把请求平均分配到两个tomcat下。察看httpd和tomcat的日志,可以使用tail -f 命令。
PS:上面步骤都是本人在Ubuntu12.04中一步一步经过测试的,应该没有问题。如果在其他linux版本中出现问题,欢迎讨论。 易踪网yeetrack.com
参考文章:http://www.iteye.com/topic/1017961
版权声明
本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。
© 空空博客,本文链接:https://www.yeetrack.com/?p=91
近期评论