Datastax Cassandra Driver总是尝试连接到localhost,即使它没有配置为这样做

时间:2016-07-07 20:46:26

标签: scala datastax-java-driver

所以我有以下客户端代码:

def getCluster:Session = {
    import collection.JavaConversions._
    val endpoints = config.getStringList("cassandra.server")
    val keyspace = config.getString("cassandra.keyspace")

    val clusterBuilder = Cluster.builder

    endpoints.toTraversable.map { x =>
      clusterBuilder.addContactPoint(x)
    }
    val cluster = clusterBuilder.build
    cluster
      .getConfiguration
      .getProtocolOptions
      .setCompression(ProtocolOptions.Compression.LZ4)
    cluster.connect(keyspace)}

从datastax的驱动程序文档中的示例中无耻地借用。

当我尝试用它执行代码时,它总是尝试连接到localhost,即使它没有为此配置...

在某些情况下,它将连接(基本读取)但是对于写入,我得到以下日志消息:

 2016-07-07 11:34:31 DEBUG Connection:157 - Connection[/127.0.0.1:9042-10, inFlight=0, closed=false] Error connecting to /127.0.0.1:9042 (Connection refused: /127.0.0.1:9042)
2016-07-07 11:34:31 DEBUG STATES:404 - Defuncting Connection[/127.0.0.1:9042-10, inFlight=0, closed=false] because: [/127.0.0.1] Cannot connect
2016-07-07 11:34:31 DEBUG STATES:108 - [/127.0.0.1:9042] Connection[/127.0.0.1:9042-10, inFlight=0, closed=false] failed, remaining = 0
2016-07-07 11:34:31 DEBUG Connection:629 - Connection[/127.0.0.1:9042-10, inFlight=0, closed=true] closing connection
2016-07-07 11:34:31 DEBUG Cluster:1802 - Aborting onDown because a reconnection is running on DOWN host /127.0.0.1:9042
2016-07-07 11:34:31 DEBUG Cluster:1872 - Failed reconnection to /127.0.0.1:9042 ([/127.0.0.1] Cannot connect), scheduling retry in 512000 milliseconds
2016-07-07 11:34:31 DEBUG STATES:196 - [/127.0.0.1:9042] next reconnection attempt in 512000 ms

我无法弄清楚我需要在驱动程序端配置的位置/内容(没有本地客户端,只是驱动程序)才能解决此问题

1 个答案:

答案 0 :(得分:1)

我的猜测是,这是由cassandra节点上cassandra.yaml文件的配置引起的。影响此问题的两个主要设置是broadcast_rpc_addressrpc_address,来自The cassandra.yaml configuration参考:

  

broadcast_rpc_address

     

(默认值:未设置)要广播到驱动程序和其他Cassandra节点的RPC地址。这不能设置为0.0.0.0。如果为空,则将其设置为rpc_address或rpc_interface的值。如果rpc_address或rpc_interfaceis设置为0.0.0.0,则必须设置此属性。

     

rpc_address

     

(默认值:localhost)客户端连接的侦听地址(Thrift RPC服务和本机传输)。

如果您将这两个都保留为默认值,localhost将成为cassandra将进行通信以连接的默认地址。

在驱动程序能够连接到联系点之后,它会查询联系点的system.localsystem.peers表以确定要连接的主机,这些表通信的地址来自{ {1}} / rpc_address