需求:apache对静态文件处理性能好,无缝升级,负载均衡 增加容错(?)
环境
apache apache_2.2.9-win32-x86-no_ssl-r2 安装在A机器
jdk 1.6
tomcat 绿色版5.0 一台安装在A机器 一台安装在B机器(其实在A机器的虚拟机)
A机器IP 1.1.7.75 B机器IP 1.1.7.77
集群搭建方式1:
jk方式:久经考验,稳定。
另外需要环境:mod_jk-1.2.26-httpd-2.2.4.jar 修改文件为mod_jk.jar拷贝到%apache_home%\modules
配置tomcat 修改%tomcat_home%\conf\server.xml文件
主要是一下几个地方<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">增加了 jvmRoute="worker1"
启用
<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
managerClassName="org.apache.catalina.cluster.session.DeltaManager"
expireSessionsOnShutdown="false"
useDirtyFlag="true"
notifyListenersOnReplication="true">
<Membership
className="org.apache.catalina.cluster.mcast.McastService"
mcastAddr="228.0.0.4"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>
<Receiver
className="org.apache.catalina.cluster.tcp.ReplicationListener"
tcpListenAddress="auto"
tcpListenPort="4001"
tcpSelectorTimeout="100"
tcpThreadCount="6"/>
<Sender
className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
replicationMode="pooled"
ackTimeout="15000"/>
<Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>
<Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
</Cluster>
第二台机器 修改jvmroute="worker2"就可以了。如果tomcat在一台机器上的需要修改端口(注)。
还有就是 注意
<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> 记住ajp的端口 不要和tomcat的端口搞混了 后面的配置需要用到 (我开始在这里浪费N多时间 也是自己不明白 ajp协议啊 不好意思。)
配置apache
在 httpd.conf中增加了
#add **********************************************************************
LoadModule jk_module modules/mod_jk.so #载入mod_jk.so
# Put this in the main section of your configuration (or desired virtual host, if using Apache virtual hosts)
JkWorkersFile conf/worker.properties #载入配置文件 等下来配置
JkLogFile logs/mod_jk.log #设定日志输出
JkLogLevel info #日志输出级别
JkMount /* router #设定转发的方式 可以查资料
JKMount /jkstatus status #记录状态 以后可以在网页上查看相关信息
#add **********************************************************************
在 conf下面增加配置文件worker.properties
内容如下
worker.list=router,status
# Define a "local_worker" worker using ajp13
worker.worker1.port=8009 #ajp端口 注意 我开始设置为tomcat的端口了。。怎么都不成功
worker.worker1.host=1.1.7.75
worker.worker1.type=ajp13
worker.worker1.lbfactor=1 #权重
#worker.worker1.local_worker=1
# Define another "local_worker" worker using ajp13
worker.worker2.port=8009
worker.worker2.host=1.1.7.77
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
#worker.worker2.local_worker=2
# Define the LB worker
worker.router.type=lb
worker.router.balance_workers=worker1,worker2
# worker.router.local_worker_only=1
worker.status.type=status
注意 应该就可以打到简单的集群了。
测试 部署个项目
好像是sessionID复制 需要在项目的web.xml中增加<distributable/>
还可以在 http://1.1.7.75/jkstatus 查看相关数据。
2:http_proxy 方式
单机:
#add http_proxy *****************************************************
LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
#ProxyPass /images !
#ProxyPass /css !
#ProxyPass /js !
ProxyPass / http://localhost:8087/
#end **********************************************************************
负载均衡
#add http_proxy *****************************************************
LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
ProxyPass / balancer://proxy/ #可以增加权重的方式 请求数?字节数?
<Proxy balancer://proxy>
BalancerMember http://1.1.7.75:8087/ #可以增加权重
BalancerMember http://1.1.7.75:8088/
</Proxy>
#end **********************************************************************
3:ajp_proxy方式
没有配置好。