2015-07-20 146 views
0

我正在使用泰坦0.54和Cassandra 2.1.6。泰坦后端连接异常

我写了一个Java程序,它是能够连接到Titan和运行我的本地卡桑德拉集群上的工作负载。当我尝试在运行相同的软件在另一台机器(有自己的集群)我得到以下(含storage.backend设置为“cassandrathrift”)的错误:

Exception in thread "main" com.thinkaurelius.titan.core.TitanException: Could not execute operation due to backend exception 
    at com.thinkaurelius.titan.diskstorage.util.BackendOperation.execute(BackendOperation.java:44) 
    at com.thinkaurelius.titan.diskstorage.util.BackendOperation.execute(BackendOperation.java:144) 
    at com.thinkaurelius.titan.diskstorage.configuration.backend.KCVSConfiguration.get(KCVSConfiguration.java:92) 
    at com.thinkaurelius.titan.diskstorage.configuration.BasicConfiguration.isFrozen(BasicConfiguration.java:93) 
    at com.thinkaurelius.titan.graphdb.configuration.GraphDatabaseConfiguration.<init>(GraphDatabaseConfiguration.java:1289) 
    at com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:93) 
    at com.thinkaurelius.titan.core.TitanFactory$Builder.open(TitanFactory.java:134) 
    at com.x.tweetgraph.writer.graph.TitanConnector.getConnection(TitanConnector.java:17) 
    at com.x.tweetgraph.writer.graph.GraphManager.loadGraph(GraphManager.java:186) 
    at com.x.tweetgraph.writer.graph.GraphManager.init(GraphManager.java:99) 
    at com.x.tweetgraph.writer.graph.Main.main(Main.java:26) 
Caused by: com.thinkaurelius.titan.diskstorage.PermanentBackendException: Permanent failure in storage backend 
    at com.thinkaurelius.titan.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore.convertException(CassandraThriftKeyColumnValueStore.java:249) 
    at com.thinkaurelius.titan.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore.getNamesSlice(CassandraThriftKeyColumnValueStore.java:148) 
    at com.thinkaurelius.titan.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore.getNamesSlice(CassandraThriftKeyColumnValueStore.java:91) 
    at com.thinkaurelius.titan.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore.getSlice(CassandraThriftKeyColumnValueStore.java:80) 
    at com.thinkaurelius.titan.diskstorage.configuration.backend.KCVSConfiguration$1.call(KCVSConfiguration.java:95) 
    at com.thinkaurelius.titan.diskstorage.configuration.backend.KCVSConfiguration$1.call(KCVSConfiguration.java:92) 
    at com.thinkaurelius.titan.diskstorage.util.BackendOperation.execute(BackendOperation.java:133) 
    at com.thinkaurelius.titan.diskstorage.util.BackendOperation$1.call(BackendOperation.java:147) 
    at com.thinkaurelius.titan.diskstorage.util.BackendOperation.executeDirect(BackendOperation.java:56) 
    at com.thinkaurelius.titan.diskstorage.util.BackendOperation.execute(BackendOperation.java:42) 
    ... 10 more 
Caused by: TimedOutException() 
    at org.apache.cassandra.thrift.Cassandra$multiget_slice_result$multiget_slice_resultStandardScheme.read(Cassandra.java:14696) 
    at org.apache.cassandra.thrift.Cassandra$multiget_slice_result$multiget_slice_resultStandardScheme.read(Cassandra.java:14633) 
    at org.apache.cassandra.thrift.Cassandra$multiget_slice_result.read(Cassandra.java:14559) 
    at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78) 
    at org.apache.cassandra.thrift.Cassandra$Client.recv_multiget_slice(Cassandra.java:741) 
    at org.apache.cassandra.thrift.Cassandra$Client.multiget_slice(Cassandra.java:725) 
    at com.thinkaurelius.titan.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore.getNamesSlice(CassandraThriftKeyColumnValueStore.java:129) 
    ... 18 more 

随着storage.backend设置为“卡桑德拉“我得到如下:

Caused by: TimedOutException() 
    at org.apache.cassandra.thrift.Cassandra$multiget_slice_result$multiget_slice_resultStandardScheme.read(Cassandra.java:14696) 
    at org.apache.cassandra.thrift.Cassandra$multiget_slice_result$multiget_slice_resultStandardScheme.read(Cassandra.java:14633) 
    at org.apache.cassandra.thrift.Cassandra$multiget_slice_result.read(Cassandra.java:14559) 
    at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78) 
    at org.apache.cassandra.thrift.Cassandra$Client.recv_multiget_slice(Cassandra.java:741) 
    at org.apache.cassandra.thrift.Cassandra$Client.multiget_slice(Cassandra.java:725) 
    at com.netflix.astyanax.thrift.ThriftColumnFamilyQueryImpl$4$1.internalExecute(ThriftColumnFamilyQueryImpl.java:533) 
    at com.netflix.astyanax.thrift.ThriftColumnFamilyQueryImpl$4$1.internalExecute(ThriftColumnFamilyQueryImpl.java:530) 
    at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:60) 
    ... 24 more 

两个选项都在我的本地设置工作(单节点集群卡桑德拉)。从cassandra.yaml:

listen_address: 136.225.5.31 
start_native_transport: true 
native_transport_port: 12742 
start_rpc: true 
rpc_address: 136.225.5.31 
rpc_port: 12760 

我试图连接到安装程序是一个三节点群集:

listen_interface: eth1 
start_native_transport: true 
native_transport_port: 12742 
start_rpc: true 
rpc_interface: eth1 
rpc_port: 12760 

在第一次设置我得到使用rpc_address + rpc_port泰坦连接,但当我在第二个设置上尝试时,我得到上面的错误。

我需要使用不同的设置不是节点IP为storage.hostname占RPC_INTERFACE被指定的,而不是rpc_address在第二准备?或者问题是什么?

我可以使用cqlsh(并与其他软件,我已经写了)连接到第二组,所以它不是与集群的问题。

+0

防火墙规则?你可以telnet到端口吗? – phact

回答

0

我设法解决了这个问题。

我忽略了在TitanFactory.build()中设置storage.cassandra.replication-factor属性,所以Titan使用的默认复制因子为1,这对我的单节点测试集群起作用。显然,这三个节点中有一个出现了问题,所以我在每个节点上运行了nodetool修复,并将storage.cassandra.replication-factor设置为3.这解决了问题。