【问题标题】:Hazelcast: connecting to remote clusterHazelcast:连接到远程集群
【发布时间】:2015-09-02 04:51:07
【问题描述】:

我们有一个 Hazelcast 节点集群,它们都在一个远程系统上运行(具有许多节点的单个物理系统)。我们想从一个外部客户端连接到这个集群 - 一个使用以下代码连接到 Hazelcast 的 Java 应用程序:

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

        client = HazelcastClient.newHazelcastClient(clientConfig);

其中,host是远程的IP,端口是5701。

这仍然连接到本地主机 (127.0.0.1)。我错过了什么?

编辑:

如果java客户端是本地系统上唯一运行的hazelcast app,则连接失败并抛出异常:java.lang.IllegalStateException: Cannot get initial partitions!

来自日志:

14:58:26.717 [main] 信息 c.m.b.p.s.s.HazelcastCacheClient - 创建 新的 Hazelcast 实例

14:58:26.748 [main] 信息 com.hazelcast.core.LifecycleService - HazelcastClient[hz.client_0_dev][3.2.1] 正在启动

14:58:27.029 [main] 信息 com.hazelcast.core.LifecycleService - HazelcastClient[hz.client_0_dev][3.2.1] 已启动

14:58:27.061 [hz.client_0_dev.cluster-listener] 信息 com.hazelcast.core.LifecycleService - HazelcastClient[hz.client_0_dev][3.2.1] 是 CLIENT_CONNECTED

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

成员 [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] 错误 c.h.c.spi.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(Unknown Source) ~[na:1.8.0_31]

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

...省略了 14 个常用帧

引起:com.hazelcast.core.HazelcastException: java.net.ConnectException:连接被拒绝:没有更多信息

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

【问题讨论】:

  • 请分享您的配置文件
  • 没有配置文件。 config 这里是一个内部类。主机和端口作为命令行参数传递给 java 客户端。
  • 您是否尝试对地址进行编码?它仍然连接到本地主机吗?
  • 如果客户端的应用程序先启动,总是失败。
  • 服务器已经在运行。接下来启动客户端。

标签: java hazelcast


【解决方案1】:

你可以试试:

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

【讨论】:

  • 这听起来像你有防火墙问题
  • 所有都在公司局域网内的一个网络中。我可以远程登录到目标主机端口。
  • 这很奇怪。你能测试一个像今天发布的3.5这样的新版本吗?服务器和客户端是否使用相同的版本?
  • 应该设置哪些集群以允许远程连接?例如,如果远程集群启用了 127.0.0.1 或固定 IP 的 tcp-ip,它是否允许任何远程客户端连接?从逻辑上讲,它不应该,不是吗?否则会带来安全风险。
  • 配置的 IP 仅用于请求比较,如果传入的 IP 与预配置的 IP 不匹配,则连接被拒绝。为防止监听其他 IP,您需要将属性“hazelcast.socket.bind.any”设置为 false。
【解决方案2】:

要连接到远程集群,请确保集群使用外部 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>

【讨论】:

    【解决方案3】:

    如果您想连接到多个 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);
    

    【讨论】:

      猜你喜欢
      • 2018-07-01
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 2022-11-21
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多