10

ここに記載されているようにehcacheレプリケーションを設定しようとしています:http://ehcache.sourceforge.net/EhcacheUserGuide.html#id.s22.2
これはWindowsマシン上にありますが、最終的には本番環境のSolarisで実行されます。

指示では、プロバイダーを次のように設定するように指示されています。

 <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のキャッシュに追加された値は、もう一方のキャッシュには存在しません。
この状況をデバッグするために(パケットスニッフィング以外に)できることはありますか?

助けてくれてありがとう、これで私の髪を引き裂いてきました!

4

6 に答える 6

5

ローカルでテストしたいので、上記の構成で 2 つの個別の tomcat インスタンスを実行しています。

cherouvims関連の質問に関する回答を提出したばかりなので、ここでも強調したいのですが、少なくとも同様のことを行う例を実際に提供していることを強調したいと思います (1 つのインスタンスのみですが、ホストごとに複数のノード): セクションの完全な例を参照してください。 RMI 分散キャッシュのドキュメント。

それぞれのTCPポートを変更することは確かに重要ですcacheManagerPeerListenerFactoryが、マルチキャスト設定は同じままにすることができます(そうしなければならないと思います):上記の完全な例のehcache.xml内でこれを実際に確認できます:ポート番号が増加しますノードごとに 40001 から 40006 まで 1 つずつ、マルチキャスト設定は同じままです。

それに従った場合、問題は単に Windows で実行されている Tomcat に関連している可能性があります。セクションRMI 分散キャッシュの一般的な問題内の関連段落を参照してください。

インストール パスにスペースが含まれていると、Tomcat で RMI リスナーを起動できないというバグが Tomcat や JDK に存在します。
[...]
Windows のデフォルトは Tomcat を「Program Files」にインストールするため、この問題はデフォルトで発生します。

于 2009-08-24T16:09:43.863 に答える
5

EHCache ピア レプリケーション中に発生した 1 つの間違い。これは、誰かが単一のローカル ボックスでピア レプリケーションを試みる場合に役立つ可能性があります。

私は、peerDiscovery=automatic (最終的なターゲット環境は Linux) を使用して、単一の Windows Vista ボックスで EhCache の 3 つのピア複製インスタンスを実行したいと考えていました。

ピア レプリケーションが機能しませんでした。奇妙なことに、すべての 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 インスタンスに対して同一のマルチキャスト アドレスとポート番号を引き続き使用します。

于 2010-04-22T08:39:39.550 に答える
2
 <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>

上記を行うだけで、ehcacheは次に利用可能なものを使用します! そのため、クラスターにデプロイする新しいノードの構成について心配する必要はありません。

于 2010-05-27T18:45:27.547 に答える
2

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

于 2009-05-19T20:34:41.563 に答える
2

簡単なフォローアップとして。

これを 2 台の別々のマシンで動作させることで、元の問題を完全に解決することができました。私が覚えている限りでは、マルチキャストは「箱から出してすぐに」動作するはずですが、ローカルのシステム管理者に確認する価値があります (私たちは、multicastGroupAddress を微調整することを提案しました)。

最終的に、Solaris であらゆる種類の問題に遭遇し、手動ピア検出の代わりにマルチキャストを放棄することになりました。

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

于 2009-08-27T10:32:35.087 に答える