exe可执行文件的安装方式:http://jingyan.baidu.com/article/ed15cb1b73b3071be269816d.htmlcss
解压缩包的安装方式: win+r --> cmd --> 打开dos界面,进入到Apache\bin目录下执行 httpd.exe -k install -n "apache2.2" 。 执行完成 Apache服务安装完毕。apache2.2 为服务的名称html
启动服务遇到问题:右击个人电脑-->管理-->事件查看器-->找到Apache Service-->右键-->查看事件的全部实例java
因为Apache的docs log 等路径都的 /Apache/*** ,可是个人服务是放在了本身创建的文件夹下,因此服务启动的时候找不到这些文件。大部分问题是这些。web
显示如上界面,Apache安装成功。apache
配置httpd.conf 文件浏览器
#提供HTTP/1.1的代理/网关功能支持
LoadModule proxy_module modules/mod_proxy.sotomcat
#mod_proxy的扩展,提供Apache JServ Protocol支持
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so 服务器
#mod_proxy的扩展,提供负载均衡支持
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so session
#mod_proxy的扩展,提供对处理HTTP CONNECT方法的支持
LoadModule proxy_connect_module modules/mod_proxy_connect.so app
#mod_proxy的FTP支持模块
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
# mod_proxy的HTTP支持模块
LoadModule proxy_http_module modules/mod_proxy_http.so
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
httpd-vhosts.conf文件添加:
<VirtualHost *:80> ServerAdmin abc@163.com proxyRequests off ServerName abc.com ServerAlias www.abc.com ProxyPass /resource! ProxyPass /req balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On ProxyPassReverse /req balancer://cluster/ ProxySet lbmethod=bytraffic </VirtualHost>
<proxy balancer://cluster> BalancerMember ajp://12.34.56.78:8011 loadfactor=1 route=tomcat1 BalancerMember ajp://12.34.56.78:8012 loadfactor=1 route=tomcat2 BalancerMember ajp://12.34.56.78:8013 loadfactor=1 route=tomcat3 BalancerMember ajp://12.34.56.78:8014 loadfactor=1 route=tomcat4 status=+H </proxy>
解释:其中ProxyPass /resource! 表示/resource 开头的请求不会转发给Tomcat,而是做为静态资源在Apache的resource目录下寻找资源文件。而反向代理将全部的/req 请求都转发给名叫cluster的balancer。 而这个balancer有四个Tomcat成员。 status=+H 表示热部署。
ProxySet lbmethod=bytraffic 设置负载均衡的策略
lbmethod可能的取值有:
lbmethod=byrequests 按照请求次数均衡(默认)
lbmethod=bytraffic 按照流量均衡
lbmethod=bybusyness 按照繁忙程度均衡(老是分配给活跃请求数最少的服务器)
stickySession=JSESSIONID表示开启粘性Session。意思是若是第一次请求分到了tomcat1,那么这个用户的后续请求,都会分配给tomcat1这个服务。
而后在Apache配置故障转移(nofailover=On)
若是tomcat1服务宕机,那么Apache会将请求提交当其它服务器,因为后台Tomcat服务器作了Session共享(也就是服务器Session复制),因此用户的Session并无丢失。
Apache配置了四台服务的负载均衡,对应的Tomcat服务器也须要四台。以Tomcat6.x为例
<Server port="8005" shutdown="SHUTDOWN"> <!--修改为: --> <Server port="8006" shutdown="SHUTDOWN">
并将其他3个Tomcat的Server port分别修改为8007,8008,8009。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!--修改为:--> <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!--并将其他3个Tomcat的port分别修改为8082,8083,8084-->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <!--修改为:--> <Connector port="8011" protocol="AJP/1.3" redirectPort="8443" /> <!--并将其他3个Tomcat的port分别修改为8012,8013,8014 -->
2.3 是apache和tomcat连接的关键,前台apache就是经过AJP协议与tomcat进行通讯的,以完成负载均衡,上面的 port="8011" 就是Apache链接Tomcat的端口。
回顾一下httpd.conf配置中的
<proxy balancer://cluster> BalancerMember ajp://12.34.56.78:8011 loadfactor=1 route=tomcat1 BalancerMember ajp://12.34.56.78:8012 loadfactor=1 route=tomcat2 BalancerMember ajp://12.34.56.78:8013 loadfactor=1 route=tomcat3 BalancerMember ajp://12.34.56.78:8014 loadfactor=1 route=tomcat4 </proxy>
Tomcat中的端口要和“ajp://12.34.56.78:XXXX”后面端口一致。
<Engine name="Catalina" defaultHost="localhost">, <!--修改为:--> <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1"> <!--并将其他3个Tomcat的jvmRoute分别修改为:--> <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat2"> <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat3"> <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat4">
回顾一下httpd.conf配置中的
<proxy balancer://cluster> BalancerMember ajp://12.34.56.78:8011 loadfactor=1 route=tomcat1 BalancerMember ajp://12.34.56.78:8012 loadfactor=1 route=tomcat2 BalancerMember ajp://12.34.56.78:8013 loadfactor=1 route=tomcat3 BalancerMember ajp://12.34.56.78:8014 loadfactor=1 route=tomcat4 </proxy>
Tomcat中的jvmRoute="tomcatx"要和“route=tomcatx”中的命名一致。
<!--在注释行的下面添加:--> <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6"> <Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" mapSendOptions="6"/> <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="5001" selectorTimeout="100" 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"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*/.gif;.*/.js;.*/.jpg;.*/.png;.*/.htm;.*/.html;.*/.css;.*/.txt;"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>
其他3个Tomcat都要作相同的配置,注意每一个Tomcat之间的差异是<Receiver>标签下面的port值不同,这里是5001,其他3个Tomcat中分别是5002,5003,5004
1. 全部session中的对象能够序列化,实现 java.io.Serializable接口。
2. 确保你部署文件中的web.xml有<distributable/>元素(其父元素为</web-app>),或者设置你的<Context distributable="true" />。
3. 当使用多台机器时,要保证不一样机器时间的同步。
4. 确保你的loadbalancer是sticky session 模式。