`

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

 
阅读更多

 

1.方案特点

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

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

 

3.基础环境安装设置

 

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

http://zp820705.iteye.com/blog/1347417

 

4.TOMCAT配置

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

Tomcat1配置

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

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

 

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

 

<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"/>

          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </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.iteye.com/blog/1347749

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

LoadModule proxy_module modules/mod_proxy.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
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule speling_module modules/mod_speling.so
LoadModule rewrite_module modules/mod_rewrite.so

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

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

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

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

<VirtualHost *:80>
    ErrorLog "logs/acooly.org-error_log"
    LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
    CustomLog logs/access_log vcommon

    ProxyRequests Off
    ProxyPreserveHost on
    # apache+tomcat cluster
    ProxyPass / balancer://tomcat-cluster/ stickysession=JSESSIONID|jsessionid nofailover=Off
    ProxyPassReverse / balancer://tomcat-cluster/
    <Proxy balancer://tomcat-cluster/>
      BalancerMember ajp://10.10.10.11:8009 loadfactor=1 route=tomcat1
      BalancerMember ajp://10.10.10.12:8009 loadfactor=1 route=tomcat2
      ProxySet lbmethod=bybusyness
    </Proxy>
</VirtualHost>

 

<VirtualHost *:80>
    ErrorLog "logs/acooly.org-error_log"
    LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
    CustomLog logs/access_log vcommon

    ProxyRequests Off
    ProxyPreserveHost on
    # apache+tomcat cluster
    ProxyPass / balancer://tomcat-cluster/
    ProxyPassReverse / balancer://tomcat-cluster/
    <Proxy balancer://tomcat-cluster/>
      BalancerMember ajp://10.10.10.11:8009 loadfactor=1 route=tomcat1
      BalancerMember ajp://10.10.10.12:8009 loadfactor=1 route=tomcat2
      ProxySet lbmethod=bybusyness
    </Proxy>
</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变量是否存储,如果存储则表示:故障转移和会话复制成功了。


 

 

 

  • 大小: 26.3 KB
  • 大小: 31.9 KB
  • 大小: 33.5 KB
分享到:
评论

相关推荐

    APACHE(proxy_ajp_stickysession) + TOMCAT实现高可用网站或管理系统集群

    NULL 博文链接:https://acooly.iteye.com/blog/1377732

    apache+tomcat负载均衡_proxy模式

    内附完整配置教程和修改后的apache的httpd.conf文件和tomcat的server.xml配置文件,包含test测试项目,不包含apache和tomcat安装文件。 本教程参考网上资料,本机测试成功,如有问题可以私信说明。

    APACHE 2.2.9+TOMCAT6.0.18配置负载均衡

    2、 为系统设定 Session 超时时间,包括 Apache 和 tomcat 3、 为系统屏蔽文件列表,包括 Apache 和 tomcat 注:本例程以一台机器为例子,即同一台机器上装一个apache和4个Tomcat。 一、 前期准备工作:安装用的程序...

    apache+tomcat集群配置

    对apache与tomcat的集群配置进行了详细的描述。 基础篇:系统部署、集群配置、集群方式; 晋级篇:正向与反向代理、访问控制、均衡策略之ProxyPass、均衡策略之ProxyPassReverse、代理struts2工程、PROXY_HTTP与...

    apache tomcat 6集群负载和session复制

    无意间看到tomcat 6集群的内容,就尝试配置了一下,还是遇到很多问题,特此记录。apache服务器和tomcat的连接方法其实有三种:JK、http_proxy和ajp_proxy。本文主要介绍最为常见的JK。 环境:PC2台:pc1(IP 192.168....

    Nginx+Tomcat负载均衡

    首先大家注意: 本文章中没有session共享,关于session共享我会在下一篇中讲解,先实现Nginx+tomcat负载均衡再实现session共享。 从网上查了好多资料,多走了很多弯路,现在把自己成功的方法拿出来与大家分享。 ...

    低清版 大型门户网站是这样炼成的.pdf

    1.2.5 支持集群功能的web服务器tomcat 21 1.2.6 开源数据库服务器之骄子mysql 23 1.2.7 功能强大的flv流媒体服务器red5 24 1.3 门户网站开发指导思想 26 1.4 ssh 2组合框架—门户网站开发之首选 28 1.4.1 mvc...

    JAVA上百实例源码以及开源项目

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

    JAVA上百实例源码以及开源项目源代码

    Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用...

    java开源包3

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包4

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包1

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包11

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包2

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包6

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包5

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包10

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包8

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

Global site tag (gtag.js) - Google Analytics