设置分片的orientdb

时间:2015-09-04 07:13:40

标签: java sharding orientdb

我正在尝试在3台服务器上进行设置。出于举个例子的目的,我是 试图设置一个类“客户端”,3个集群“client_1”, “client_2”和“client_3”。我的服务器叫做node1,node2和 节点3。我希望这些集群的排列方式使得每个集群都有2个副本 如果1个节点出现故障,我仍然可以访问所有数据,所以对于 例如:

  • node1是client_1的主服务器,并且具有client_2的副本。
  • node2是client_2的主服务器,并且具有client_3的副本。
  • node3是client_3的主服务器,并且具有client_1的副本。

我已尝试使用以下步骤进行设置: 1.下载OrientDB 2.1.1社区并解压缩到3台服务器上。 2.从数据库目录中删除GratefulDeadConcerts数据库 每个服务器。 3.在node1上编辑default-distributed-db-config.json,如下所示:

{
"autoDeploy": true,
"hotAlignment": false,
"executionMode": "undefined",
"readQuorum": 1,
"writeQuorum": 2,
"failureAvailableNodesLessQuorum": false,
"readYourWrites": true,
"clusters": {
"internal": {
},
"index": {
},
"client_1": {
"servers" : [ "node1","node2" ]
},
"client_2": {
"servers" : [ "node2","node3" ]
},
"client_3": {
"servers" : [ "node3","node1" ]
},
"*": {
"servers" : [ "<NEW_NODE>" ]
}
}
}
  1. 使用dserver.sh启动node1。
  2. 使用node1上的控制台创建数据库: connect remote:localhost root密码 create database remote:localhost / testdb root password plocal graph
  3. 创建一个类并重命名默认群集: create class client extends v alter cluster client name client_1
  4. 使用dserver.sh启动node2,等待数据库自动部署,然后 启动node3并等待部署
  5. 此时我在3个节点上有一个数据库,其中有一个名为“client”的类 只有一个群集“client_1”。

    1. 在node2上,添加client_2集群: alter class client addcluster client_2
    2. 同样,在node3上: alter class client addcluster client_3
    3. 如果我重新连接所有控制台会话并执行“列表集群”,我现在看到了 每个节点上的所有3个客户端类集群。我也看到了.cpm和 每个节点上3个集群中每个集群的.pcl文件。然而,它出现了 我的意图是default-distributed-db-config.json正在被采用 帐户好像我等了几分钟,然后插入每个记录 节点我看到时间戳和文件大小只对文件有所改变 与应该存在于每个节点上的集群有关 (如果文件不存在于错误中,那将会很好并且不那么令人困惑 节点,但它不是世界末日。)

      所以...现在看来我的数据库设置方式与我的意图相同,但是 这样做的目的是让我们能够在服务器停机时存活,所以我 使用ctrl-c关闭node3。我仍然可以看到每个记录(我插入了 来自node1和node2的3个,每个群集一个 - 到目前为止一直很好。

      如果我在node1或node2上查看distirbuted-db.json的内容, 我现在看到我的“客户端”类集群已经重新配置 - 没有 配置中的node3不再:

      "client_3": { "servers": [ "node1" ], "@version": 0, "@type": "d" },
      "client_2": { "servers": [ "node2" ], "@version": 0, "@type": "d" },
      "client_1": { "servers": [ "node1", "node2" ], "@version": 0,
      "@type": "d" }
      

      现在我重新启动node3。配置没有再次更新:

      "client_3": { "servers": [ "node1" ], "@version": 0,
      "@type": "d" },
      "client_2": { "servers": [ "node2" ], "@version": 0, "@type": "d" },
      "client_1": { "servers": [ "node1", "node2" ], "@version": 0,
      "@type": "d" }
      

      我创建/配置数据库的方式有问题,还是这个错误?

1 个答案:

答案 0 :(得分:0)

我认为这里的问题是&#34; hotAlignment&#34;需要设置为&#34; true&#34;在文件&#34; default-distributed-db-config.json&#34;中。根据{{​​3}},&#34;如果设置了hotAlignment = false,则当节点重新加入群集时(在失败或简单地不可达之后),来自节点的数据库的完整副本可能没有关于该节点的所有信息。碎片&#34。但是请注意,来自OrientDB 2.2.x sharding doc:&#34;已移除的热对齐设置:服务器的子弹一旦加入群集,就会一直保留在配置中,直到手动删除它们为止。&#34;