CAS服务器端集群

 ̄綄美尐妖づ 提交于 2020-12-24 04:20:54

CAS集群分为服务器端集群和客户端集群。

##CAS服务器端集群##

CAS服务器端集群主要解决两个问题: session同步和Ticket(票据)仓库共享。

实现环境的网络拓扑图如下: CAS服务器集群的网络拓扑图

###环境变量定义###

  • CAS_HOME: CAS Server源码包目录(版本: 3.5.2)
  • CATALINA_HOME: tomcat目录(版本: 7.0.42)

###配置session同步###

由于这里将CAS服务器端应用部署在tomcat上,因此session同步的配置方法和普通的tomcat session同步一样。这里给出一个例子:

在*$CATALINA_HOME/conf/server.xml*中的<Engine>节点添加如下的配置片段:

<!-- lang: xml --> 
<Host>
  <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
             channelSendOptions="6">

      <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"
                    ttl="1"/>
        <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>    
    
    <!-- Access log processes all example.
         Documentation at: /docs/config/valve.html
         Note: The pattern used is equivalent to using pattern="common" -->
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

并给<Engine>节点添加一个jvmRoute的属性,其属性值可以随意取,比如jvm2, 只要保证在集群环境内是唯一的。

在*$CATALINA_HOME/webapps/cas/WEB-INF/web.xml*中添加 <distributable />

详细的tomcat集群配置细节参考 http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.htmlhttp://tomcat.apache.org/tomcat-6.0-doc/config/cluster.html

###Ticket仓库同步###

Ticket仓库同步的做法可以使用集中式缓存,比如memcached, redis; 或者使用数据库集中保存; 如果使用缓存插件,比如ehcached,jbossCache,则需要配置缓存同步策略。

####使用memcached缓存ticket仓库的内容####

####使用ehcache缓存ticket仓库的内容####

  • 用*$CAS_HOME/cas-server-integration-ehcache/src/test/resources/ticketRegistry.xml替换$CATALINA_HOME/webapps/cas/WEB-INF/spring-configuration/ticketRegistry.xml*,
  • 将*$CAS_HOME/cas-server-integration-ehcache/src/test/resources/ehcache-replicated.xml复制到$CATALINA_HOME/webapps/cas/WEB-INF/classes*目录
  • cas-server-integration-ehcache-3.5.2.jar复制到*$CATALINA_HOME/webapps/cas/WEB-INF/lib*目录

ehcache集群方案一般有三种: RMI, jgroups, EhCache Server. cas-server-integration-ehcache模块给出了RMI集群方案。RMI集群方案有两种缓存同步模式: 自动和手动。 如果使用自动模式,则把ehcache-replicated.xml里面的<!-- Manual Peer Discovery -->块注释掉,并根据实际情况修改<cacheManagerPeerProviderFactory>节点内的multicastGroupAddress属性和multicastGroupPort属性。如果使用手动模式 ,请参考这里

####使用jbossCache缓存ticket仓库的内容#### 打开*$CATALINA_HOME/cas/WEB-INF/spring-configuration/ticketRegistry.xml*, 将 <!-- lang:xml --> <bean id="ticketRegistry" class="org.jasig.cas.ticket.registry.DefaultTicketRegistry" /> 换成 <!-- lang: xml --> <bean id="cache" class="org.jasig.cas.util.JBossCacheFactoryBean" p:configLocation="classpath:jbossTicketCacheReplicationConfig.xml" />
<bean id="ticketRegistry" class="org.jasig.cas.ticket.registry.JBossCacheTicketRegistry" p:cache-ref="cache" /> 注意classpath:jbossTicketCacheReplicationConfig.xml之间不能用空格

将*$CAS_HOME/cas-server-integration-jboss/src/test/resources/jbossTestCache.xml复制到$CATALINA_HOME/webapps/cas/WEB-INF/classes目录,并重命名为jbossTicketCacheReplicationConfig.xml*.

打开jbossTicketCacheReplicationConfig.xml,将下面的片段注释掉: <!-- lang: xml --> <!-- <depends>jboss:service=TransactionManager</depends> --> 和 <!-- lang: xml --> <!-- <attribute name="TransactionManagerLookupClass">org.jboss.cache.transaction.DummyTransactionManagerLookup</attribute> -->

找到<attribute name="ClusterConfig">节点,根据实际情况修改<UDP>子节点的mcast_addr属性和mcast_port属性(这是jbosscache缓存通信的广播地址和端口,确保不要和其他地址重叠)。 此外,如果你的集群节点都位于同一个子网, 那么将<UDP>子节点的ip_ttl属性设置为*"1". 如果你的系统使用IPv6或bonding服务,那么你可能需要根据实际情况修改<UDP>子节点的bind_addr*属性。

下载jgroups-2.6.5.GA.jar, jboss-common-core-2.2.8.GA.jar, jbosscache-core-2.2.2.GA.jar , cas-server-integration-jboss-3.5.2.jar,并把他们复制到*$CATALINA_HOME/webapps/cas/WEB-INF/lib*目录。

####使用mysql存储ticket仓库的内容####

参考资料:

[https://wiki.jasig.org/display/CASUM/Clustering+CAS][4]
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!