2012-11-09 6 views
6

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?

Odpowiedz

6

Masz dwa kanały JGroups uruchamiane, więc dwie konfiguracje JGroups określają: jedną dla Infinispan i jedną dla komunikacji z zapleczem technicznym.

Zarówno Infinispan, jak i jgroupsMaster zamierzają użyć swoich domyślnych ustawień konfiguracyjnych, chyba że je określisz, ale ustawienia domyślne używają multiemisji, która nie działa w EC2.

Wydaje masz prawidłową konfigurację konfiguracji indeksu Infinispan, ale trzeba przekonfigurować jgroupsMaster pracownikowi również użyć S3_PING lub JDBC_PING; prawdopodobnie działa on lokalnie, ponieważ domyślna konfiguracja jest w stanie wykryć automatycznie komputery równorzędne za pomocą multiemisji.

To powielenie zostanie rozwiązane przez HSEARCH-882, nie mogę się doczekać, aby znacznie uprościć konfigurację.

+1

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

+0

Bardzo się cieszę, że to słyszę! – Sanne

Powiązane problemy