这个方案相对比较简单容易测试,但是性能不太好,在生产应用当tomcat服务器数量不是很多的进候可以一试,如果多了就改为memcached-session-manager方式吧。
假设tomcat1:192.168.1.100:8080
tomcat2:192.168.1.101:8080
nginx 192.168.1.103:80 域名cas.test.com 进行负载均衡tomcat1,tomcat2
cas的组播集群修改步骤:
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="false" p:cookieMaxAge="-1" p:cookieName="CASTGC" p:cookiePath="/cas" />
为
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="false" p:cookieMaxAge="-1" p:cookieName="CASTGC" p:cookiePath="/cas" p:cookieDomain="cas.test.com"/>
<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="false" p:cookieMaxAge="-1" p:cookieName="CASPRIVACY" p:cookiePath="/cas" />
为
<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="false" p:cookieMaxAge="-1" p:cookieName="CASPRIVACY" p:cookiePath="/cas" p:cookieDomain="cas.test.com"/>
进行4,5两步的修改为了让tomcat1产生的cookie能够被tomcat2所读取。
关于以组播的方式构建tomcat集群,则tomcat的server.xml的配置如下:
将 <Engine name="Catalina" defaultHost="localhost" >
改为 <Engine name="Catalina" defaultHost="localhost" jvmRoute="t105"> 其中jvmRoute 这个参数要全局唯一,即要集群中的所有服务器的配置是唯一的。
并在下面
<!-- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> -->
增加如下配置:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"> <!-- <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/> 这种是all to all 的复制--> <!-- 这种是主从式的复制 --> <Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" mapSendOptions="6"/> <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"/> <!--如果auto值报错,则将值改为运行tomcat的机器ip地址 --> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4001" 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.TcpPingInterceptor" staticOnly="true" /> <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor"> <Member className="org.apache.catalina.tribes.membership.StaticMember" port="4000" host="10.1.0.100" uniqueId="{10,1,0,100,0,0,0,0,0,0,0,0,0,0,0,0}" /> <Member className="org.apache.catalina.tribes.membership.StaticMember" port="4000" host="10.1.0.101" uniqueId="{10,1,0,101,0,0,0,0,0,0,0,0,0,0,0,0}" /> </Interceptor> --> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/> <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> <!-- <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> --> <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>
每个tomcat中都需要配置,但是需要保证jvmRoute值不同。对于tomcat运行在windows系统上,则配置至此完毕,将tomcat运行即可看到相关的组播信息。但是如果tomcat是运行在linux系统,则需要进行如下的设置,因为linux默认是不开启组播服务的,可以通过
1./sbin/ifconfig -a 查看相应的服务器的网卡是否支持组播,如果输出 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
则表示网卡支持组播,如果不支持,则需要重新编译linux内核重新安装系统,这个我们就不考虑了。
2.如果从第一步,可知网卡支持组播,则执行如下命令(这个命令的执行需要root账号来执行):
/sbin/route add –net 224.0.0.0 netmask 240.0.0.0 dev eth0
这样linux配置至此完毕,运行tomcat可看到相关的组播信息。
发表评论(对文章涉及的知识点还有疑问,可以在这里留言,老高看到后会及时回复的。)