1

8 ノードの小さな Titan0.5.0クラスターがあります。すべてのノードは、Rexster2.5.0と Cassandra で Titan を実行します。それらはすべて同じように構成されています。残念ながら、ほとんどの場合、そのうちの 1 つが開始できません。
ほとんどの場合、これはシード ノードの 1 つです。

ストレージ バックエンドとして使用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 拡張機能でインデックスを作成しました。このコードは複数回呼び出されたと思います。複数のノードを同時に起動したときに、そのうちのいくつかがインデックスを作成しようとしたようです。

質問: 拡張機能がインデックスを安全に作成できる方法はありますか? このために別のスレッドを作成しました:インデックスを作成する方法は何ですか?

ストレージ タイムアウトを 60 秒に増やし、コードからインデックスの作成を削除した後、手順を再試行しました。すべてのノードを同時に起動します。ここでも 1 つの 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)

両方のシード ノードで確認できます。1 つのシード ノードの 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 グラフ「グラフ」のロードに失敗したことを意味します。

これがクラスターサイズに関連しているかどうかを確認するには、サイズを最小限に抑える必要があるかもしれません。

編集#2

クラスタ サイズとは関係ありません。そして、それは本当に迷惑になっています。BadRequestException上記の場合もあれば、すでにキースペース「titan」があるためBadRequestExceptionです。またはそれは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)

一度に複数のノードを起動することはできませんか?それらは競合しますか? これが私が考えることができる唯一の理由です。例外が発生する可能性があり、場合によっては正常に機能するからです。

4

1 に答える 1