2015-06-17 121 views
3

我們有一個Hazelcast節點集羣,它們都運行在一個遠程系統(具有多個節點的單個物理系統)上。我們想從外部客戶端連接到該集羣 - 它使用的代碼如下連接到Hazelcast Java應用程序:Hazelcast:連接到遠程羣集

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

     client = HazelcastClient.newHazelcastClient(clientConfig); 

其中,主機是遠程的IP和端口是5701

這仍然連接到本地主機(127.0.0.1)。我錯過了什麼?

編輯:

如果Java客戶端是在本地系統上運行的唯一hazelcast應用程序,連接失敗,並引發異常:java.lang.IllegalStateException: Cannot get initial partitions!

從日誌:

14:58:26.717 [main] INFO cmbpssHazelcastCacheClient - 創建 新的Hazelcast實例

14:58:26.748 [主要] INFO com.hazelcast.core.LifecycleService - HazelcastClient [hz.client_0_dev] [3.2.1]已經開始

14:58:27.029 [主要] INFO com.hazelcast.core .LifecycleService - HazelcastClient [hz.client_0_dev] [3.2.1]開始

14:58:27.061 [hz.client_0_dev.cluster偵聽] INFO com.hazelcast.core.LifecycleService - HazelcastClient [赫茲。 client_0_dev] [3.2.1] is CLIENT_CONNECTED

14:58:27.061 [hz.client_0_dev.cluster-listener]信息 chclient.spi.Client ClusterService -

成員[5] {會員[127.0.0.1]:5701會員[127.0.0.1]:5702 會員[127.0.0.1]:5703會員[127.0.0.1]:5704會員 [127.0.0.1 ]:5705}

14:58:47.278 [main]錯誤chcspi.ClientPartitionService - 錯誤 獲取羣集分區表時!

com.hazelcast.spi.exception.RetryableIOException: java.util.concurrent.ExecutionException: com.hazelcast.core.HazelcastException:java.net.ConnectException: 連接被拒絕:沒有進一步的信息...所致: java.util.concurrent.ExecutionException: com.hazelcast.core.HazelcastException:java.net.ConnectException: 連接被拒絕:沒有進一步的信息

在java.util.concurrent.FutureTask.report(未知來源) 〜[na:1.8.0_31]

在java.util.concurrent.FutureTask.get(未知來源)〜[NA:1.8.0_31]

在 com.hazelcast.client.connection.nio.ClientConnectionManagerImpl.getOrConnect(ClientConnectionManagerImpl.java:282) 〜[BRBASE-service-manager-1.0.0-jar -with-dependencies。罐子:NA]

... 14共同幀省略

所致:com.hazelcast.core.HazelcastException: java.net.ConnectException:連接被拒絕:沒有進一步的信息

在COM。 hazelcast.util.ExceptionUtil.rethrow(ExceptionUtil.java:45) 〜[BRBASE服務經理-1.0.0-JAR-與-dependencies.jar:NA] ...

+0

請分享您的配置文件 – Abhishek

+0

沒有配置文件。這裏的'config'是一個內部類。主機和端口作爲命令行參數傳遞給java客戶端。 – gammay

+0

你試過對地址進行編碼嗎? 它仍然連接到本地主機。 – Abhishek

回答

3

要連接到遠程羣集,請確保羣集使用外部IP而不是127.0.0.1。在我們的例子中,我們有一個物理系統,有多個節點,啓用tcp-ip模式。該hazelcast.xml具有配置:

 <tcp-ip enabled="true"> 
      <!-- This should be external IP --> 
      <interface>172.x.x.x</interface> 
     </tcp-ip> 
1

你可以試試:

ClientConfig config = new ClientConfig(); 
config.getNetworkConfig().addAddress(host + ":" + port); 
HazelcastInstance instance = HazelcastClient.newHazelcastClient(config); 
+0

相同的行爲。請參閱編輯。 – gammay

+0

這聽起來像你有一個防火牆問題 – noctarius

+0

所有的都在公司局域網內的一個網絡中,我可以telnet到目標主機端口 – gammay

0

如果你想連接到多個IP的運行Hazelcast簇下方添加到您的客戶端配置,然後實例的客戶端。

//configure client properties 
    ClientConfig config = new ClientConfig(); 
    String[] addresses = {"172.20.250.118" + ":" + "5701","172.20.250.49" + ":" + "5701"}; 
    config.getNetworkConfig().addAddress(addresses); 

    //start Hazelcast client 
    HazelcastInstance hazelcastInstance = HazelcastClient.newHazelcastClient(config);