Настройка репликации ehcache - какие настройки многоадресной рассылки мне нужны?

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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

Ответ 4

Как быстрое наблюдение.

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

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

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

Ответ 5

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

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

Ответ 6

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

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

netsh interface ip show joins

атрибут multicastGroupAddress = 230.0.0.1 означает, что ваше приложение хочет использовать этот IP-адрес, это можно изменить, но обеспечить использование только диапазона IP класса. После запуска приложения вы можете увидеть этот IP 230.0.0.1. Также как ниже введите описание изображения здесь

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

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

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