apache+tomcat实现集群详解

来源:互联网 发布:混沌一键瞬狙数据逆战 编辑:程序博客网 时间:2024/05/16 06:04
1、配置两个Tomcat(使用不同的端口)

Tomcat1 的修改conf/server.xml

1.1 <Server port="8005" shutdown="SHUTDOWN">中的8005修改为18005


1.2修改<Service name="Catalina">下的

<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />中的8080为18080


1.3<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />修改为18009


1.4<Engine name="Catalina" defaultHost="localhost">在末尾加 jvmRoute="jvm1"


1.5<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>改为

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">

        <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>

</Cluster>


1.6要实现session复制,还需要在context.xml添加属性distributable="true",如下:

<Context distributable="true">
如果不想在context.xml中添加distributable="true",还有另一方法是在应用程序的web.xml中添加<distributeable/>,不过这方法我没有测试。


配置完成之后,启动两个Tomcat测试一下Tomcat是否可以正常启动




2、 配置启动自动加载代理(proxy)模块(httpd.conf)

用文本编辑器打开${APACHE_HOME}/conf/http.conf文件,去掉一下文本前的注释符(#)
以下必须
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so                    #如果是采用ajp_proxy,需要加载mod_proxy_ajp.so这个模块;
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so                   #proxy_balancer_module 会用到slotmem_shm_module 
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                如果是采用http_proxy,需要加载mod_proxy_http.so这个模块;
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so

以下非必须
LoadModule speling_module modules/mod_speling.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule rewrite_module modules/mod_rewrite.so


3、集群方式
3.1开启虚拟主机配置
conf/extra/httpd-vhosts.conf     
找到“Include conf/extra/httpd-vhosts.conf”字样,去掉前面的注释符 

 3.2配置虚拟主机
用文本编辑器打开${APACHE_HOME}/conf/extra/httpd-vhosts.conf文件,注释掉所有的dummy-host,在最后面追加如下内容
<VirtualHost *:80> 
         ServerAdmin 549006411@qq.com
         ServerName localhost 
         ServerAlias localhost 
         ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On 
         ProxyPassReverse / balancer://cluster/ 
         ErrorLog "logs/lbtest-error.log" 
         CustomLog "logs/lbtest-access.log" common 
</VirtualHost>


以上相同
以下不同(端口、ajp、http)
3.3 ajp_proxy方式集群
${APACHE_HOME}/conf/http.conf文件,在其末尾追加如下格式内容
ProxyRequests Off    # 使用反向代理
<proxy balancer://cluster> 
     BalancerMember ajp://127.0.0.1:18009 loadfactor=1 route=jvm1 
     BalancerMember ajp://127.0.0.1:38009 loadfactor=3 route=jvm3 
</proxy>  

3.4 http_proxy方式集群
${APACHE_HOME}/conf/http.conf文件,在其末尾追加如下格式内容
ProxyRequests Off    # 使用反向代理
<proxy balancer://cluster> 
     BalancerMember http://127.0.0.1:18080 loadfactor=1 route=jvm1 
     BalancerMember http://127.0.0.1:38080 loadfactor=3 route=jvm3 
</proxy>  

3.5 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=8077   #ajp的监听端口
worker.worker2.host=108.88.3.105
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
worker.worker3.port=9009
worker.worker3.host=127.0.0.1
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

4、访问服务
分别在两个tomcat放入相同的test项目

最后启动Apache2.4,在页面中输入localhost:80\test\test.jsp进行测试。(访问apache的端口,而不是tomcat端口)


5、相关属性

        lbmethod表示:负载载均衡策略。 

        lbmethod=byrequests 按照请求次数均衡(默认) 

        lbmethod=bytraffic 按照流量均衡 

        lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)

        ProxyPass表示:所有的test请求都会重定向到balancer://mycluster/处理。balancer是内置负载。

        ProxyPassReverse表示:反向代理,也就是将所有的请求反向代理到负载均衡后的应用url路径中。

        stickysession表示:进行Session复制使用。


6、热备份

         热备份的实现很简单,只需添加 status=+H 属性,就可以把某台服务器指定为备份服务器:

        此时请求总是流向 8080这个url ,一旦8080挂掉, Apache会检测到错误并把请求分流给7080。Apache会每隔几分钟检测一下8080的状况,如果8080恢复,就继续使用8080。

<Proxy balancer://mycluster>
    BalancerMember http://127.0.0.1:8080
    BalancerMember http://127.0.0.1:7080 status=+H 
    ProxySet lbmethod=byrequests
</Proxy>
ProxyRequests Off
ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID nofailover=Off
ProxyPassReverse /test balancer://mycluster/  


















0 0