2009-05-19 4 views
10

私はここに記載されているようにehcacheの複製を設定しようとしています:http://ehcache.sourceforge.net/EhcacheUserGuide.html#id.s22.2
これはWindowsマシン上ですが、最終的にはSolaris上で実稼動します。ehcacheレプリケーションの設定 - どのマルチキャスト設定が必要ですか?

命令は次のようにプロバイダを設定するには言う:

<cacheManagerPeerProviderFactory 
    class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" 
    properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, 
    multicastGroupPort=4446, timeToLive=32"/> 

そして、このようなリスナー:

<cacheManagerPeerListenerFactory 
    class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" 
    properties="hostName=localhost, port=40001, 
    socketTimeoutMillis=2000"/> 

私の質問は以下のとおりです。
は(任意のマルチキャストIPアドレスとポートです私は住所が特定の範囲内に住んでいなければならないが、特定の数字でなければならないことを知っている)?
システム管理者が何らかの方法で設定する必要がありますか(私はオフィスネットワークに加入しています)?

ローカルでテストしたいので、上記の設定で2つの別々のTomcatインスタンスを実行しています。 それぞれを変更する必要がありますか?私は両方のリスナーが同じポートで聞くことができないことを知っている - しかし、プロバイダーはどうですか?
リスナーポートも任意ですか?

私は上記のように設定しようとしましたが、私のテストではキャッシュは複製されていないようです。つまり、あるTomcatのキャッシュに追加された値はもう一方のキャッシュにはありません。
(パケットスニッフィング以外の)この状況をデバッグするためにできることはありますか?

事前にお手伝いをしていただきありがとうございました。

答えて

5

ので、上記の設定と 実行している2つの別々のTomcatインスタンスが ています。私はちょうどcherouvims related questionに関する答えを提出してきたように

私はちょうど彼らが実際に似た何かをする例を提供していることにも、ここで強調したいと思います少なくとも(ホストごとに複数のノード、1つのインスタンスけれどものみ):詳細RMI Distributed Cachingのマニュアルのを参照してください。

それは各cacheManagerPeerListenerFactoryためのTCPポートを変更するには確かに重要だが、マルチキャストの設定は同じまま(私は、彼らがしなければならないと考えるだろう)することができます:あなたは上記の全例ためehcache.xml's以内にこの動作を確認することができます:マルチキャスト設定が同一のままである間に、ポート番号はノードごとに40001から40006まで1つずつ増加します。

あなたはあなたの問題は、単にWindows上で実行されているTomcatに関連するかもしれない、ということに従われている場合 - RMI Distributed Cachingセクション一般的な問題内の関連段落を参照してください。

ありバグがTomcatの中で、および/またはインストールパスにスペースが含まれている場合、RMIリスナーがあるJDKは Tomcatで起動できません。
[...]
Windowsのデフォルトでは、 "Program Files"にTomcatをインストールするので、 この問題はデフォルトで発生します。

+0

ポート番号に関する質問に答えて受け入れます。 パスの空白にもヒントはありますが、私は影響を受けていませんでしたが、スペースのないパスに常にJavaのものをインストールしています。 –

2

サーバーで、マルチキャストが有効になっていることを確認してください。実行しているプラ​​ットフォームがわからない私はそれをローカルにテストしたい

+0

こんにちは、Windows上です(今質問に追加されています)。 それはあなたが「サーバ」を意味するものなのですか?それをOSで有効にする必要がありますか? –

+2

http://technet.microsoft.com/en-us/library/bb726985.aspx – Gandalf

+0

こんにちは、マルチキャストが有効になっているようです - 私は自分のローカルフレンドリーなシステム管理者をチェックしました。 私は別の仕事をしているので、私はまだ再テストをしていません。 –

2

迅速なフォローアップと同様です。

私たちは2つの別々のマシンでこれを動作させました。それは、それをまったく動作させるという元の問題を解決しました。 Multicastは "すぐに"機能するはずですが、ローカルのシステム管理者(私たちはmulticastGroupAddressを調整することをお勧めします)とチェックする価値があります。

最終的にSolaris上でさまざまな問題が発生し、代わりにManual Peer Discoveryのマルチキャストを放棄しました。

