[jgroups-users] problem with cluster merge after startup user error
Questions/problems related to using JGroups <[email protected]> Thu, 5 Apr 2018 16:14:15 -0400
| Newsgroups | gmane.comp.java.javagroups.general |
|---|---|
| Message-ID | <mailman.53066.1522960713.919.javagroups-users@lists.sourceforge.net> |
Hi all,
Using JGroups 4.0.8.Final and a tcp-based stack (code to generate it
below), we have an issue when a user starts the 2nd node with some wrong
info. I bet you know where I'm going with this, but we start A and it has
B's ip:port in initial_hosts. Since B isn't running we have a 1-node
cluster A.
Then someone starts B but has the wrong port for A in initial_hosts. So it
doesn't find A and we have two 1-node clusters. After some time (~50 to 90
seconds), A sends a discovery request again and finds B, and they end up
merging.
This causes some problems for us because B doesn't perform non-coordinator
tasks that should have happened at startup, and it could be very confusing
to users to try to debug why they don't have an A/B cluster and suddenly
they do. Also sometimes B becomes the coordinator, which could affect
starting other nodes. (Either way, they both have incorrect copies of the
cluster state shared with STATE_TRANSFER.)
Do you have a suggested way to change our setup so that, once A and B start
and don't find each other, they stay that way?
Thanks,
Bobby
Our channel creation code:
List<Protocol> stack = new ArrayList<>();
stack.add(new TCP()
.setValue("bind_addr", InetAddress.getByName(<our address set
by user>))
.setValue("bind_port", bindingPort)
.setValue("thread_pool_min_threads", 1)
.setValue("thread_pool_keep_alive_time", 5000)
.setValue("send_buf_size", 640000)
.setValue("sock_conn_timeout", 300)
.setValue("recv_buf_size", 5000000));
stack.add(new TCPPING()
.setValue("initial_hosts", <get hosts set by user>)
.setValue("send_cache_on_join", true)
.setValue("port_range", 0)); }
stack.add(new MERGE3()
.setValue("min_interval", 10000)
.setValue("max_interval", 30000));
stack.add(new FD_ALL()
.setValue("timeout", getJGroupsTotalTimeout() * 1000L));
stack.add(new VERIFY_SUSPECT()
.setValue("timeout", 1500));
stack.add(new BARRIER());
stack.add(new NAKACK2()
.setValue("use_mcast_xmit", false));
stack.add(new UNICAST3());
stack.add(new STABLE()
.setValue("desired_avg_gossip", 50000)
.setValue("max_bytes", 4000000));
stack.add(<custom auth protocol>);
stack.add(new GMS()
.setValue("join_timeout", 3000));
stack.add(new MFC()
.setValue("max_credits", 2000000)
.setValue("min_credits", 800000));
stack.add(new FRAG2());
stack.add(new STATE_TRANSFER());
return new JChannel(stack);
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
javagroups-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/javagroups-users