Próbuję użyć wyszukiwania w trybie hibernacji, aby wszystkie zapisy do indeksu Lucene z węzłów jgroupsSlave były wysyłane do węzła jgroupsMaster, a następnie indeks Lucene jest udostępniany z powrotem do niewolnicy z Infinispan. Wszystko działa lokalnie, ale gdy węzły odkrywają się nawzajem na EC2, nie wydają się komunikować.Węzły JGroups w EC2 nie mówią, chociaż widzą się nawzajem
Oboje przesyłają sobie nawzajem wiadomości o życiu.
# master output sample
86522 [LockBreakingService,localCache,archlinux-37498] DEBUG org.infinispan.transaction.TransactionTable - About to cleanup completed transaction. Initial size is 0
86523 [LockBreakingService,LuceneIndexesLocking,archlinux-37498] DEBUG org.infinispan.transaction.TransactionTable - About to cleanup completed transaction. Initial size is 0
87449 [Timer-4,luceneCluster,archlinux-37498] DEBUG org.jgroups.protocols.FD - sending are-you-alive msg to archlinux-57950 (own address=archlinux-37498)
87522 [LockBreakingService,localCache,archlinux-37498] DEBUG org.infinispan.transaction.TransactionTable - About to cleanup completed transaction. Initial size is 0
87523 [LockBreakingService,LuceneIndexesLocking,archlinux-37498] DEBUG org.infinispan.transaction.TransactionTable - About to cleanup completed transaction. Initial size is 0
# slave output sample
85499 [LockBreakingService,localCache,archlinux-57950] DEBUG org.infinispan.transaction.TransactionTable - About to cleanup completed transaction. Initial size is 0
85503 [LockBreakingService,LuceneIndexesLocking,archlinux-57950] DEBUG org.infinispan.transaction.TransactionTable - About to cleanup completed transaction. Initial size is 0
86190 [Timer-3,luceneCluster,archlinux-57950] DEBUG org.jgroups.protocols.FD - sending are-you-alive msg to archlinux-37498 (own address=archlinux-57950)
86499 [LockBreakingService,localCache,archlinux-57950] DEBUG org.infinispan.transaction.TransactionTable - About to cleanup completed transaction. Initial size is 0
86503 [LockBreakingService,LuceneIndexesLocking,archlinux-57950] DEBUG org.infinispan.transaction.TransactionTable - About to cleanup completed transaction. Initial size is 0
grup zabezpieczeń
Mam dwa słoiki, jeden dla pana i jeden dla niewolnika, który używam na własnych instancji EC2. Mogę pingować każdą instancję, z drugiej strony, i obie znajdują się w tej samej grupie zabezpieczeń, która definiuje następujące reguły komunikacji między dowolnymi maszynami w mojej grupie.
wszystkie porty dla ICMP 0-65535 dla TCP 0-65535 dla UDP
Więc nie sądzę, że jest to problem z konfiguracją grupy zabezpieczeń.
hibernate.properties
# there is also a corresponding jgroupsSlave
hibernate.search.default.worker.backend=jgroupsMaster
hibernate.search.default.directory_provider = infinispan
hibernate.search.infinispan.configuration_resourcename=infinispan.xml
hibernate.search.default.data_cachename=localCache
hibernate.search.default.metadata_cachename=localCache
infinispan.xml
<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:config:5.1 http://www.infinispan.org/schemas/infinispan-config-5.1.xsd"
xmlns="urn:infinispan:config:5.1">
<global>
<transport clusterName="luceneCluster" transportClass="org.infinispan.remoting.transport.jgroups.JGroupsTransport">
<properties>
<property name="configurationFile" value="jgroups-ec2.xml" />
</properties>
</transport>
</global>
<default>
<invocationBatching enabled="true" />
<clustering mode="repl">
</clustering>
</default>
<!-- this is just so that each machine doesn't have to store the index
in memory -->
<namedCache name="localCache">
<loaders passivation="false" preload="true" shared="false">
<loader class="org.infinispan.loaders.file.FileCacheStore" fetchPersistentState="true" ignoreModifications="false" purgeOnStartup="false">
<properties>
<property name="location" value="/tmp/infinspan/master" />
<!-- there is a corresponding /tmp/infinispan/slave in
the slave config -->
</properties>
</loader>
</loaders>
</namedCache>
</infinispan>
JGroups-ec2.xml
<config xmlns="urn:org:jgroups" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/JGroups-3.2.xsd">
<TCP
bind_addr="${jgroups.tcp.address:127.0.0.1}"
bind_port="${jgroups.tcp.port:7800}"
loopback="true"
port_range="30"
recv_buf_size="20000000"
send_buf_size="640000"
max_bundle_size="64000"
max_bundle_timeout="30"
enable_bundling="true"
use_send_queues="true"
sock_conn_timeout="300"
enable_diagnostics="false"
bundler_type="old"
thread_pool.enabled="true"
thread_pool.min_threads="2"
thread_pool.max_threads="30"
thread_pool.keep_alive_time="60000"
thread_pool.queue_enabled="false"
thread_pool.queue_max_size="100"
thread_pool.rejection_policy="Discard"
oob_thread_pool.enabled="true"
oob_thread_pool.min_threads="2"
oob_thread_pool.max_threads="30"
oob_thread_pool.keep_alive_time="60000"
oob_thread_pool.queue_enabled="false"
oob_thread_pool.queue_max_size="100"
oob_thread_pool.rejection_policy="Discard"
/>
<S3_PING secret_access_key="removed_for_stackoverflow" access_key="removed_for_stackoverflow" location="jgroups_ping" />
<MERGE2 max_interval="30000"
min_interval="10000"/>
<FD_SOCK/>
<FD timeout="3000" max_tries="3"/>
<VERIFY_SUSPECT timeout="1500"/>
<pbcast.NAKACK2
use_mcast_xmit="false"
xmit_interval="1000"
xmit_table_num_rows="100"
xmit_table_msgs_per_row="10000"
xmit_table_max_compaction_time="10000"
max_msg_batch_size="100"
become_server_queue_size="0"/>
<UNICAST2
max_bytes="20M"
xmit_table_num_rows="20"
xmit_table_msgs_per_row="10000"
xmit_table_max_compaction_time="10000"
max_msg_batch_size="100"/>
<RSVP />
<pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
max_bytes="400000"/>
<pbcast.GMS print_local_addr="false" join_timeout="7000" view_bundling="true"/>
<UFC max_credits="2000000" min_threshold="0.10"/>
<MFC max_credits="2000000" min_threshold="0.10"/>
<FRAG2 frag_size="60000"/>
</config>
Skopiowałem to bezpośrednio z najnowszej dystrybucji rdzenia infinispan (5.2.0.Beta3, ale próbowałem też 5.1.4, jak sądzę). Jedyne, co zmieniłem, to zastąpienie ich s3_ping moim, ale znowu widzę, jak węzły piszą do s3, i znajdują siebie nawzajem, więc nie sądzę, że to jest problem. Zaczynam także od master/slave ze zmiennymi środowiskowymi dla pliku jgroups.tcp.address ustawionego na ich prywatny adres IP. Próbowałem także kilku konfiguracji, które zostały znacznie uproszczone bez powodzenia.
Jakieś pomysły na problem? Spędziłem z nim kilka dni i to doprowadza mnie do szału. Myślę, że to musi być coś z konfiguracją jgroups, ponieważ działa lokalnie i po prostu nie jest w stanie rozmawiać na EC2.
Jakieś inne informacje, które chcielibyście w tym pomóc?
Gdyby można było cię pocałować przez Internet, zrobiłbym to. Było to tak proste, jak umieszczenie "hibernate.search.services.jgroups.configurationFile = jgroups-ec2.xml" w moich plikach hibernate.properties. To działało w oparciu o moje wyniki, ale mogłem też stwierdzić, że działa, ponieważ drugi folder został utworzony na S3, który nie istniał w poprzednich przebiegach. Dzięki jeszcze raz! – dustincg
Bardzo się cieszę, że to słyszę! – Sanne