2012-11-09 16 views
6

Ich versuche Hibernate Search zu verwenden, so dass alle Schreibvorgänge in den Lucene-Index von jgroupsSlave-Knoten an den jgroupsMaster-Knoten gesendet werden und der Lucene-Index dann wieder an den Sklaven mit Infinispan. Alles funktioniert lokal, aber während sich die Knoten auf EC2 gegenseitig entdecken, scheinen sie nicht miteinander zu kommunizieren.JGroups-Knoten auf EC2 sprechen nicht, obwohl sie sich sehen

Sie senden sich gegenseitig "are-you-alive" -Meldungen.

# 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 

Sicherheitsgruppen

Ich habe zwei Gläser, eines für Master und eines für Slave, dass ich auf ihre eigenen EC2-Instanzen leite. Ich kann jede Instanz pingen, von der anderen, und sie sind beide in der gleichen Sicherheitsgruppe, die die folgenden Regeln für die Kommunikation zwischen Maschinen in meiner Gruppe definiert.

alle Ports für ICMP 0-65535 für TCP 0-65535 für UDP

Also ich glaube nicht, dass es eine Sicherheitsgruppe Konfigurationsproblem ist.

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> 

Ich habe das direkt aus der letzten Infinispan-Core-Distribution kopiert (5.2.0.Beta3, aber ich habe auch die 5.1.4 ausprobiert, die ich glaube). Die einzige Sache, die ich änderte, war ihre s3_ping durch meine zu ersetzen, aber wieder sehe ich, wie die Knoten auf s3 schreiben, und sie finden sich gegenseitig, also glaube ich nicht, dass das das Problem ist. Ich starte auch Master/Slave mit ihrer Umgebung vars für jgroups.tcp.address auf ihre private IP-Adresse gesetzt. Ich habe auch ein paar Konfigurationen ausprobiert, die ohne Erfolg sehr vereinfacht wurden.

Irgendwelche Ideen, was das Problem sein könnte? Ich habe ein paar Tage damit verbracht, damit herumzuspielen, und es macht mich verrückt. Ich denke es muss etwas mit der jgroups config sein, da es lokal funktioniert und einfach nicht auf EC2 sprechen kann.

Irgendwelche anderen Informationen, die Sie helfen möchten, um das herauszufinden?

Antwort

6

Sie haben zwei JGroups Kanäle gestartet werden, so dass zwei JGroups Konfigurationen zu spezifizieren: ein für Infinispan und ein für die Back-End-Arbeiter Kommunikation.

Sowohl Infinispan und die jgroupsMaster werden ihre Standardkonfigurationseinstellungen verwenden, wenn Sie eine angeben, aber die Standardeinstellungen verwenden Multicast, die nicht auf EC2 funktioniert.

Es scheint, dass Sie eine korrekte Konfiguration Setup für den Infinispan Index haben, aber Sie haben die jgroupsMaster Arbeiter neu zu konfigurieren, um auch S3_PING oder JDBC_PING zu verwenden; Es funktioniert wahrscheinlich lokal für Sie, da die Standardkonfiguration Peers mithilfe von Multicast automatisch erkennen kann.

Diese Vervielfältigung wird von HSEARCH-882 gelöst, ich freue mich darauf, die Konfiguration erheblich zu vereinfachen.

+1

Wenn es möglich wäre, Sie über das Internet zu küssen, würde ich. Es war so einfach wie "hibernate.search.services.jgroups.configurationFile = jgroups-ec2.xml" in meine hibernate.properties-Dateien zu schreiben. Es funktionierte basierend auf meiner Ausgabe, aber ich konnte auch sagen, dass es funktionierte, weil ein zweiter Ordner auf S3 erstellt wurde, der in vorherigen Läufen nicht existierte. Danke noch einmal! – dustincg

+0

Ich bin sehr froh, das zu hören! – Sanne