当TCPPING.initialHost包含多个主机时,Infinispan / JGroups群集连接失败

时间:2013-01-14 15:42:12

标签: java infinispan jgroups

我正在尝试使用TCP传输配置Infinispan。

如果在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;

1 个答案:

答案 0 :(得分:4)

可能发现阶段需要太长时间,因为JGroups尝试建立与15个主机的连接,并且只有2-3个存活。我建议将TCP.scok_conn_timeout设置为一个较低的值(200?),以便我们从连接返回到最大200ms后关闭的主机。 可能需要增加GMS.join_timeout,以及TCPPING.timeout。它们应该更高而不是最长的发现阶段。