您的位置:首页 > 运维架构 > Tomcat

apache+tomcat分布式集群搭建

2016-04-14 16:30 471 查看
今天搭建apche+tomcat分布式集群,遇到很多问题,在网上找到的很多都不成功,然后和同事一起研究了一下,最终搭建成功了。做个笔记,以备自己以后参考。

1,下载apache。在下载Apache(2.4版)的时候,要下载完整版,不然会缺失很多东西。参考博文:http://jingyan.baidu.com/article/29697b912f6539ab20de3cf8.html

下载mod_jk.so,地址:http://apache.opencas.org/tomcat/tomcat-8/v8.0.33/bin/

地址里面有压缩包,下载一个与你对应的,在压缩包里面有mod_jk.so文件,拷贝到apache下文件夹modules下面。(版本注意,如果以后提示mod_jk.so错误的话,就要换一个mod_jk.so文件)。

打开conf/httpd.conf里面找到

DefineSRVROOT"\apache"
ServerRoot"${SRVROOT}"


把SRVEOOT后面的路径改成你自己的Apache安装路径。

在httpd.conf同级目录下创建一个属性文件workers.properties,在文件中添加一下信息:

worker.list=jetty_a
worker.jetty_a.port=8009
worker.jetty_a.host=127.0.0.1
worker.jetty_a.type=ajp13
worker.jetty_a.lbfactor=2

worker.list=jetty_b
worker.jetty_b.port=8010
worker.jetty_b.host=127.0.0.1
worker.jetty_b.type=ajp13
worker.jetty_b.lbfactor=1

worker.list=jettybalancer
worker.jettybalancer.type=lb
worker.jettybalancer.balance_workers=jetty_a,jetty_b
worker.loadbalancer.sticky_seesion=false
worker.loadbalancer.sticky_session_force=false



上面信息是我们将要配置tomcat服务器的信息,sjp端口号分别是8009/8010,IP为本地所以需要修改,如果不是本地的两个服务器,那就不用改了。注意上面的参数,重点修改的是

worker.jetty_a.port

worker.jetty_a.host

上面tomcat的参数要和下面的参数项对应。

在conf/httpd.conf文件最下面添加一下信息。

LoadModulejk_modulemodules/mod_jk.so
<IfModulejk_module>
JkWorkersFile"${SRVROOT}/conf/workers.properties"
JkLogFile"${SRVROOT}/logs/mod_jk.log"
JkLogLevelwarn
</IfModule>

<VirtualHost*:80>
<proxybalancer://cluster>
BalancerMemberajp://127.0.0.1:8009route=tomcat_a
BalancerMemberajp://127.0.0.1:8010route=tomcat_b
ProxySetlbmethod=bytraffic
</proxy>
ServerAdmin******@qq.com
#指定服务器管理员的E-MAIL地址,服务器自动将错误报告给该地址
ServerNamelocalhost
#web客户端搜索的主机名
ErrorLog"${SRVROOT}/logs/app1_error.log"
CustomLog"${SRVROOT}/logs/app1_access.log"common
ProxyPass/balancer://cluster/stickysession=JSESSIONID
#balancer:复制会话的方式,包括JSESSIONID或PHPSESSIONIDnofailover:on表示会话在worker出错或停掉时会中断,当后端服务器不支持会话复制时设为on;
#lbmethod:选择负载的调度算法,默认byrequests表示轮询调度(就是1:1),bytraffic表示加权重的调度,需加loadfactor指定权重值。
ProxyPassReverse/balancer://cluster/stickysession=JSESSIONID
#此指令使Apache调整HTTP重定向应答中Location,Content-Location,URI头里的URL。这样可以避免在Apache作为反向代理使用时,后端服务器的HTTP重定向造成的绕过反向代理的问题。
#TheProxyRequestsdirectiveshouldusuallybesetoffwhenusingProxyPass.
ProxyRequestsOff
#不允许作为正向代理
ProxyPreserveHostOn
#当启用时,此选项将把传入请求的"Host:"行传递给被代理的主机,而不是传递在ProxyPass中指定的主机名。
</VirtualHost>


2,下载tomcat。在tomcat使用上,没有太多的限制,能用就行。我的是8.0.33。

3,进入apache安装路径下的bin,打开cmd。

运行httpd-kinstall是安装apache的。在运行的时候,会出现很多问题,就是在apache默认的环境下,很多*.so的文件被注释了的。所以你在安装的时候会报错,错误信息会告诉你错误在哪,所以很好识别。现在安装的时候只需要把报错的*.so打开注释就行了。

报错的时候是一个一个报错的,第一次安装报错后,进行修改,然后在bin下运行cmd:httpd-kuninstall卸载了apache,重新安装一次,一直到没有报错为止。

安装成功后,到服务里面去重新启动apache。我这还是报错了,但是这个错误会到日志里面去查看错误信息,其实还是开启一个*.so。

我这里总共打开了下面几个:

mod_proxy,mod_proxy_balancer,lbmethod_****_module,slotmem_shm_module,mod_proxy_ajp

这一部操作比较多,但是总结一句话,可以多开,不能少开,如果感觉不知道是哪个,那就多开几个。

4,apache配置完了,现在开始配置tomcat服务器。

因为我们有两个tomcat服务器,一般都知道端口不能冲突,所以端口要修改一下,把其中一个的端口修改了就行,另外一个可以不用改,我是对其中一个tomcat的所有端口都+1。反正只要配置的参数都一致就行了。具体如下3个地方修改:

<Serverport="8006"shutdown="SHUTDOWN">

<Connectorport="8088"protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8444"/>

<Connectorport="8010"protocol="AJP/1.3"redirectPort="8444"/>


修改完上面的端口后,还要配置集群信息。在tomcat里面被注释的Cluster标签下面添加如下信息:

<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"channelSendOptions="8">
<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"/>
<SenderclassName="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"port="4000"autoBind="100"
selectorTimeout="5000"maxThreads="6"/>
<InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<InterceptorclassName="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"filter=""/>
<ValveclassName="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<!--<ClusterListenerclassName="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>-->
<ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>


部署完上面的,基本上就可以了,服务器集群。然后我们在需要集群的项目中声明一下本项目集群就行。webapp/META-INF/context.xml添加如下信息:

<?xmlversion="1.0"encoding="UTF-8"?>
<Contextdistributable="true"
className="org.apache.catalina.ha.context.ReplicatedContext"/>


到这,服务器和项目的配置基本完成了。我们现在把项目放到启动两个刚刚配置好的服务器下,然后访问项目。在项目中做一个简单的输出用来查看访问的哪个服务器,两个tomcat服务器中能看到各自的访问日志。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: