7月 2nd, 2009

Tomcatクラス゜ 静的メンバ(StaticMember)

Posted in Tomcat by admin

 Tomcat6以降でクラスタリング? 能が強化された事によって、現場でもTomcat Clusterを採用してみるという傾向が高まっている気がします。Tomcat5.5デフォルトぜ server.xmlにコメントで? 述してあるクラスタ設定でも、ボ ード間のセッション情報共有にはマルチキャストが採用されていました。実際のところ、Tomcatクラスタリング対象のサーバのマルチキャストの設定/確? 作業など面倒な点もあり、また、開発チームが簡易にクラスタリング朧 成を組む場合に、NW設? を実施した管理者とやり圏 りしなければならない場合も発生するなど敷? の? い方? だと感じます。しかし、Tomcatクラスタではマルチキャスト自動検出の方? 以? に、静的なボ ードメンバーで設定することもできます。設? 自? もボ ードぜ server.xmlのみで? 結しますので、比較的容易ぜ Tomcatクラスタを組むことが出来ます。以? のように設定して確認しました。(この設定ぜ 6.0.20以降を推奨?

<!-- Hostタグの中に追記します -->
<Host ~>
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
	channelSendOptions="8"
	<!-- 4:同期、8:非同期モードの選択 -->
	channelStartOptions="3"> 

	<!-- (1) 1つのバックアップボ ードにだけセッション情報を共有 -->
	<!--
	<Manager className="org.apache.catalina.ha.session.BackupManager"
		expireSessionsOnShutdown="false"
		notifyListenersOnReplication="true"
		mapSendOptions="6"/>
	-->
	<!-- (2) 全てのボ ードでセッション情報を共有 -->
	<Manager className="org.apache.catalina.ha.session.DeltaManager"
		expireSessionsOnShutdown="false"
		notifyListenersOnReplication="true"/>

	<Channel className="org.apache.catalina.tribes.group.GroupChannel">

		<!-- (1) マルチキャストの場合はここを有効にします -->
		<!--
		<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="192.168.0.1"	<!-- 2台目ぜ 192.168.0.2 -->
			port="8080"
			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.TcpPingInterceptor" staticOnly="true"/>
		<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
		<!-- (2) 静的メンバーの場合はここを有効にします -->
		<Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
			<!-- メンバボ 1 -->
			<Member className="org.apache.catalina.tribes.membership.StaticMember"
				port="8080"
				host="192.168.0.1"
				domain="cluster-static"
				uniqueId="{192,168,0,1,0,0,0,0,0,0,0,0,0,0,0,0}"/>
			<!-- メンバボ 2 -->
			<Member className="org.apache.catalina.tribes.membership.StaticMember"
				port="8080"
				host="192.168.0.2"
				domain="cluster-static"
				uniqueId="{192,168,0,2,0,0,0,0,0,0,0,0,0,0,0,0}"/>
		</Interceptor>
	</Channel>

	<!-- セッション共有しないリクストパターンの設定 -->
	<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
		filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>

	<!-- ファーミング? 能使用時の設定 -->
	<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>
</Host>

セッション同期出来れば、以? のようにログ出力されます。Tomcat付属ぜ examplesサーブレット”SessionExample”でセッションの同期を確? 出来ます。

Jan 25, 2009 17:10:31 PM org.apache.catalina.ha.session.DeltaManager getAllClusterSessions
WARNING: Manager [/examples], requesting session state from org.apache.catalina.tribes.membership.MemberImpl
     [tcp://192.168.0.1:8080,192.168.0.1,8080, alive=0,id={0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 },
     payload={}, command={}, domain={99 111 109 112 45 99 49 45 99 ...(15)}, ].
     This operation will timeout if no session state has been received within 60 seconds.

Jan 25, 2009 17:10:31 PM org.apache.catalina.ha.tcp.SimpleTcpCluster memberAdded
INFO: Replication member added:org.apache.catalina.tribes.membership.MemberImpl
      [tcp://192.168.0.1,192.168.0.1,8080, alive=0,id={0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 },
      payload={}, command={}, domain={99 111 109 112 45 99 49 45 99 ...(15)}, ]

Jan 25, 2009 17:10:31 PM org.apache.catalina.ha.session.DeltaManager waitForSendAllSessions
SEVERE: Manager [/examples]: No session state send at 1/25/09 3:47 PM received, timing out after 60,094 ms.
Jan 25, 2009 17:10:31 PM org.apache.catalina.ha.session.DeltaManager getAllClusterSessions
WARNING: Manager [/examples]: Drop message SESSION-GET-ALL inside
         GET_ALL_SESSIONS sync phase start date 1/25/09 3:47 PM message date 1/1/70 9:00 AM
Jan 25, 2009 17:10:31 PM org.apache.catalina.ha.session.DeltaManager getAllClusterSessions
WARNING: Manager [/examples]: Drop message SESSION-GET-ALL inside GET_ALL_SESSIONS
         sync phase start date 1/25/09 3:47 PM message date 1/1/70 9:00 AM

このログ出力にもあるようぜ stateTransferTimeoutデフォルト60秒以内にセッションを確? できなければ? セッションステートを圏 信できなければ? タイムアウトします。両ホスト間の通信の確認、アプリケーションの設定/動作(<distributable />など? に? 備がないかを確? してみれ下さい。

2009/07/19 16:26:23 org.apache.catalina.ha.session.DeltaManager waitForSendAllSessions
致命的: Manager [/examples]: No session state send at 09/07/19 16:25 received, timing out after 60,086 ms.
You can leave a comment, or trackback from your own site. RSS 2.0

One comment

  1. cialis pills for sale says:

    Here you can learn about viagra for sale cialis pills for sale

    10月 5th, 2015 at 17:50:04

Leave a comment