连接到部署在gcp上的cassandra集群

nzk0hqpo  于 2021-06-15  发布在  Cassandra
关注(0)|答案(2)|浏览(395)

我在kubernetes的gcp上运行了一个3节点集群。我能够转发端口并使用我的db工具连接到群集:

$ kubectl port-forward elassandra-0 9042

当我尝试从spring boot应用程序连接到cassandra群集时,出现以下错误:

2018-11-14 17:43:36,339 INFO  [5914] [localhost-startStop-1] c.d.d.c.Cluster [Cluster.java:1587] New Cassandra host /10.4.3.3:9042 added
2018-11-14 17:43:36,339 INFO  [5914] [localhost-startStop-1] c.d.d.c.Cluster [Cluster.java:1587] New Cassandra host /10.4.2.4:9042 added
2018-11-14 17:43:36,340 INFO  [5915] [localhost-startStop-1] c.d.d.c.Cluster [Cluster.java:1587] New Cassandra host /127.0.0.1:9042 added
2018-11-14 17:43:41,391 WARN  [10966] [cluster1-nio-worker-2] c.d.d.c.HostConnectionPool [HostConnectionPool.java:184] Error creating connection to /10.4.2.4:9042

com.datastax.driver.core.exceptions.TransportException: [/10.4.2.4:9042] Cannot connect
at com.datastax.driver.core.Connection$1.operationComplete(Connection.java:167)
at com.datastax.driver.core.Connection$1.operationComplete(Connection.java:150)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:511)
at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:504)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:483)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:424)
at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:121)

我正在尝试连接到 127.0.0.1:9042 ,其他主机被spring数据框架从集群中拉出来。
我做错什么了?
谢谢。

sg3maiej

sg3maiej1#

回答自己的问题:
您需要指定自定义地址解析驱动程序端,如下所述:
https://docs.datastax.com/en/developer/java-driver/2.1/manual/address_resolution/
当您只想使用一个节点时,请详细说明:

public class MyAdressTranslator implements AddressTranslator {
    @Override
    public void init(Cluster cluster) {}

    public InetSocketAddress translate(InetSocketAddress address) {
        return new InetSocketAddress("127.0.0.1", 9042);
    }

    @Override
    public void close() {}
}
z4iuyo4d

z4iuyo4d2#

要添加更多详细信息,因为您启用了自动地址解析,您的客户端正在尝试向群集中的所有节点添加联系人:

10.4.3.3:9042
10.4.2.4:9042
127.0.0.1:9042

但是,无法从localhost中找到前2个节点,因为它们没有被代理。如果你将它们添加为代理,它也不会工作,因为你不能从你的笔记本电脑在同一个端口上代理。像@alextbk这样的解决方案提到的是使用一个单一的联系点,但是在客户机上用单一的联系点指定地址解析 127.0.0.1:9042 联络点。

相关问题