我有一个有8个节点的小型Titan 0.5.0
群集。每个节点都在Rexster 2.5.0
和Cassandra中运行Titan。它们都配置相同。不幸的是,几乎所有的时间其中一个都无法启动
在大多数情况下,这是种子节点之一。
使用cassandra
作为存储后端,我在Rexster / Titan日志中获得以下内容。
WARN com.tinkerpop.rexster.config.GraphConfigurationContainer - Could
not open global configuration com.thinkaurelius.titan.core.TitanException:
Could not open global configuration
at com.thinkaurelius.titan.diskstorage.Backend.
getStandaloneGlobalConfiguration(Backend.java: 405)
...
Caused by: com.thinkaurelius.titan.diskstorage.TemporaryBackendException:
Temporary failure in storage backend
at com.thinkaurelius.titan.diskstorage.cassandra.astyanax.
AstyanaxStoreManager.ensureColumnFamilyExists(AstyanaxStoreManager.java:446)
...
Caused by: com.netflix.astyanax.connectionpool.exceptions.BadRequestException:
BadRequestException: [host=192.168.0.10(192.168.0.10):9160, latency=496(496),
attempts=1] InvalidRequestException(why:Cannot add already existing
column family "system_properties" to keyspace "titan")
at com.netflix.astyanax.thrift.ThriftConverter.ToConnectionPoolException(
ThriftConverter.java:159)
Rexster无法启动,因此未加载图表。
但是,Cassandra节点Rexster无法连接似乎没问题:nodetool
将节点列为环的一部分。如果我针对剩余的Rexster实例发出请求,一切似乎都有效。
我在启动节点之前擦除了所有数据。
我切换到cassandrathrift
导致类似的异常(由TimeoutException引起的PermanentBackendException导致的TitanException相同)。 Rexster中的存储超时为30秒。这可能太低了,因为我现在同时启动所有节点,但没有解释cassandra
的问题。
这里出了什么问题?
修改:
我在滥用泰坦。为了不必在启动时处理索引创建 - 在我的情况下经常发生 - 我在Rexster扩展中创建了索引。我认为这个代码被多次调用:当我同时启动多个节点时,似乎有些节点尝试创建索引。
问题:扩展是否可以安全地创建索引?我为此创建了一个单独的线程:What are the methods to create indices?
我将存储超时增加到60秒,并在从代码中删除索引创建后重试该过程。我仍然同时启动所有节点。同样,一个Rexstitan节点(种子节点#2)无法启动。
Cassandra日志确实包含异常
java.lang.IllegalArgumentException: Unknown keyspace/cf pair (titan.txlog)
at org.apache.cassandra.db.Keyspace.getColumnFamilyStore(Keyspace.java:166)
at org.apache.cassandra.db.Keyspace.getRow(Keyspace.java:326)
at org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:65)
at org.apache.cassandra.db.ReadVerbHandler.doVerb(ReadVerbHandler.java:47)
at org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:60)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
我可以在两个种子节点中看到。虽然一个种子节点上的Rexster似乎并不关心其他Rexster实例无法以
开头Caused by: com.netflix.astyanax.connectionpool.exceptions.BadRequestException: BadRequestException: [host=192.168.0.10(192.168.0.10):9160, latency=66(66), attempts=1]InvalidRequestException(why:Cannot add already existing column family "graphindex_lock_" to keyspace "titan")
at com.netflix.astyanax.thrift.ThriftConverter.ToConnectionPoolException(ThriftConverter.java:159)
at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:65)
at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:28)
at com.netflix.astyanax.thrift.ThriftSyncConnectionFactoryImpl$ThriftConnection.execute(ThriftSyncConnectionFactoryImpl.java:151)
at com.netflix.astyanax.connectionpool.impl.AbstractExecuteWithFailoverImpl.tryOperation(AbstractExecuteWithFailoverImpl.java:119)
at com.netflix.astyanax.connectionpool.impl.AbstractHostPartitionConnectionPool.executeWithFailover(AbstractHostPartitionConnectionPool.java:338)
at com.netflix.astyanax.thrift.ThriftClusterImpl.executeSchemaChangeOperation(ThriftClusterImpl.java:146)
at com.netflix.astyanax.thrift.ThriftClusterImpl.internalCreateColumnFamily(ThriftClusterImpl.java:240)
rexstitan.log
中的。听起来与以前提出的例外非常相似。
只是为了澄清: 如果失败,我的意思是Rexster已启动且可以查询但无法加载Titan图表" graph"。
也许我必须将大小减小到最小,以检查这是否与群集大小有关。
编辑#2 :
与群集大小无关。而且它变得非常烦人。
有时它是上面的BadRequestException
,有时它是BadRequestException
,因为已经有一个键空间" titan"。
或者是IllegalArgumentException
:
2646 [main] WARN com.tinkerpop.rexster.config.GraphConfigurationContainer -
Database has already been initialized but not frozen
java.lang.IllegalArgumentException: Database has already been initialized but not frozen
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:93)
at com.thinkaurelius.titan.graphdb.configuration.GraphDatabaseConfiguration.<init>(GraphDatabaseConfiguration.java:1294)
at com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:93)
at com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:73)
at com.thinkaurelius.titan.tinkerpop.rexster.TitanGraphConfiguration.configureGraphInstance(TitanGraphConfiguration.java:33)
at com.tinkerpop.rexster.config.GraphConfigurationContainer.getGraphFromConfiguration(GraphConfigurationContainer.java:124)
at com.tinkerpop.rexster.config.GraphConfigurationContainer.<init>(GraphConfigurationContainer.java:54)
at com.tinkerpop.rexster.server.XmlRexsterApplication.reconfigure(XmlRexsterApplication.java:99)
at com.tinkerpop.rexster.server.XmlRexsterApplication.<init>(XmlRexsterApplication.java:47)
at com.tinkerpop.rexster.Application.<init>(Application.java:97)
at com.tinkerpop.rexster.Application.main(Application.java:189)
是不是可以同时启动多个节点,它们是否冲突? 这是我能想到的唯一原因,因为我可以得到任何异常,有时它可以正常工作。
答案 0 :(得分:0)
问题是Titan节点的同时启动。 (版本0.5.0
)
您一次启动的节点越多,BadRequestException
的可能性就越大,因为所有节点都会尝试同时在Cassandra集群中创建相同的密钥空间/列系列。
要解决此问题,您必须