分享

APACHE(proxy) + TOMCAT(session复制)实现高可用网站或管理系统集群

 hehffyy 2018-05-28

1.方案特点

  • Apache端可选使用sticky session配置负载均衡,是否配置sticky只是影响负载均衡的粒度。
  • Apache端配置故障转移.
  • Tomcat端使用官方文档描述的cluster配置,通过多播实现内存方式的session复制,可选使用同步复制和异步复制。
2.建议场景

对于对SESSION强依赖的系统,并且对系统处理能力要求不是太高,只考虑2台TOMCAT作为后端服务的主备方式的情况,这是一种简答的配置。不适合太多的TOMCAT节点,节点越多,复制SESSION的代价会几何方式增加。如:适合小型网站,管理系统,小型业务系统。

 

3.基础环境安装设置

 

操作系统环境,APACHE安装,TOMCAT集群安装,TOMCAT测试工程请参见:

http://zp820705./blog/1347417

 

4.TOMCAT配置

Tomcat集群配置后端Tomcat Server为支持AJP的独立服务,以适应前端Apache配置为粘性会话(sticky-session),Tomcat节点配置Cluster,支持以多播方式进行内存级Session复制。

Tomcat1配置

配置Cluster,使用多播方式同步复制实现节点间session复制。详细配置参数请参见:

http://tomcat./tomcat-6.0-doc/cluster-howto.html

 

修改server.xml,在Engine节点内,host节点后,加入Cluster配置,如下:

 

Tomcat-cluster配置代码  收藏代码
  1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  
  2.                  channelSendOptions="8">  
  3.   
  4.           <Manager className="org.apache.catalina.ha.session.DeltaManager"  
  5.                    expireSessionsOnShutdown="false"  
  6.                    notifyListenersOnReplication="true"/>  
  7.   
  8.           <Channel className="org.apache.catalina.tribes.group.GroupChannel">  
  9.             <Membership className="org.apache.catalina.tribes.membership.McastService"  
  10.                         address="228.0.0.4"  
  11.                         port="45564"  
  12.                         frequency="500"  
  13.                         dropTime="3000"/>  
  14.             <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"  
  15.                       address="auto"  
  16.                       port="4000"  
  17.                       autoBind="100"  
  18.                       selectorTimeout="5000"  
  19.                       maxThreads="6"/>  
  20.   
  21.             <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
  22.               <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>  
  23.             </Sender>  
  24.             <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
  25.             <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  
  26.           </Channel>  
  27.   
  28.           <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"  
  29.                  filter=""/>  
  30.           <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>  
  31.   
  32.           <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>  
  33.           <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
  34.         </Cluster>  

 

修改Engine节点配置,以支持AJP方式连接

<Engine name="Catalina" defaultHost="localhost">

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

 

完整配置文件请参见:

 

配置完成保存后,通过SCP命令拷贝到TOMCAT2节点

scp server.xml root@10.10.10.12://opt/apache-tomcat-6.0.33/conf/

 

Tomcat2配置

Tomcat2的配置基本与TOMCAT1配置相同,唯一不同的只是AJP的jvmRoute参数不同。

修改server.xml中

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

为:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

 

5.Apache配置

apache的配置方式还是采用vhost方式配置,主配置文件(conf/httpd.conf)引用(include)vhost子配置文件(conf/extra/httpd-vhosts.conf)方式.

Apache的编译请参考:http://zp820705./blog/1347749

apache编译为支持Proxy后的module情况:

Apache配置文件代码  收藏代码
  1. LoadModule proxy_module modules/mod_proxy.so  
  2. LoadModule proxy_connect_module modules/mod_proxy_connect.so  
  3. LoadModule proxy_ftp_module modules/mod_proxy_ftp.so  
  4. LoadModule proxy_http_module modules/mod_proxy_http.so  
  5. LoadModule proxy_scgi_module modules/mod_proxy_scgi.so  
  6. LoadModule proxy_ajp_module modules/mod_proxy_ajp.so  
  7. LoadModule proxy_balancer_module modules/mod_proxy_balancer.so  
  8. LoadModule ssl_module modules/mod_ssl.so  
  9. LoadModule speling_module modules/mod_speling.so  
  10. LoadModule rewrite_module modules/mod_rewrite.so  

 删除主配置文件conf/httpd.conf文件中引用vhost的配置行的注释。

Apache主配置文件代码  收藏代码
  1. # Virtual hosts  
  2. Include conf/extra/httpd-vhosts.conf  

 Apache虚拟主机配置(httpd-vhost.conf)

apache端可以配置sticky-session或no-sticky-session,sticky-session实现的是会话级别的负载均衡,no-sticky-session实现的是请求级别的负载均衡。可以根据实际情况选择配置。

Sticky-session代码  收藏代码
  1. <VirtualHost *:80>  
  2.     ErrorLog "logs/acooly.org-error_log"  
  3.     LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon  
  4.     CustomLog logs/access_log vcommon  
  5.   
  6.     ProxyRequests Off  
  7.     ProxyPreserveHost on  
  8.     # apache+tomcat cluster  
  9.     ProxyPass / balancer://tomcat-cluster/ stickysession=JSESSIONID|jsessionid nofailover=Off  
  10.     ProxyPassReverse / balancer://tomcat-cluster/  
  11.     <Proxy balancer://tomcat-cluster/>  
  12.       BalancerMember ajp://10.10.10.11:8009 loadfactor=1 route=tomcat1  
  13.       BalancerMember ajp://10.10.10.12:8009 loadfactor=1 route=tomcat2  
  14.       ProxySet lbmethod=bybusyness  
  15.     </Proxy>  
  16. </VirtualHost>  

 

No-sticky-session代码  收藏代码
  1. <VirtualHost *:80>  
  2.     ErrorLog "logs/acooly.org-error_log"  
  3.     LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon  
  4.     CustomLog logs/access_log vcommon  
  5.   
  6.     ProxyRequests Off  
  7.     ProxyPreserveHost on  
  8.     # apache+tomcat cluster  
  9.     ProxyPass / balancer://tomcat-cluster/  
  10.     ProxyPassReverse / balancer://tomcat-cluster/  
  11.     <Proxy balancer://tomcat-cluster/>  
  12.       BalancerMember ajp://10.10.10.11:8009 loadfactor=1 route=tomcat1  
  13.       BalancerMember ajp://10.10.10.12:8009 loadfactor=1 route=tomcat2  
  14.       ProxySet lbmethod=bybusyness  
  15.     </Proxy>  
  16. </VirtualHost>  

6.测试

1.浏览器访问:http://10.10.10.11/cluster/index.jsp


上图显示后端服务为10.10.10.11

 

2.通过表单设置session参数key1,key2


3.停止10.10.10.11节点上的tomcat服务,再次刷新页面,查看session变量是否存储,如果存储则表示:故障转移和会话复制成功了。


 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多