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",包含每个群集数据库的文档,指定数据库的每个分片的每个副本实际存在的位置.
所以,要移动一个碎片,你需要做一些事情;
在Bigcouch节点的数据目录中,您将找到这样的文件;
碎片/ a0000000-bfffffff/foo.1312544893.couch
所有分片都在shards /目录下组织,然后按范围组织,最后名称后跟一个随机数.
选择数据库中的一个文件并记住其名称.
使用任何方法将此文件复制到目标服务器上的相同路径.rsync和scp是很好的选择,CouchDB复制也是如此(确保从端口5986复制到端口5986).
需要修改管理集群数据库布局的'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上检查数据库,以确保所有文档都正确显示.
执行从源分片到目标分片的复制,再次注意在每个分片的5986端口上执行此操作.这将确保所有更新再次可用.您现在可以在原始服务器上删除此分片的副本.
HTH,Robert Newson - Cloudant.