2015-07-20 59 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.這解決了問題。