我在orientDB 2.2.6中创建了一个带有3个节点的分布式数据库,即master1,master2和master3。我修改了每个节点上的hazelcast.xml和orientdb.server.config.xml文件。我在所有3个节点上使用了一个常见的default-distributed-db-config.json,如下所示。
{
"autoDeploy": true,
"readQuorum": 1,
"writeQuorum": "majority",
"executionMode": "undefined",
"readYourWrites": true,
"failureAvailableNodesLessQuorum": false,
"servers": {
"*": "master"
},
"clusters": {
"internal": {
},
"address": {
"owner" : "master1",
"servers": [ "master1" ]
},
"address_1": {
"owner" : "master1",
"servers" : [ "master1" ]
},
"ip": {
"owner" : "master2",
"servers" : [ "master2" ]
},
"ip_1": {
"owner" : "master2",
"servers" : [ "master2" ]
},
"id": {
"owner" : "master3",
"servers" : [ "master3" ]
},
"id_1": {
"owner" : "master3",
"servers" : [ "master3" ]
},
"*": {
"servers": [ "<NEW_NODE>" ]
}
}
}
然后我按顺序在master1机器master2和master3中启动分布式服务器,让它们同步默认DB。然后我在master1机器中创建了一个数据库和三个类(地址,IP,ID)及其属性和索引。正如我在default-distributed-db-config.json文件中提到的,Address类有两个集群,它们驻留在master1机器中。 IP类有两个集群,它们位于master2机器中。
当我将值插入到Address类中时,正如预期的那样,它们将遵循循环策略进入master1机器的集群。但是当我从master2机器插入IP值时,他们在master1中创建一个集群并插入到新集群中。基本上,所有的值都进入master1机器。当我执行List Clusters时,master2和master3机器中的集群为空。
因此,我无法在三个节点上分发数据。它基本上将数据存储到单个机器中。如何分片数据?我试图插入数据的方式有什么问题吗?
由于
答案 0 :(得分:0)
在当前的OrientDB版本中,不会转发写入操作(创建/更新/删除)。只读是。因此,客户端应连接到处理要将数据写入的群集的服务器。
通常,这不是问题,因为选择了本地群集,但如果要在远程服务器上的特定群集上写入,则不支持此功能。