【问题标题】:Cassandra CQL driver implementationCassandra CQL 驱动程序实现
【发布时间】:2015-08-06 08:42:33
【问题描述】:

我使用 Cassandra CQL 驱动程序来实现一些模块。我知道 CQL 驱动程序在端口 9042 上工作。我的模块在 cassandra 服务器的端口 9042 上工作正常(本地和远程都试过)。然而,由于数据中心的一些限制,9042 端口并未对 Cassandra 开放。我需要让我的应用程序在这个数据中心上运行。

我们可以在端口 9160 上以某种方式使用相同的代码吗?我知道 9160 是节俭端口,用于 Cassandra 的许多其他驱动程序。我只是想知道是否有任何 hack 可以使 CQL 驱动程序在 9160 上工作或尽可能少地修改代码以使其在 9160 上工作。

目前,当我尝试对端口 9160 使用相同的代码时,会出现以下错误

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s)  tried for query failed (tried: xx.yy.zz.aa        (com.datastax.driver.core.ConnectionException:  [xx.yy.zz.aa :9160] Unexpected   error during   transport initialization 
(com.datastax.driver.core.ConnectionException:   [xx.yy.zz.aa :9160] Operation timed out)),         xx.yy.zz.aa :9160 

当我尝试 telnet 9160 端口时

telnet xx.yy.zz.aa 9160
Trying xx.yy.zz.aa...
Connected to xx.yy.zz.aa.
Escape character is '^]'.
xyzaaaa
Connection closed by foreign host.

寻求帮助。

【问题讨论】:

    标签: java cassandra cql drivers nosql


    【解决方案1】:

    您可以通过将 cassandra 服务器上 cassandra.yaml 中的 native_transport_port 从 9042 更改为 9160 来使 CQL 接口在端口 9160 上可用。您还需要将 rpc_port 更改为 9160 以外的其他值。

    在 datastax java-driver 中,您可以使用 withPort 方法配置要在 Cluster.Builder 中使用的端口。

    【讨论】:

    • 感谢安迪的回复。我同意,如果我们进行此更改,我的应用程序将开始在 9160 端口上运行。但问题是,如果我们将 rpc_port 从 9160 更改为其他端口,那么已经部署并使用旧 cassandra 驱动程序的现有应用程序将中断,因为端口会发生变化。还有其他建议吗?
    • 不幸的是,您将需要两个独立的端口,一个用于 thrift,一个用于本地传输 (CQL),它们不能共享。您可以通过 Thrift 执行 CQL,但大多数驱动程序不支持这一点,并且在通过 thrift 执行时,您也会失去 CQL 的好处(即每个连接多个请求)。
    猜你喜欢
    • 2012-08-05
    • 2016-11-14
    • 2017-06-25
    • 2018-04-21
    • 2017-05-25
    • 2017-08-12
    • 1970-01-01
    • 2013-03-02
    • 2016-11-29
    相关资源
    最近更新 更多