将碎片从一个bigcouch服务器移动到另一个(用于平衡)

and*_*ndy 12 couchdb nosql bigcouch

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

当我需要生成数据视图时,我遇到了一些平衡问题,因为我的两台机器中的一台比另一台机器弱得多.结果是,更好的机器完成并且没有任何关系,而较弱的机器还有很多工作要做.(单核与双核)

我的想法是将一些碎片从较弱的机器移动到另一台碎片,这样它们几乎可以在同一时间完成.

因此,我的问题是,如何将碎片从周末bigcouch服务器移动到更好的?

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

安迪

Rob*_*son 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" :[[ "添加", "00000000-7fffffff", "dev1@127.0.0.1"],[ "添加", "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,Robert Newson - Cloudant.