Hazelcast 在运行时添加成员

Hazelcast add members at runtime

我创建了一个集群

private static final String IP_CLUSTER = "192.168.0.116:5701";

Config cfg = new Config();
// set IP of cluster
cfg.getNetworkConfig().getJoin().getTcpIpConfig().addMember(IP_CLUSTER).setEnabled(true);
cfg.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);    
HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);

现在我尝试使用 hazelcast-client 连接这个集群

HazelcastInstance clientInstance = null;
try {
    ClientConfig cfg = new ClientConfig();
    ClientNetworkConfig cnc = cfg.getNetworkConfig();
    // ip of cluster that i want to connect
    cnc.addAddress(IP_CLUSTER);
    clientInstance = HazelcastClient.newHazelcastClient(cfg);
}
catch (Exception e) {
    return;
}

当我尝试连接客户端时,我在输出后成为客户端

Jun 19, 2017 8:19:51 PM com.hazelcast.core.LifecycleService INFORMATION: [192.168.0.116]:5701 [dev] [3.7.8] [192.168.0.116]:5701 is STARTED Jun 19, 2017 8:19:56 PM com.hazelcast.nio.tcp.SocketAcceptorThread INFORMATION: [192.168.0.116]:5701 [dev] [3.7.8] Accepting socket connection from /192.168.0.116:60200 Jun 19, 2017 8:19:56 PM com.hazelcast.nio.tcp.TcpIpConnectionManager INFORMATION: [192.168.0.116]:5701 [dev] [3.7.8] Established socket connection between /192.168.0.116:5701 and /192.168.0.116:60200 Jun 19, 2017 8:19:56 PM com.hazelcast.client.impl.protocol.task.AuthenticationMessageTask INFORMATION: [192.168.0.116]:5701 [dev] [3.7.8] Received auth from Connection[id=1, /192.168.0.116:5701->/192.168.0.116:60200, endpoint=null, alive=true, type=JAVA_CLIENT], successfully authenticated, principal : ClientPrincipal{uuid='adaf4c23-a708-489b-9480-dfc7edf960ce', ownerUuid='02d591cc-b572-4e6e-8904-92bd0d8c3610'}, owner connection : true, client version : 3.7.8 Jun 19, 2017 8:20:07 PM com.hazelcast.internal.partition.impl.PartitionStateManager INFORMATION: [192.168.0.116]:5701 [dev] [3.7.8] Initializing cluster partition table arrangement...

表示-> 新成员已连接到集群。正确吗?

但是当我询问集群中的成员数量时,它总是 1

我哪里搞错了? 如何添加新成员(HazelcastInstances)到集群?

正如您自己提到的,您将 Hazelcast 客户端连接到(单节点)集群。客户端只是客户端而不是集群节点。将其想象成连接到数据库的 JDBC 客户端。要扩展集群,您需要启动额外的 Hazelcast 成员。

HazelcastInstance hz = Hazelcast.newHazelcastInstance(); // <- creates nodes

HazelcastInstance client = HazelcastClient.newHazelcastClient(); // <- creates a client

理解起来真的很奇怪,但是多次执行

private static final String IP_CLUSTER = "192.168.0.116:5701";

Config cfg = new Config();
// set IP of cluster
cfg.getNetworkConfig().getJoin().getTcpIpConfig().addMember(IP_CLUSTER).setEnabled(true);
cfg.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);    
HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);

会有:

  • 第一次执行 - 创建一个集群并向其中添加一个节点
  • 每次下一次执行 - 向现有集群添加一个节点