Apache负载均衡+Tomcat集群
httpd-2.4.9 + apache-tomcat-7.0.47配置负载均衡
目标:
使用 apache 和 tomcat 配置一个可以应用的 web 网站,要达到以下要求:
1、Apache 做为 HttpServer,后面连接多个 tomcat 应用实例,并进行负载均衡。
2、为系统设定 Session 超时时间,包括Apache 和 tomcat
3、为系统屏蔽文件列表,包括 Apache 和 tomcat
注:本例程以3台机器为例子,即同一台机器上装apache和另外2个Tomcat。
原理:
apache和tomcat的3种不同方式集成
1、jk方式集成
下载mod_jk-1.2.31-httpd-2.2.3.so,请下载合适的mod_jk版本,改名为mod_jk.so放进modules文件夹内
修改conf/httpd.conf配置
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkMount /*.do loadbalancer
JkMount /*.jsp loadbalancer
增加conf/workers.properties文件,添加内容
worker.list=loadbalancer
worker.worker2.port=9009 #ajp的监听端口
worker.worker2.host=10.0.0.51
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
worker.worker3.port=9009
worker.worker3.host=10.0.0.52
worker.worker3.type=ajp13
worker.worker3.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker2,worker3#这里在的worker2、worker3为需要与上边tomcat设置的别名一致
worker.loadbalancer.sticky_session=1
配置完成
访问http://10.0.0.51:8080/test/test.jsp,检查是否能正常访问。
访问http://10.0.0.52:8080/test/test.jsp,检查是否能正常访问。
访问http://10.0.0.31:80/test/test.jsp,检查是否能正常访问。
2、ajp_proxy
去掉httpd.conf文件中下面内容的注释(删掉#号),开启下边的配置
Include conf/extra/httpd-vhosts.conf
LoadModule proxy_modulemodules/mod_proxy.so
LoadModule proxy_ajp_modulemodules/mod_proxy_ajp.so
LoadModule proxy_balancer_modulemodules/mod_proxy_balancer.so
LoadModule proxy_connect_modulemodules/mod_proxy_connect.so
LoadModule proxy_ftp_modulemodules/mod_proxy_ftp.so
LoadModule proxy_http_modulemodules/mod_proxy_http.so
注意:
除了mod_proxy.so,mod_proxy_balancer.so,mod_proxy_connect.so
如果是采用ajp_proxy,需要加载mod_proxy_ajp.so这个模块;
如果是采用http_proxy,需要加载mod_proxy_http.so这个模块;
ProxyRequests Off
<proxy balancer://loadbalancer>
BalancerMember ajp://10.0.0.51:9009loadfactor=1 route=jvm1
BalancerMember ajp://10.0.0.52:9009loadfactor=1 route=jvm1
</proxy>
修改conf/extra/httpd-vhosts.conf增加配置
<VirtualHost *:8081>
ServerAdmin [email protected]
ServerName localhost
ServerAlias localhost
ProxyPass / balancer://loadbalancer/stickysession=jsessionid nofailover=On
ProxyPassReverse / balancer://loadbalancer/
ErrorLog"logs/loadbalancer-error.log"
CustomLog"logs/loadbalancer-access.log" common
</VirtualHost>
配置完成任务,访问http://127.0.0.1:8081/test/test.jsp,检查是否能正常访问。
3、http_proxy
http_proxy的配置与ajp_proxy类似,修改方法2的httpd.conf配置如下,其它不变
ProxyRequests Off
<proxy balancer://loadbalancer>
BalancerMember http://10.0.0.51:9009loadfactor=1 route=jvm1
BalancerMember http://10.0.0.52:9009loadfactor=1 route=jvm1
</proxy>
配置完成任务,访问http://127.0.0.1:8081/test/test.jsp,检查是否能正常访问。
一、前期准备工作:安装用的程序(前提保证已安装了JDK1.7以上的版本)
二、安装过程
yum remove apr-util-devel aprapr-util-mysql apr-docs apr-devel apr-util apr-util-docs
yum install flex bison lynx
具体步骤如下:
1.解决apr
APR和APR-UTIL的下载地址:http://apr.apache.org/download.cgi
[[email protected] test]# tar -zxfapr-1.4.5.tar.gz
[[email protected] apr-1.4.5]# ./configure--prefix=/usr/local/apr
[[email protected] apr-1.4.5]# make
[[email protected] apr-1.4.5]# make install
2.解决APR-util
[[email protected] test]# tar -zxfapr-util-1.3.12.tar.gz
[[email protected] apr-util-1.3.12]# ./configure--prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config
[[email protected] apr-util-1.3.12]# make
[[email protected] apr-util-1.3.12]# make install
3解决pcre
下载:http://sourceforge.net/projects/pcre
下载地址二:http://ftp.exim.llorien.org/pcre/
#unzip -o pcre-8.10.zip
#cd pcre-8.10
#./configure --prefix=/usr/local/pcre
#make
#make install
cp -r apr-1.5.1 httpd-2.4.9/srclib/apr
cp -r apr-util-1.5.1httpd-2.4.9/srclib/apr-util
安装httpd
cd httpd-2.4.9
./configure --prefix=/local/apache2--enable-so --enable-mods-shared=all --enable-proxy --enable-proxy-connect--enable-proxy-ftp --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util--with-pcre=/usr/local/pcre --with-included-apr
make
make install
三、配置
1、Apache配置
httpd.conf配置
再找到<IfModule dir_module></IfModule>加上index.jsp修改成
<IfModule dir_module>
DirectoryIndex index.html index.jsp
</IfModule>
在最下面加入
ProxyRequests Off
<proxy balancer://cluster>
BalancerMember ajp://10.0.0.51:8009loadfactor=1 route=jvm1
BalancerMember ajp://10.0.0.52:9009loadfactor=1 route=jvm1
</proxy>
上面的2个BalancerMember成员是我们配置的tomcat集群。后面会说明的。
包含虚拟主机
Include conf/extra/httpd-vhosts.conf #把注释去掉。
httpd-vhosts.conf设置
在文件(extra/httpd-vhosts.conf)最下面加入
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName localhost
ServerAlias localhost
ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
ProxyPassReverse / balancer://cluster/
</VirtualHost>
2 tomcat配置
配置 Engine
把原来的配置注释掉,把下面一句去掉注释。
<Engine name="Standalone"defaultHost="localhost" jvmRoute="jvm1">
配置 Connector
原来的默认配置。
<!-- Define an AJP 1.3 Connector on port8009 -->
<Connector port="8009"protocol="AJP/1.3" redirectPort="8443" />
配置Cluster(每个tomcat中都要修改)
原来的配置。
<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
修改为以下的代码:<Receiver port=”XX”/>port也要保证唯一性。
<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">
<ManagerclassName="org.apache.catalina.ha.session.BackupManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"
mapSendOptions="6"/>
<!--
<ManagerclassName="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
-->
<ChannelclassName="org.apache.catalina.tribes.group.GroupChannel">
<MembershipclassName="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="5001"
selectorTimeout="100"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<InterceptorclassName="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<InterceptorclassName="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
<DeployerclassName="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
这个设置是主要用以tomcat的集群。
四、启动服务,测试tomcat自带的例子
1、测试apache和tomcat协作。
先在每个tomcat中的\webapps\ROOT下的index.jsp下面加上以下的测试代码部分:(X代表不同的tomcat的输出不同的信息),把index.html删除,以免影响测试效果。在最后面的加上.即</table></body>之间。
<%
System.out.println("tomcat6.0X deal with request");
%>
然后再通过http://10.0.0.31来访问一下,就会出现大家熟悉的猫猫。
然后再通过分别访问
http://10.0.0.51:8080,http://10.0.0.52:8080它们访问的内容和上面的http:// 10.0.0.31是一样的。
这样就说明apache和TOMCAT整合成功!
2、测试均衡器
通过http:// 127.0.0.1多次访问,要想看到真正的效果,必须用一些压力测试工具,可用微软Microsoft Web Application Stress Tool进行简单压力测试,不然你靠不停刷新是体现不出来的,你只会在一个tomcat的控制台有输出结果。只用用压力测试工具模拟大量用户同时访问,你会发现四个tomcat控制台均有打出控制信息,说明均衡器工作正常。
很晚完成该文档,尽管每一天工作强度很大,还是愿意与大家一起进步。呵呵每天进步一点。
后续介绍其他模块,有什么问题敬请大家不要吝啬指出,一同改进。欢迎大家和大家的技术发烧友一起加入我们的qq群262407268,共建我们的《云络智慧城市》
目前已经完成了三个比较小的模块:common、service、application其实要实现高性能里面还有很多内容要去学习积累,后续会做补充。接下来我们该分享 数据仓库部分了,先是关系数据库 oracle、mysql 然后非关系数据库 mogondb、redis、hbase,最后我们开启分布式计算hadoop之路,主要做数据分析和数据处理。在这里我们会提到一个收索引擎的制作:sphinx+ 中文分词coreseek,还会做一个日志分析的架构splunk产品。一起共建我们的《云络智慧城市》。
请大家自觉修改备注,谢谢。申明该群是一个公益性社区,我们愿意承接一些架构的设计,建设和咨询业务,为您和您的企业改善业务架