CAS集群分为服务器端集群和客户端集群。
##CAS服务器端集群##
CAS服务器端集群主要解决两个问题: session同步和Ticket(票据)仓库共享。
实现环境的网络拓扑图如下:
###环境变量定义###
- 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 "%r" %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.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*, 将
<!-- 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]
来源:oschina
链接:https://my.oschina.net/u/103999/blog/163470