最後に、デバッグの観点からは、jconsoleを使用してキャッシュ値を監視することが最良の方法であることが判明しました。パケットスニッフィングに頼る必要はありませんでした。 :-)

+0

+1とJConsoleのヒント。 –

5

EHCacheピアレプリケーション中に発生した1つの間違いです。これは、誰かが単一のローカルボックスでピア複製を試みるのに便利かもしれません。

私はpeerDiscovery = automatic(最終的なターゲット環境はLinux)を使用して、単一のWindows Vistaボックスで3つのピアレプリケートされたEhCacheのインスタンスを実行したかったのです。

ピア複製が機能しませんでした。奇妙なことに、すべてのEhCacheインスタンスがログにエラーや苦情を出さずに起動していました。

私の間違いを理解するために私はしばらく時間がかかりました。 EHCacheインスタンスごとに同じリスナー構成で同じlistenerPort(40001)を使用していました。異なるlistenerPorts(40001、40002 ...)を使用して、そのトリックを行いました。

<cacheManagerPeerListenerFactory 
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" 
properties="port=40001, socketTimeoutMillis=3000"/> 

<cacheManagerPeerListenerFactory 
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" 
properties="port=40002, socketTimeoutMillis=3000"/> 

これは、異なるポート番号を必要とする「ピアリスナー」構成であることに注意してください。マルチキャスト 'ピア発見'は、すべてのehcacheインスタンスに対して同じマルチキャストアドレスとポート番号を使用します。

2
<cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/> 

だけで使用可能な次のいずれかを使用します上記、ehcacheををやって!だから、あなたがcluserに

-Jerylクック

1

を展開する新しいノードの設定について心配する必要はありませんマルチキャストを実装誰かを助けるかもしれません。私は自分のアプリをEclipseからローカルのTomcatで実行し、同僚のEclipseからローカルのTomcatで同じアプリケーションを実行することで検証しました。

Windowsマシン上で以下のように実行すると、いくつかのipsが表示され、マルチキャスティングが確実に動作するようになります。

netsh interface ip show joins 

属性multicastGroupAddress = 230.0.0.1は、あなたのアプリケーションがこのIPを使用することを意味し、これは変更さだけがクラスDのIPアドレスの範囲を使用するように確保することができます。アプリケーションを実行した後、このIP 230.0.0.1も見ることができます。 enter image description here

すべての魔法を見るには、ログを適切に有効にしてください。

<logger name="net.sf.ehcache"> <level value="debug"/></logger> 
    <logger name="net.sf.ehcache.distribution.RMICachePeer" level="debug" /> 

あなたはログインします場合は参考になっなります

13:31:27.073 DEBUG n.s.e.d.PayloadUtil assembleUrlList - Cache peers for this CacheManager to be advertised:...... 
15:15:14.110 DEBUG net.sf.ehcache.distribution.MulticastKeepaliveHeartbeatReceiver processPayload rmiUrls received....(YOur configured caches with Ips) 

に以下を参照してください可能性があり、アプリケーションをデプロイした後、デフォルトのキャッシュや必要なキャッシュ構成でlisnersの下

  <cacheManagerPeerProviderFactory 
     class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" 
     properties="port=40003, peerDiscovery=automatic, 
        multicastGroupAddress=230.0.0.1, 
        multicastGroupPort=4446, 
        timeToLive=32"/> 
    <cacheManagerPeerListenerFactory 
     class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" 
     properties="port=40001, socketTimeoutMillis=3000" /> 
    <cacheManagerPeerListenerFactory 
     class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" 
     properties="port=40002, socketTimeoutMillis=3000"/> 
<defaultCache 
    eternal="false" 
    timeToIdleSeconds="300" 
    timeToLiveSeconds="300" 
    diskExpiryThreadIntervalSeconds="305" 
    memoryStoreEvictionPolicy="LRU" 
    statistics="true"> 
    <persistence strategy="localTempSwap"/> 
    <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/> 
    <bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory" properties="bootstrapAsynchronously=true, maximumChunkSizeBytes=5000000"/> 
     </defaultCache> 

を持つことを確認します手動ピア発見プロセスを設定する必要があります。

関連する問題