2009-05-19 3 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 주소 및 임의의 포트 (인가

지침은 다음과 같이 공급자를 설정하는 말 주소가 특정 범위 내에 있어야한다는 것을 알고 있지만 특정 숫자 여야합니까?)
시스템 관리자가 어떤 식 으로든 설치해야합니까 (사무실 네트워크에 있습니다)?

위의 설정으로 두 개의 별개의 tomcat 인스턴스를 실행 중이므로 로컬로 테스트하고 싶습니다. 각 항목을 변경하려면 무엇이 필요합니까? 청취자가 동일한 포트에서 수신 할 수 없다는 것을 알고 있지만 공급자는 무엇입니까?
리스너 포트 역시 임의적입니까?

위와 같이 설정을 시도했지만 테스트에서 캐시가 복제 된 것처럼 보이지 않습니다. 하나의 Tomcat 캐시에 추가 된 값이 다른 캐시에 없습니다.
(패킷 스니핑 이외의)이 상황을 디버깅하기 위해 할 수있는 것이 있습니까?

미리 도움 주셔서 감사 드리며,이 머리 위로 내 머리를 찢어 버렸습니다!

답변

5

나는 로컬 그래서 위의 설정과 실행되는 두 개의 별도의 바람둥이 인스턴스를 나는 그것을 테스트 할 수 있습니다. 난 그냥 cherouvims related question에 대한 답변을 제출함에 따라

나는 단지 그들이 실제로 비슷한 일을하는 예를 제공하는 것을 너무 여기에서 강조하고 싶은 이상 (호스트 당 여러 노드, 하나 개의 인스턴스하지만 전용) : 전체 예제RMI Distributed Caching 문서를 참조하십시오.

이의 TCP 포트를 변경하는 참으로 중요 각 cacheManagerPeerListenerFactory하지만 멀티 캐스트 설정은 동일하게 유지 (나는 그들이 생각합니다 것) 할 수 있습니다 : 당신이 위에서 언급 한 전체 예ehcache.xml's 내 행동에서 볼 수 있습니다 : 멀티 캐스트 설정이 동일하게 유지되는 동안 포트 번호는 노드 당 40001에서 40006까지 하나씩 증가합니다.

당신이 당신의 문제가 단지 Tomcat이 Windows에서 실행과 관련이있을 수도 있음을 순종 한 경우 - RMI Distributed Caching 섹션 일반적인 문제 내에서 관련 단락 참조 : 톰캣 및/또는 버그가

이를 설치 경로에 공백이있는 경우 모든 RMI 리스너가 Tomcat에서 시작되지 않는 JDK.
[...]
"Program Files"에 Tomcat을 설치하는 것이 기본값이기 때문에 이 문제는 기본적으로 발생합니다.

+0

포트 번호에 관한 질문에 대답하는 것으로 받아들입니다. 공백없이 항상 경로에 Java 항목을 설치하므로 영향을받지는 않았지만 경로의 공백에 대한 유용한 팁. –

2

서버가 우선적으로 멀티 캐스트를 사용할 수 있는지 확인하십시오. 실행중인 플랫폼을 잘 모릅니다.

+0

안녕하세요. Windows에 있습니다. (지금 질문에 추가했습니다.) "서버"가 의미하는 바는 무엇입니까? OS에서 활성화해야합니까? –

+2

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

+0

안녕하세요, 멀티 캐스트를 사용하도록 설정되어있는 것 같습니다. 로컬로 친숙한 sysadmin에게 확인을 요청합니다. 나는 다른 일을하고 있기 때문에 아직 재검사를하지 않고있다. 내 결과를 게시 할 것이다. –

2

빠른 후속 조치.

우리는이 작업을 두 개의 개별 컴퓨터에서 수행하여 원래 작동 문제를 해결했습니다. Multicast는 "기본적으로"작동해야하지만 로컬 sysadmin (우리는 multicastGroupAddress를 조정할 것을 제안 함)을 확인하는 것이 좋습니다.

결국 Solaris에서 여러 가지 문제가 발생하여 Manual Peer Discovery에 대한 멀티 캐스트를 포기했습니다.

마지막으로 디버깅 측면에서 jconsole을 사용하여 캐시 값을 모니터하는 것이 가장 좋은 방법임이 입증되었습니다. 패킷 스니핑에 의지 할 필요가 없었습니다. :-)

+0

+1 결과 및 JConsole 팁. –

5

EHCache 피어 복제 중 하나의 실수가 발생했습니다. 이는 단일 로컬 상자에서 피어 복제를 시도하는 사용자에게 유용 할 수 있습니다.

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 인스턴스에 대해 동일한 멀티 캐스트 주소 및 포트 번호를 사용합니다.

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

위의 작업 만 수행하면 ehcache에서 사용 가능한 다음 카드를 사용하게됩니다! 그래서 당신은 당신이

-Jeryl 쿡

1

이 누군가 구현하는 멀티 캐스팅을 도움이 될 수 cluser에 배포 할 새 노드의 구성에 대해 걱정할 필요가 없습니다. 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> 

아래 한 것으로 확인 수동 피어 검색 프로세스를 구성해야합니다.

관련 문제