2016-01-28 2 views
1

Notre système crée des bases de données OrientDB par programme et utilise une base de données pour chaque client (avant que quelqu'un ne rejette cette conception, les raisons sont la sécurité, la possibilité de déplacer certains clients/données entre centres de données et la possibilité de déménager sur place).Création d'une base de données en Orientdb

Cela fonctionne très bien dans OrientDB en mode simple. Cependant, lorsque la base de données est configurée en mode distribué (3 serveurs, sur Amazon). Le comportement est, pour le moins, bizarre. Je sais que les docs ne disent rien à ce sujet, mais je ne trouve rien qui dise que non.

Parfois, la base de données est créée correctement, mais le client se verrouille indéfiniment (dans OAdaptiveLock.lock()). Parfois, le cluster entier doit être redémarré pour pouvoir utiliser la base de données et parfois, comme c'est le moment de l'écriture, un nœud OrientDB s'arrête tout seul après qu'il semble synchronisé avec les autres (Address[1.2.3.4]:2434 is SHUTTING_DOWN [LifecycleService] ->Terminating forcefully... [Node]). Le message d'erreur est suivi d'une pile (voir ci-dessous).

Donc, à mes questions:

  1. Do créations OrientDB la base de données de support en ligne en mode distribué?
  2. Si oui, que puis-je faire de mal?
  3. Si ce n'est pas le cas, y a-t-il des plans pour soutenir cela à l'avenir?

Merci d'avance!

./Anders

Stacktrace:

2016-01-28 14:00:01:395 SEVER [infogile02] error on creating cluster 'superclassesedge_infogile02' in class 'superClassesEdge': [OHazelcastPlugin][infogile02] Error on starting distributed plugin 
com.orientechnologies.orient.server.distributed.ODistributedException: com.orientechnologies.orient.server.distributed.ODistributedException: Error on creating cluster 'superclassesedge_infogile02' in class 'superClassesEdge' 
    at com.orientechnologies.orient.server.hazelcast.OHazelcastDistributedDatabase.configureDatabase(OHazelcastDistributedDatabase.java:241) 
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.installDatabaseFromNetwork(OHazelcastPlugin.java:1131) 
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.requestDatabase(OHazelcastPlugin.java:971) 
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.installDatabase(OHazelcastPlugin.java:908) 
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.installNewDatabases(OHazelcastPlugin.java:1468) 
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.startup(OHazelcastPlugin.java:185) 
    at com.orientechnologies.orient.server.OServer.registerPlugins(OServer.java:979) 
    at com.orientechnologies.orient.server.OServer.activate(OServer.java:346) 
    at com.orientechnologies.orient.server.OServerMain.main(OServerMain.java:41) 
Caused by: com.orientechnologies.orient.server.distributed.ODistributedException: Error on creating cluster 'superclassesedge_infogile02' in class 'superClassesEdge' 
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.installLocalClusterPerClass(OHazelcastPlugin.java:1631) 
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.installDbClustersForLocalNode(OHazelcastPlugin.java:1300) 
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin$2.call(OHazelcastPlugin.java:1134) 
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin$2.call(OHazelcastPlugin.java:1131) 
    at com.orientechnologies.orient.server.hazelcast.OHazelcastDistributedDatabase.configureDatabase(OHazelcastDistributedDatabase.java:239) 
    ... 8 more 
Caused by: com.orientechnologies.orient.core.exception.ODatabaseException: Error on saving record #0:1 
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.executeSaveRecord(ODatabaseDocumentTx.java:2044) 
    at com.orientechnologies.orient.core.tx.OTransactionNoTx.saveRecord(OTransactionNoTx.java:159) 
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.save(ODatabaseDocumentTx.java:2568) 
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.save(ODatabaseDocumentTx.java:121) 
    at com.orientechnologies.orient.core.record.impl.ODocument.save(ODocument.java:1768) 
    at com.orientechnologies.orient.core.record.impl.ODocument.save(ODocument.java:1764) 
    at com.orientechnologies.orient.core.metadata.schema.OSchemaShared$1.call(OSchemaShared.java:1213) 
    at com.orientechnologies.orient.core.db.OScenarioThreadLocal.executeAsDistributed(OScenarioThreadLocal.java:71) 
    at com.orientechnologies.orient.core.metadata.schema.OSchemaShared.saveInternal(OSchemaShared.java:1208) 
    at com.orientechnologies.orient.core.metadata.schema.OSchemaShared.releaseSchemaWriteLock(OSchemaShared.java:642) 
    at com.orientechnologies.orient.core.metadata.schema.OClassImpl.releaseSchemaWriteLock(OClassImpl.java:1824) 
    at com.orientechnologies.orient.core.metadata.schema.OClassImpl.releaseSchemaWriteLock(OClassImpl.java:1819) 
    at com.orientechnologies.orient.core.metadata.schema.OClassImpl.addCluster(OClassImpl.java:1088) 
    at com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.installLocalClusterPerClass(OHazelcastPlugin.java:1624) 
    ... 12 more 
Caused by: java.lang.NullPointerException 
    at com.orientechnologies.orient.core.storage.impl.local.paginated.atomicoperations.OAtomicOperationsManager.endAtomicOperation(OAtomicOperationsManager.java:148) 
    at com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage.doUpdateRecord(OAbstractPaginatedStorage.java:2046) 
    at com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage.updateRecord(OAbstractPaginatedStorage.java:971) 
    at com.orientechnologies.orient.server.distributed.ODistributedStorage.updateRecord(ODistributedStorage.java:708) 
    at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.executeSaveRecord(ODatabaseDocumentTx.java:2005) 
    ... 25 more 

2016-01-28 14:00:01:398 INFO [10.0.9.105]:2434 [orientdb] [3.5.3] Address[10.0.9.105]:2434 is SHUTTING_DOWN [LifecycleService] 
2016-01-28 14:00:01:398 WARNI [10.0.9.105]:2434 [orientdb] [3.5.3] Terminating forcefully... [Node] 
2016-01-28 14:00:01:399 INFO [10.0.9.105]:2434 [orientdb] [3.5.3] Shutting down connection manager... [Node] 
+0

Je pense que j'ai eu les mêmes problèmes. Je ne peux toujours pas comprendre. –

+0

En mon nom je pense que c'était un cas grave de tl; dr, le doc d'architecture distribuée (http://orientdb.com/docs/2.0/orientdb.wiki/Distributed-Architecture.html) déclare que "la création d'une base de données sur plusieurs nœuds peut provoquer des problèmes de synchronisation lorsque les clusters sont créés automatiquement. Veuillez créer les bases de données avant de les exécuter en mode distribué ". – Heintz

+0

J'ai compris le problème, mais je ne sais pas quelle est la cause. fondamentalement j'essaye d'exécuter orientdb dans le docker avec distribuer mais cela n'a pas semblé fonctionner. donc après que j'aie essayé par fraisd orientdb dans ubuntu et cela a fonctionné (en copiant le dossier d'un autre serveur) –

Répondre

1

cas grave de tl; dr par nom. Docs sur l'architecture distribuée dans Orientdb indique clairement que "la création d'une base de données sur plusieurs nœuds peut provoquer des problèmes de synchronisation lorsque les clusters sont créés automatiquement." "Créer des bases de données avant de les exécuter en mode distribué". Par les documents, la solution suggérée semble être "Partitioned Graphs" (décrit ici http://orientdb.com/docs/2.0/orientdb.wiki/Partitioned-Graphs.html). Cette solution ne répond pas vraiment à toutes nos préoccupations, mais elle est en théorie assez bonne.

Cependant, cela ne fonctionne pratiquement pas, il nécessite une réécriture importante car les transactions doivent être gérées différemment. Plus sur cela dans un autre sujet ....

+0

Nous avons sauté à travers tant de cerceaux pour que la noisette fonctionne sur AWS et nous avons découvert ce problème. Pourquoi diable voudriez-vous configurer aws dans hazelcast.xml si la mise à l'échelle automatique n'est pas supportée par OrienDB? Si vous devez configurer vos serveurs auparavant, il est beaucoup plus facile d'utiliser tcp-ip pour une stratégie de découverte. – anber