OrientDB: проблема с созданием распределенных кластеров с hotalignment = true

Я использую OrientDB 2.1.7 во встроенном и распределенном режиме, и приложение работает на двух узлах (два процесса Java).

При использовании конфигурации базы данных JSON по умолчанию все работает нормально:

{
  "autoDeploy": true,
  "hotAlignment": false,
  "executionMode": "undefined",
  "readQuorum": 1,
  "writeQuorum": 2,
  "failureAvailableNodesLessQuorum": false,
  "readYourWrites": true,
  "servers": {
    "*": "master"
  },
  "clusters": {
    "internal": {
      "replication": false
    },
    "index": {
      "replication": false
    },
    "*": {
      "servers": ["<NEW_NODE>"]
    }
  }
}

Однако я хочу изменить hotAlignment на «true», но когда я это сделаю, я получаю следующую ошибку при запуске узла 2 (примечание: база данных не развернута на узле 2 на данный момент, но она была создана на узле 1 ):

Кажется, возникают проблемы с созданием локальных кластеров для node2 при включении hotAlignment. Я также видел ту же проблему при отключении автоматического развертывания. Что-то не хватает в моей конфигурации?

РЕДАКТИРОВАТЬ: Вот как мы запускаем сервер:

Хорошо, поэтому я нашел решение этой проблемы (здесь)

    OServerConfiguration cfg = new OServerConfiguration();
    //DB server config
    cfg.handlers = new ArrayList<OServerHandlerConfiguration>();
    //Cluster plugin config
    OServerHandlerConfiguration hazelcastHandlerConfig = new OServerHandlerConfiguration();
    hazelcastHandlerConfig.clazz = "com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin";
    hazelcastHandlerConfig.parameters = new OServerParameterConfiguration[6];
    hazelcastHandlerConfig.parameters[0] = new OServerParameterConfiguration("nodeName", nodeName);
    hazelcastHandlerConfig.parameters[1] = new OServerParameterConfiguration("enabled", "true");
    hazelcastHandlerConfig.parameters[2] = new OServerParameterConfiguration("configuration.db.default", "/config/distributed-db-config.json");
    hazelcastHandlerConfig.parameters[3] = new OServerParameterConfiguration("configuration.hazelcast", "/config/hazelcast.xml");
    hazelcastHandlerConfig.parameters[4] = new OServerParameterConfiguration("conflict.resolver.impl", "com.orientechnologies.orient.server.distributed.conflict.ODefaultReplicationConflictResolver");
    hazelcastHandlerConfig.parameters[5] = new OServerParameterConfiguration("sharding.strategy.round-robin", "com.orientechnologies.orient.server.hazelcast.sharding.strategy.ORoundRobinPartitioninStrategy");
    cfg.handlers.add(hazelcastHandlerConfig);
    //Network config
    cfg.network = new OServerNetworkConfiguration();
    cfg.network.protocols = new ArrayList<OServerNetworkProtocolConfiguration>();
    cfg.network.protocols.add(new OServerNetworkProtocolConfiguration("binary", "com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary"));
    OServerNetworkListenerConfiguration binaryListenerCfg = new OServerNetworkListenerConfiguration();
    binaryListenerCfg.ipAddress = "0.0.0.0";
    binaryListenerCfg.portRange = "2424-2430";
    binaryListenerCfg.protocol = "binary";
    cfg.network.listeners = new ArrayList<>();
    cfg.network.listeners.add(binaryListenerCfg);

    //Storage config
    OServerStorageConfiguration storageCfg = new OServerStorageConfiguration();
    storageCfg.path = "plocal:./databases/test";
    storageCfg.name = "test";
    storageCfg.loadOnStartup = true;
    cfg.storages = new OServerStorageConfiguration[]{storageCfg};
    //User config
    OServerUserConfiguration userCfg = new OServerUserConfiguration(username, password, "*");
    cfg.users = new OServerUserConfiguration[]{userCfg};

    databaseServer = OServerMain.create(true);
    databaseServer.startup(cfg);

    databaseServer.activate();

