草庐IT

mongodb - moveChunk 未能在数据传输中使用 TO-shard : can't accept new chunks because

coder 2023-05-04 原文

我有一个运行 2.6.5 的 MongoDb 生产集群,我最近从两个分片迁移到三个分片。我已经作为两个碎片运行了大约一年。每个分片是一个 3 服务器副本集,我有一个集合分片。
分片集合大约 240G,有了新分片,我现在在每个分片上均匀分布了 2922 block 。我的生产环境似乎运行良好。访问数据没有问题。

[注意:1461 应该是从 rs0 和 shard1 移动到 shard2 上的 2922 的 block 数。]

我的意图是再分三个集合,所以我从一个开始,并希望它能够分布在各个分片中。但是没有 - 我最终遇到了这个重复错误:

2014-10-29T20:26:35.374+0000 [Balancer] moveChunk 结果:{原因: { ok: 0.0, errmsg: "can't accept new chunks because there are still 1461 deletes from previous migration"},

ok: 0.0, errmsg: "moveChunk 未能让 TO-shard 参与数据传输:无法接受新 block ,因为上一次迁移仍有 1461 次删除"}

2014-10-29T20:26:35.375+0000 [Balancer] 平衡器移动失败:{ 原因: { ok: 0.0, errmsg: "can't accept new chunks because there are still 1461 deletes from previous migration"},

ok: 0.0, errmsg: "moveChunk 未能让 TO-shard 参与数据传输:无法接受新 block ,因为上一次迁移中仍有 1461 次删除"} from: rs0 to: shard1 chunk: min: { account_id: MinKey } max: { account_id: -9218254227106808901 }

通过一些研究,我认为我应该给它一些时间,因为很明显它需要在移动后清理东西。我运行了 sh.disableBalancing("collection-name") 以阻止错误尝试对新集合进行分片。 sh.getBalancerState 显示为真, 和 sh.isBalancerRunning 一样。但是,我给了它 24 小时,错误信息是一样的。 我认为它会清理/删除它需要删除的 1461 中的至少 1 个。

  1. 这种行为现在在 2.6 世界中很常见吗?每次我通过另一个分片扩展环境时,我是否必须手动处理所有分片集合?
  2. 知道如何进行这项清理工作吗?还是我应该只退出 shard1 上的主节点,这似乎是问题所在?
  3. 如果我确实退出了主服务器,我是否仍然有要在辅助服务器上“删除/清理”的文件?或者这会解决问题,以便我可以开始分片一些新的集合?

提前感谢您提供任何见解。

最佳答案

这种问题并不常见,但我看到它偶尔发生。

这里采取的最佳补救措施是降低所引用 TO 分片的主分片,这将清除后台删除。删除线程仅存在于当前主节点上(在处理它们时,它们将通过 oplog 从该主节点复制)。当您将其降级时,它成为辅助线程,线程无法再写入,您将获得一个没有挂起删除的新主线程。您可能希望在降级后重新启动以前的主节点以清除旧光标,但这通常并不紧急。

一旦你这样做,你会留下大量孤立的文件,这些文件可以是 cleanUpOrphaned command 的地址。我建议在低流量时间运行(如果你有这样的时间)。

作为引用,如果这是一个反复出现的问题,则可能是初选在负载方面有点挣扎,为了避免删除排队,您可以设置 _waitForDelete option将平衡器设置为 true(默认为 false)如下:

use config
db.settings.update(
   { "_id" : "balancer" },
   { $set : { "_waitForDelete" : true } },
   { upsert : true }
)

这意味着每次迁移都会变慢(也许明显慢),但不会导致后台删除累积。

关于mongodb - moveChunk 未能在数据传输中使用 TO-shard : can't accept new chunks because,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26640861/

有关mongodb - moveChunk 未能在数据传输中使用 TO-shard : can't accept new chunks because的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  4. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  5. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  6. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  7. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  8. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  9. ruby-on-rails - rails : How to make a form post to another controller action - 2

    我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak

  10. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

随机推荐