12

我目前正在测试 bigcouch 的大量数据(每天 1500 万条记录)。

当我需要生成数据视图时,我遇到了一些平衡问题,因为我的两台机器中的一台比另一台弱得多。结果是,好的机器完成了,无事可做,而较弱的机器还有很多事情要做。(单核与双核)

我现在的想法是将一些碎片从较弱的机器移到另一台机器上,以便它们几乎同时完成。

因此我的问题是,如何将分片从 weeker bigcouch 服务器转移到更好的服务器?

感谢您的帮助+最好的问候!

安迪

4

1 回答 1

23

Bigcouch 分片只是 CouchDB 数据库,因此移动它们的过程非常简单。Bigcouch 的未来版本将自动执行该过程,但现在,我将对其进行描述。

一点背景知识将有助于解释。Bigcouch 节点正在侦听两个端口,5984 和 5986。前面的端口 5984 看起来像 CouchDB(同时是集群和容错的)。后端端口 5986 直接与特定节点上的底层 CouchDB 服务器通信。您会注意到,除了数据库的分片之外,localhost:5986/_all_dbs 中还显示了两个额外的数据库。一个称为“节点”,您在设置集群时已经与它进行了交互。另一个称为“dbs”,包含每个集群数据库的文档,指定数据库每个分片的每个副本实际所在的位置。

所以,要移动一个分片,你需要做一些事情;

  1. 标识分片文件。
  2. 将分片文件复制到新服务器。
  3. 告诉 Bigcouch 它的新位置。
  4. 如果需要,以复制结束。

步骤1

在你的 Bigcouch 节点的数据目录中,你会找到这样的文件;

碎片/a0000000-bfffffff/foo.1312544893.couch

所有分片都组织在 shards/ 目录下,然后是范围,最后是名称后跟一个随机数。

为您的数据库选择一个文件并记住其名称。

第2步

使用任何方法将此文件复制到目标服务器上的相同路径。rsync 和 scp 是不错的选择,CouchDB 复制也是如此(确保从端口 5986 复制到端口 5986)。

第 3 步

需要修改“dbs”中管理集群数据库布局的文档。它看起来有点像这样;

{"_id":"baz","_rev":"1-912fe2dd63e0a570a4ceb26fd742dffd","shard_suffix": [46,49,51,49,50,53,52,53,50,49,55],"changelog" :[["add","00000000-7fffffff","dev1@127.0.0.1"],["add","80000000-ffffffff","dev1@127.0.0.1"]],"by_node":{"dev1 @127.0.0.1":["00000000-7fffffff","80000000-ffffffff"]},"by_range":{"00000000-7fffffff":["dev1@127.0.0.1"],"80000000-ffffffff":[" dev1@127.0.0.1"]}}

更新 by_node 和 by_range 值,以便您移动的分片解析到新主机。

此时,您已经移动了分片。但是,如果在您开始复制文件后但在更新“dbs”文档之前有更新,则这些写入发生在原始节点并且不可见,因此您应该继续执行步骤 4。如果没有更新,您可以删除原始服务器上的分片,但我建议您检查端口 5984 上的数据库以确保所有文档都正确显示。

第4步

执行从源分片到目标分片的复制,再次注意在每个分片的 5986 端口上执行此操作。这将确保所有更新再次可用。您现在可以在原始服务器上删除此分片的副本。

HTH,罗伯特·纽森 - Cloudant。

于 2011-08-05T12:00:28.090 回答