Настройка репликации 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)
Что будет полезно, если вам нужно настроить ручной процесс обнаружения сверстников.