person Knut    schedule 18.12.2015    source источник
comment
Да я вижу. Но я также пробовал с бета-версией 2.2, и тогда я получаю ту же ошибку. Есть идеи по настройке сервера для использования как автоматического развертывания, так и горячего выравнивания?   -  person Alessandro Rota    schedule 18.12.2015
comment
какой у вас тип базы данных? местный?   -  person Knut    schedule 21.12.2015
comment
Да, серверы баз данных запускаются с использованием plocal: ./ databases / test в качестве хранилища. Мы запускаем встроенные серверы, используя OServerMain.   -  person Wouter    schedule 21.12.2015
comment
Интересная находка, кстати, если вы перейдете на эту страницу вики и прокрутите вверх, есть ссылка на редактирование этой страницы, в которой вы можете добавить ее в документы, она автоматически создаст запрос на перенос для изменений. Для этого вам понадобится учетная запись github.   -  person Knut    schedule 21.12.2015


Ответы (2)


Я добавил эти две строки перед созданием сервера сервером:

Итак, сервер запускается так:

    String orientdbHome = new File("").getAbsolutePath();
    System.setProperty("ORIENTDB_HOME", orientdbHome);

И теперь при запуске узла 2 нет проблем.

    String orientdbHome = new File("").getAbsolutePath();
    System.setProperty("ORIENTDB_HOME", orientdbHome);

    databaseServer = OServerMain.create(true);
    databaseServer.startup(cfg);

    databaseServer.activate();

Я думаю, что эта информация отсутствует на этой странице документации.

Не стоит использовать hotAligment, он серьезно сломан. Это будет исправлено в 2.2.

person Knut    schedule 21.12.2015
comment
Я предлагаю добавить раздел, объясняющий, что это свойство должно быть установлено, и как это делать программно. - person Wouter; 21.12.2015
comment
Да я вижу. Но когда я пытаюсь использовать OrientDB 2.2.0-beta, я все равно получаю ту же ошибку. Есть идеи, как настроить базу данных, чтобы я мог использовать как hotalignment, так и autodeploy с 2.2? - person Knut; 21.12.2015

См., Например, https://github.com/orientechnologies/orientdb/issues/2270 https://github.com/orientechnologies/orientdb/issues/5455

На данный момент добавление и повторное добавление узла в распределенную установку требует полной синхронизации базы данных.

Привет, Кнут, вам может быть полезно посмотреть следующие ссылки в группах. google.com/forum/#!topic/orient-database/vRlJq28fh_8 groups.google.com/forum / #! topic / orient-database / 5NCen4Zxfjs

