Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hazelcast: connecting to remote cluster

Tags:

java

hazelcast

We have a cluster of Hazelcast nodes all running on one remote system (single physical system with many nodes). We would like to connect to this cluster from an external client - a Java application which uses code as below to connect to Hazelcast:

        ClientConfig clientConfig = new ClientConfig();
        clientConfig.addAddress(config.getHost() + ":" + config.getPort());

        client = HazelcastClient.newHazelcastClient(clientConfig);

where, host is the IP of remote and port is 5701.

This still connects to the local host (127.0.0.1). What am I missing?

Edit:

If the java client is the only hazelcast app running on the local system, it fails to connect and throws the exception: java.lang.IllegalStateException: Cannot get initial partitions!

From the logs:

14:58:26.717 [main] INFO c.m.b.p.s.s.HazelcastCacheClient - creating new Hazelcast instance

14:58:26.748 [main] INFO com.hazelcast.core.LifecycleService - HazelcastClient[hz.client_0_dev][3.2.1] is STARTING

14:58:27.029 [main] INFO com.hazelcast.core.LifecycleService - HazelcastClient[hz.client_0_dev][3.2.1] is STARTED

14:58:27.061 [hz.client_0_dev.cluster-listener] INFO com.hazelcast.core.LifecycleService - HazelcastClient[hz.client_0_dev][3.2.1] is CLIENT_CONNECTED

14:58:27.061 [hz.client_0_dev.cluster-listener] INFO c.h.client.spi.ClientClusterService -

Members [5] { Member [127.0.0.1]:5701 Member [127.0.0.1]:5702 Member [127.0.0.1]:5703 Member [127.0.0.1]:5704 Member [127.0.0.1]:5705 }

14:58:47.278 [main] ERROR c.h.c.spi.ClientPartitionService - Error while fetching cluster partition table!

com.hazelcast.spi.exception.RetryableIOException: java.util.concurrent.ExecutionException: com.hazelcast.core.HazelcastException: java.net.ConnectException: Connection refused: no further information ... Caused by: java.util.concurrent.ExecutionException: com.hazelcast.core.HazelcastException: java.net.ConnectException: Connection refused: no further information

at java.util.concurrent.FutureTask.report(Unknown Source) ~[na:1.8.0_31]

at java.util.concurrent.FutureTask.get(Unknown Source) ~[na:1.8.0_31]

at com.hazelcast.client.connection.nio.ClientConnectionManagerImpl.getOrConnect(ClientConnectionManagerImpl.java:282) ~[BRBASE-service-manager-1.0.0-jar-with-dependencies.jar:na]

... 14 common frames omitted

Caused by: com.hazelcast.core.HazelcastException: java.net.ConnectException: Connection refused: no further information

at com.hazelcast.util.ExceptionUtil.rethrow(ExceptionUtil.java:45) ~[BRBASE-service-manager-1.0.0-jar-with-dependencies.jar:na] ...

like image 809
gammay Avatar asked Jun 17 '15 05:06

gammay


People also ask

How do I connect to a Hazelcast cluster remote?

getHost() + ":" + config. getPort()); client = HazelcastClient. newHazelcastClient(clientConfig); where, host is the IP of remote and port is 5701.

How does Hazelcast cluster work?

Hazelcast is designed to scale up to hundreds and thousands of members. Simply add new members; they automatically discover the cluster and linearly increase both the memory and processing capacity. The members maintain a TCP connection between each other and all communication is performed through this layer.

How do I monitor a Hazelcast cluster?

Monitoring Hazelcast via REST API To monitor health of the cluster or member state via REST API, one has to enable REST API based communication to the members. This can be done by configuration and also programmatically. This displays that there is 1 member in our cluster and it is Active.


Video Answer


1 Answers

To connect to the remote cluster, make sure the cluster uses the external IP and not 127.0.0.1. In our case we have a single physical system, with multiple nodes, with tcp-ip mode enabled. The hazelcast.xml has the configuration:

<tcp-ip enabled="true">
    <!-- This should be external IP -->
    <interface>172.x.x.x</interface>
</tcp-ip>
like image 90
gammay Avatar answered Sep 26 '22 11:09

gammay