Apache+tomcat实现负载均衡
准备工具:
Apache安装:
文件解压
移动到你要安装的地址
打开conf/httpd_conf配置文件,修改ServerRoot,把地址替换为Apache所在目录
在Apache文件路径bin目录下打开命令行(可shift+右键直接在目录下打开命令行)
注意查看443端口和80端口是否被占用(netstat -ano|finstr "443"查找占用443端口的进程ID; tasklist | findstr “ID”查看进程)
在命令行输入`httpd -k install
net start Apache2.4(停止服务net stop Apache2.4 删除命令sc delete apache2.2)`
到此Apache安装成功。
负载均衡配置实现
- 将tomcat拷贝两份,修改server.xml文件
修改以上端口,避免端口冲突 - 在server.xml中复制如下内容
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
注意修改端口
- 在Apache安装目录下找到Apache2.4/conf/下的 httpd.conf,去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(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 slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
同时将Include conf/extra/httpd-vhosts.conf
前面的注释#去掉
- conf/extra/httpd-vhosts.conf,配置虚拟站点,在最下面加上以下代码:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName 127.0.0.1
ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On
ProxyPassReverse / balancer://cluster/
#ErrorLog "logs/error.log"
#CustomLog "logs/access.log" common
</VirtualHost>
ProxyRequests Off
<proxy balancer://cluster>
BalancerMember http://localhost:8080 loadfactor=1 route=jvm1 smax=5 max=20 ttl=120 retry=300 timeout=15
BalancerMember http://localhost:8088 loadfactor=1 route=jvm1 smax=5 max=20 ttl=120 retry=300 timeout=15
ProxySet lbmethod=byrequests
</proxy>
http配置的端口与上面修改tomcat的http端口一致,注意route与tomcat中的jvmRoute一致
- 在web项目的web.xml文件下添加标签如下:
<distributable />
最后启动Apache和所有tomcat就好了