CAS服务器端集群

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中的 节点添加如下的配置片段:

 
<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 "%r" %s %b" />

</Host>

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

$CATALINA_HOME/webapps/cas/WEB-INF/web.xml中添加

详细的tomcat集群配置细节参考 http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html 或
http://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, 将

 
<bean id="ticketRegistry" class="org.jasig.cas.ticket.registry.DefaultTicketRegistry" />

换成

 
  <bean id="cache" class="org.jasig.cas.util.JBossCacheFactoryBean"
    p:configLocation="classpath:jbossTicketCacheReplicationConfig.xml" />         


注意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,将下面的片段注释掉:

 
<!-- <depends>jboss:service=TransactionManager</depends> -->


<!--    <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]

你可能感兴趣的:(java,SSO,cas)