person Wouter    schedule 20.12.2015
comment
Хорошо, но проблема такая же, как и при использовании 2.1, поэтому я не думаю, что это потому, что 2.2 - person Knut; 21.12.2015
comment
Хорошо, вы можете показать, как вы запускаете базу данных? Поделитесь своим встроенным кодом? - person Knut; 21.12.2015
comment
2015-12-17 16: 28: 32: 010 INFO [order2] Сохранение файла распределенной конфигурации для базы данных test в: ./databases/test/distributed-config.json [OHazelcastPlugin]
17 декабря 2015 г. 16 : 28: 32: 012 INFO [order2] получил новый статус order2.test = ONLINE [OHazelcastPlugin]
2015-12-17 16: 28: 32: 019 INFO [order2] не обнаружил предыдущих сообщений в очереди orientdb.node. order2.test.request [OHazelcastDistributedMessageService]
2015-12-17 16: 28: 32: 043 INFO [order2] Публикация онлайн-статуса для базы данных order2.test ... [OHazelcastDistributedDatabase]
17 декабря 2015 г. 16 : 28: 32: 046 INFO [order2] получил обновленный статус order2.test = ONLINE [OHazelcastPlugin]
2015-12-17 16: 28: 32: 052 INFO [order2] класс 'ORole', создание нового локального кластера 'orole_order2' (id = -1) [OHazelcastPlugin]
2015-12-17 16: 28: 32: 134 WARNI Ошибка при создании кластера на распределенных узлах: идентификаторы различны (local = 9 и remote = 15). Повторная попытка 0/10 ... [ODistributedStorage]
2015-12-17 16: 28: 32: 522 WARNI Ошибка при создании кластера на распределенных узлах: идентификаторы разные (local = 9 и remote = 15). Повторная попытка 1/10 ... [ODistributedStorage]
2015-12-17 16: 28: 32: 903 WARNI Ошибка при создании кластера на распределенных узлах: идентификаторы разные (local = 9 и remote = 15). Повторная попытка 2/10 ... [ODistributedStorage]
2015-12-17 16: 28: 33: 283 WARNI Ошибка при создании кластера на распределенных узлах: идентификаторы разные (local = 9 и remote = 15). Повторная попытка 3/10 ... [ODistributedStorage]
2015-12-17 16: 28: 33: 663 WARNI Ошибка при создании кластера на распределенных узлах: идентификаторы разные (local = 9 и remote = 15). Повторная попытка 4/10 ... [ODistributedStorage]
2015-12-17 16: 28: 34: 043 WARNI Ошибка при создании кластера на распределенных узлах: идентификаторы разные (local = 9 и remote = 15). Повторная попытка 5/10 ... [ODistributedStorage]
2015-12-17 16: 28: 34: 419 WARNI Ошибка при создании кластера на распределенных узлах: идентификаторы разные (local = 9 и remote = 15). Повторная попытка 6/10 ... [ODistributedStorage]
2015-12-17 16: 28: 34: 799 WARNI Ошибка при создании кластера на распределенных узлах: идентификаторы разные (local = 9 и remote = 15). Повторная попытка 7/10 ... [ODistributedStorage]
2015-12-17 16: 28: 35: 176 WARNI Ошибка при создании кластера на распределенных узлах: идентификаторы разные (local = 9 и remote = 15). Повторная попытка 8/10 ... [ODistributedStorage]
2015-12-17 16: 28: 35: 556 WARNI Ошибка при создании кластера на распределенных узлах: идентификаторы разные (local = 9 и remote = 15). Повторная попытка 9/10 ... [ODistributedStorage]
2015-12-17 16: 28: 35: 910 Ошибка SEVER [order2] при создании кластера orole_order2 в классе ORole: [OHazelcastPlugin] [order2] Ошибка при запуск распределенного плагина
com.orientechnologies.orient.server.distributed. ODistributedException: ошибка при создании кластера orole_order2 в классе ORole
на com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.installLocalClusterPerClass (OHazelcastPlugin.java:1624)
на com.orientechnologies.orient.server. hazelcast.OHazelcastPlugin.installDbClustersForLocalNode (OHazelcastPlugin.java:1293), скачать на com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.loadDistributedDatabases (OHazelcastPlugin.java:1434) на com.orient.ienser. OHazelcastPlugin.startup (OHazelcastPlugin.java:187),
на com.orientechnologies.orient.server.OServer.registerPlugins (OServer.java:979),
на com.orientechnologies.orient.server.OServer.activate (OServer. java: 346)
на no.kommune.bergen.graftest.GraphDBServerWrapper.startDatabaseServer (GraphDBServerWrapper.java:74)
на no.kommune.bergen.graftest.GraftestApplication.main (GraftestApplication.java:47)
at sun.reflect.NativeMe thodAccessorImpl.invoke0 (собственный метод)
в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
в sun.reflect.DelegatingMethodAccessorImpl.invoke (в DelegatingMethodAccessorImpl. .reflect.Method.invoke (Method.java:483),
org.springframework.boot.loader.MainMethodRunner.run (MainMethodRunner.java:53),
java.lang.Thread.run (Thread.java : 745)
Причина: com.orientechnologies.orient.server.distributed.ODistributedException: Ошибка при создании кластера на распределенных узлах: назначенные локальные и удаленные идентификаторы разные
на com.orientechnologies.orient.server.distributed. ODistributedStorage.addCluster (ODistributedStorage.java:1364),
com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.addCluster (ODatabaseDocumentTx.java:1291),
com.orientechnologies.orient.core.metadata. schema.OClassImpl.createClusterIfNeeded (OClassImpl.java:2102)
на com.orient echnologies.orient.core.metadata.schema.OClassImpl.addCluster (OClassImpl.java:1068),
на com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin.installLocalClusterPerClass (OHazelcastPlugin.java:1617)
... Еще 13 - person Wouter; 21.12.2015