2013-01-14 32 views
1

我正在嘗試使用TCP傳輸配置Infinispan。當TCPPING.initialHost包含多個主機時,Infinispan/JGroups羣集連接失敗

如果在TCPPING.initialHosts我列出了所有潛在的集羣節點,集羣根本沒有連接 - 大約有15個潛在節點,其中大多數是死的,通常只有2或3個活着。

但是,如果在TCPPING.initialHosts我只列出2-3個主機的列表,則集羣已成功創建。

我該怎麼做?

更新:據我在日誌和堆棧跟蹤中看到的,活動節點之間的連接被創建並且節點交換一些消息。但是,羣集還沒有形成。

更新:下面是創建的代碼JChannel

JChannel ch = new JChannel(false); 
    ProtocolStack stack = new ProtocolStack(); 
    ch.setProtocolStack(stack); 

    // TCPPING is responsible for discovery 
    TCPPING tcpping = new TCPPING(); 
    List<IpAddress> initial_hosts = ... // get lists of hosts, list can be quite big 
    tcpping.setInitialHosts(initial_hosts); 
    tcpping.setErgonomics(false); 
    tcpping.setPortRange(0); 
    tcpping.setNumInitialMembers(3); 

    TCP tcp = new TCP(); 
    tcp.setBindAddress(InetAddress.getByName(server.getHostName())); 
    tcp.setBindPort(server.getPort()); 
    tcp.setThreadPoolMaxThreads(30); 
    tcp.setOOBThreadPoolMaxThreads(30); 

    NAKACK nakack = new NAKACK(); 
    nakack.setUseMcastXmit(false); 
    nakack.setDiscardDeliveredMsgs(false); 

    MERGE2 merge = new MERGE2(); 

    RSVP rsvp = new RSVP(); 
    rsvp.setValue("timeout", 60 * 1000); 
    rsvp.setValue("resend_interval", 500); 
    rsvp.setValue("ack_on_delivery", false); 

    stack 
     .addProtocol(tcp) 
     .addProtocol(tcpping) 
     .addProtocol(merge) 
     .addProtocol(new FD_SOCK()) 
     .addProtocol(new FD()) 
     .addProtocol(new VERIFY_SUSPECT()) 
     .addProtocol(nakack) 
     .addProtocol(new UNICAST2()) 
     .addProtocol(new STABLE()) 
     .addProtocol(new GMS()) 
     .addProtocol(new UFC()) 
     .addProtocol(new MFC()) 
     .addProtocol(new FRAG2()) 
     .addProtocol(rsvp); 
    stack.init(); 

    return ch; 
+0

你能不能粘貼你的jgroups配置xml? –

+0

我從代碼創建JChannel。代碼添加到帖子中。 – Tarlog

回答

4

也許發現階段花費的時間太長,如JGroups的試圖建立到15個主機的連接,其中只有2-3活着。我建議將TCP.scok_conn_timeout設置爲一個較低的值(200?),以便我們從連接返回到最多200毫秒後關閉的主機。 也許GMS.join_timeout需要增加,TCPPING.timeout也是如此。它們應該比最長的發現階段更高更高

相關問題