草庐IT

MongoDB - 从损坏的碎片中恢复?

coder 2023-11-06 原文

当一个分片永久损坏时,如何拯救一个分片的 MongoDB 集群?

我有一个包含 48 个分片的 MongoDB 集群。每个分片都是具有一个复制集的主分片。由于计划不周 (tm),其中一个盒子用完了文件空间而死了。另一个已经很近了,然后也用完了空间。由于糟糕的情况(可能是当时正在进行的 compact() 或 repairdb() 操作,整个分片已损坏。

我停止守护进程,尝试修复,但没有成功。

那么,问题来了,如何接受一个分片的丢失,同时保留其他好的分片? 48个分片,丢失一个分片只占我数据的2%。我可以接受丢失这些数据,但我必须达到正常的健康状态。

我该怎么办?

最佳答案

答案已过时,重做答案:

  1. 停止所有机器上的所有守护进程。
  2. 更改主实例的配置文件,使它们作为独立实例出现。
  3. 使用 mongoexport 或 mongodump 将该分片的数据转储到一个文件中。确保该文件包含所需的集合。尝试获取它,使其不包含 _id 字段。
  4. 当您完成备份并将箱子移到适当的安全位置后,进行清理。删除所有数据文件等,并从本质上重新创建您的集群。
  5. 从您的数据备份中重新加载您的数据。

请注意,当您重新创建集群时,您可能应该预先填充一定数量/大量的 block ,这样 splitchunk 进程就不会永远持续下去。

如果你最终得到不平衡的分片(很多 block 在一个,而不是另一个),暂停,关闭平衡器的 throttle ,让它变得非常快,一旦它再次平衡,重新开始重新加载。

关于MongoDB - 从损坏的碎片中恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25490339/

有关MongoDB - 从损坏的碎片中恢复?的更多相关文章

  1. ruby-on-rails - Assets 管道损坏 : Not compiling on the fly css and js files - 2

    我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1

  2. ruby - Ruby gems 的问题(损坏?)试图让指南针在 npm 中工作 - 2

    我不是Ruby专家,但想弄清楚发生了什么,因为我试图让指南针在节点应用程序中工作,但我的Ruby似乎坏了。打字:ruby--version让我:ruby2.1.1p76(2014-02-24revision45161)[x86_64-darwin13.0]我安装了Homebrew,之前遇到过Ruby版本的问题,但它似乎已安装并且可以正常工作。但是,当我使用gem输入请求时,出现此错误:$gem-hErrorloadingRubyGemsplugin"/Users/user_dir/.rvm/gems/ruby-2.1.1@global/gems/executable-hooks-1.3

  3. ruby - RVM screen 内部损坏 - 2

    我正在使用screen,甚至在rvm1.9.2之后并且有一个合适的.rvmrc我的服务器将仍然使用jruby。我的.screenrc包含shell#{SHELL}rvm信息显示jruby。好像rvm1.9.2没有任何效果,但它在screen外工作正常。 最佳答案 好的,我找到了solution.创建一个.screenrc文件并将此代码段放入其中:shell-$SHELLofficialinstructions省略破折号。 关于ruby-RVMscreen内部损坏,我们在StackOver

  4. ruby - RVM 系统范围的安装脚本 url 已损坏——什么是替换? - 2

    我的RVM系统级安装脚本损坏了,无论是LinodeStackScripts还是Chef-soloRecipes的形式。根据RVM网站上的说明,我的脚本以root身份执行以下命令以在系统范围内安装RVM:echo"InstallingRVMsystem-wide">>$logfilebash>/etc/profile上面的关键部分是urlhttp://bit.ly/rvm-install-system-wide。截至今天,2011年3月24日,此网址不再提供服务。它会导致GitHub404错误。RVM网站上的以下URL用于包含系统范围安装的说明:http://rvm.beginrescu

  5. ruby - 警告 : RubyGems 1. 找不到 2+ 索引:RubyGems 将恢复到降低性能的旧索引 - 2

    警告:找不到RubyGems1.2+索引:RubyGems将恢复到降低性能的遗留索引。如果有人能帮我解决这个问题,我会给他们50.00美元我用尽了谷歌,重新安装了所有东西。我只想做gem安装...就是这样 最佳答案 删除罪魁祸首URL。就我而言,我使用的是Centos5.4,我收到的完整错误消息是:root#geminstallrackWARNING:RubyGems1.2+indexnotfoundfor:http://rubyworks.rubyforge.org/redhat/5/GEMS/x86_64/RubyGemswil

  6. ruby - 特拉维斯报告损坏的 Gemfile.lock 的奇怪消息 - 2

    我使用bundler来安装东西,因为我添加了Gemfile.lock,travis开始提示:YourGemfile.lockiscorrupt.ThefollowinggemismissingfromtheDEPENDENCIESsection:'echoe'当然,一切都在本地运行。它也可以使用DeployBot。我什至安装了dockerubuntu并尝试了,仍然可以。我的Gemfile.lock没有损坏。使用相同版本的ruby​​和bundler。这是怎么回事?更新这与bundler版本有关。我使用的是1.11.0,但收到报告说它可以与eg一起使用。1.8.3.??

  7. ruby - 检查点并恢复 Ruby 中的堆 - 2

    Ruby的callcc捕获当前的延续,随后可以调用它来恢复控制,但不能恢复数据。我想捕捉当前的延续以及内存的当前图像。在我看来,捕获堆应该不是很困难;我可以依赖ObjectSpace::each_object和ObjectSpace::dump_all,或Marshal.dump,或简单地Object.clone。但是,我没有看到任何直接的方法来恢复堆。理想情况下,我想遍历object_id->object映射,为每个object_id恢复对象的旧图像(并重新添加object_id如果相应的对象已经被GC'd)。不出所料,没有Ruby级别的API可以让我这样做。我想知道是否有任何我可以

  8. ruby-on-rails - ActiveRecord 中的表名损坏错误 - 2

    在使用ActiveRecord时,我们偶尔会遇到PG::UndefinedTable错误。关联表名称有些损坏,我经常看到Cancelled附加到表名的末尾。例如:ActiveRecord::StatementInvalid:PG::UndefinedTable:ERROR:relation"fooCancell"doesnotexistActiveRecord::StatementInvalid:PG::UndefinedTable:ERROR:relation"Cancelled"doesnotexistActiveRecord::StatementInvalid:PG::Undef

  9. ruby - Homebrew 软件损坏 - "cannot load such file -- vendor/bundle/bundler/setup (LoadError)" - 2

    每次我尝试运行brew命令时,都会出现以下错误:/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.3.7/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in`require':cannotloadsuchfile--vendor/bundle/bundler/setup(LoadError)from/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.3.7/lib/ruby/2.3.0/r

  10. ruby-on-rails - 在一个 Rails 应用程序中使用 PostgreSQL 的 MongoDB - 2

    我可以在一个Rails应用程序中同时使用MongoDB和PostgreSQL吗?具体来说,我最终会想要使用像MongoHQ这样的东西。到目前为止,我未能在实验中进行这项工作。令我担心的是,MongoDB文档特别指出我必须禁用ActiveRecord。任何建议将不胜感激。 最佳答案 您无需禁用ActiveRecord即可使用MongoDB。查看Mongoid只需将gem加上任何模型与您现有的任何ActiveRecord模型一起添加。您应该注意到MongoHQ只是MongoDB的托管服务,可以与任何对象文档映射器(ODM)一起使用。更多

随机推荐