2013-01-14 33 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也是如此。它们应该比最长的发现阶段更高更高

相关问题