Настройка репликации ehcache - какие настройки многоадресной рассылки мне нужны? - PullRequest
10 голосов
/ 20 мая 2009

Я пытаюсь настроить репликацию 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-адрес и порт произвольными (я знаю, что адрес должен находиться в определенном диапазоне, но должны ли они быть конкретными числами)?
Должны ли они быть настроены каким-либо образом нашим системным администратором (я нахожусь в офисной сети)?

Я хочу проверить его локально, поэтому я запускаю два отдельных экземпляра tomcat с вышеуказанным конфигом. Что мне нужно изменить в каждом? Я знаю, что оба слушателя не могут прослушивать один и тот же порт, но как насчет провайдера?
Кроме того, порты слушателя также произвольны?

Я пытался настроить его, как указано выше, но в моем тестировании кэши, похоже, не реплицировались - добавленная стоимость в кеше одного кота отсутствует в другом кеше.
Могу ли я что-нибудь сделать для устранения этой ситуации (кроме перехвата пакетов)?

Заранее спасибо за любую помощь, рвал на себе волосы над этим!

Ответы [ 6 ]

5 голосов
/ 22 апреля 2010

Одна ошибка, с которой я столкнулся во время репликации узла EHCache. Это может быть полезно, если кто-то пытается выполнить репликацию на одном локальном компьютере.

Я хотел запустить 3 реплицированных экземпляра EhCache на одном компьютере под управлением Windows Vista, используя peerDiscovery = automatic (конечной целевой средой была Linux).

Одноранговая репликация не работает. Как ни странно, все экземпляры EhCache запускались без каких-либо ошибок или жалоб в журнале.

Мне потребовалось время, чтобы понять мою ошибку; без чего-либо в журналах мне пришлось возиться: я использовал один и тот же listenerPort (40001) в конфигурации однорангового прослушивателя для каждого экземпляра EhCache. Используя разные порты listener (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"/>

Обратите внимание, что это конфигурация «peer listener», для которой нужны разные номера портов. Многоадресное «обнаружение однорангового узла» по-прежнему использует идентичный адрес многоадресной рассылки и номера портов для каждого экземпляра ehcache.

5 голосов
/ 24 августа 2009

Я хочу проверить это локально, поэтому я запуск двух отдельных экземпляров tomcat с указанным выше конфиг.

Поскольку я только что представил ответ, касающийся cherouvims связанный с этим вопрос Я просто хотел бы подчеркнуть здесь, что они на самом деле предоставляют пример, выполняющий что-то похожее, по крайней мере (несколько узлов на хост, хотя один только экземпляр): см. раздел Полный пример в документации RMI Distributed Caching .

Действительно важно изменить порт TCP для каждого cacheManagerPeerListenerFactory, но настройки многоадресной рассылки могут (я думаю, что они должны) оставаться прежними: вы можете увидеть это в действии в ehcache.xml *1015*. для полного примера , упомянутого выше: номер порта увеличивается один за другим с 40001 до 40006 на узел, в то время как настройки многоадресной рассылки остаются идентичными.

Если вы выполнили это, ваша проблема может быть просто связана с Tomcat, работающим в Windows - см. Соответствующий параграф в разделе Распространенные проблемы в RMI Distributed Caching :

В Tomcat и / или JDK есть ошибка, из-за которой любой слушатель RMI будет не удается запустить Tomcat, если в пути установки есть пробелы.
[...]
По умолчанию в Windows устанавливается Tomcat в «Program Files», эта проблема будет возникать по умолчанию.

2 голосов
/ 27 мая 2010
 <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>

просто делая выше, ehcache будет использовать следующий доступный! Поэтому вам не нужно беспокоиться о настройке новых узлов, которые вы хотите развернуть в кластере.

2 голосов
/ 27 августа 2009

Так же, как быстрое продолжение.

Мы работали с двумя отдельными машинами, что решило первоначальную проблему заставить его работать вообще. Насколько я помню, Multicast должен работать "из коробки", но стоит проверить это у своего локального системного администратора (наши предложили настроить multicastGroupAddress).

В конечном итоге мы столкнулись с множеством проблем в Solaris и в итоге отказались от многоадресной рассылки для Manual Peer Discovery .

Наконец, с точки зрения отладки, использование jconsole для мониторинга значений кэша оказалось лучшим способом сделать это. Не пришлось прибегать к нюханию пакетов. : -)

2 голосов
/ 20 мая 2009

Убедитесь, что на ваших серверах включена многоадресная рассылка для начинающих. Не уверен, на какой платформе вы работаете.

1 голос
/ 15 августа 2017

Может помочь Кто-то, реализующий многоадресную передачу Я подтвердил, запустив мое приложение в локальном коте из затмения и запустив то же самое приложение в локальном коте из затмения моего коллеги.

Запуск ниже на вашем компьютере с Windows покажет вам некоторые ips и гарантирует, что мультикаст будет работать.

netsh interface ip show joins

атрибут multicastGroupAddress = 230.0.0.1 означает, что ваше приложение хочет использовать этот IP, его можно изменить, но убедитесь, что используется только диапазон IP класса D. После запуска приложения вы можете увидеть этот 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" />

Убедитесь, что в вашем кеше по умолчанию или в требуемой конфигурации кеша указано число строк ниже

         <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>

После развертывания приложения вы можете увидеть ниже в журналах

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)

Что будет полезно, если вам нужно настроить процесс обнаружения одноранговых узлов вручную.

...