草庐IT

performance - 用于分片 + 冗余 MongoDB 环境的硬件

coder 2023-05-05 原文

我正在尝试从头开始规划一个新的数据库环境,我想知道需要多少台服务器以及它们应该提供多少性能。

由于我希望它很快,我正在考虑使用 SSD 内存和 RAM 负载。然而,闪存很昂贵,并且占据了服务器成本的最大部分。因此,整个系统应该从一开始就设置为水平扩展,这样我就可以在需要更多存储/性能时添加更多节点。

首先,我正在考虑使用 2 个分片,每个分片由一个主站和一个副本从站组成,以实现冗余。 MongoDB 文档建议使用 1 个主服务器和 2 个从服务器,但恐怕这不在可用预算之内,因为这些服务器中的每一个都将配备大约 200 GB 的 RAM 和 6x400 GB SSD 作为 Raid 10。

使用分片时,还建议使用 3 个配置服务器以实现故障安全/高可用性。与上面相同,我正在考虑 1 个主和 1 个从作为开始。

  • 你会推荐什么样的硬件来放置配置服务器
    在?它们的性能是否应该与中的分片节点相同
    cpu/内存/硬盘的术语?或者我可以将它们放在虚拟化或
    在更便宜的硬件上?
  • 我描述的设置是否有意义?如何
    关于分片节点上 RAM 与硬盘的比率?目前,将两倍数量的磁盘放入 1 个分片(1 个主、1 个从)并跳过分片直到我真的需要它可能会更容易和更便宜。但是(如上所述) - 系统应该从一开始就准备好进行分片,因为存储需求可能会在一夜之间发生变化。或者是否可以将其全部设置,但现在仅在 1 个分片上运行?
  • 因为我只打算使用 2 个而不是 3 个服务器
    高可用性/故障安全 我可能也需要仲裁器。他们是不是
    还需要专用硬件吗?或者我可以在为配置服务器和分片节点提供服务的虚拟机中使用一个仲裁器吗?或者您认为绝对必须使用 3 个单独的服务器来实现冗余?
  • 最佳答案

    摇滚吧。听起来像一个很棒的设置。鉴于您的配置选择,我无法想象预算会过多限制您的选择。

  • 您不需要用于配置服务器的专用物理服务器。这些运行相当轻松。您的 mongos 之间需要低延迟和你的配置服务器。您将始终希望确保主机可靠,并为灾难做好准备。确保您仔细检查分片环境的备份过程。备份需要在分片集群的移动部分之间进行协调。如果可能,请在同一数据中心的虚拟服务器上运行配置服务器。
  • 是的,如果您要在一台机器上运行多个分片,那么您描述的硬件是有意义的。那台强大的机器上的单个 MongoDB 将使机器大部分处于空闲状态。单mongod进程不能使用那么多的 RAM、I/O 或 CPU。您将希望对主机进行“核心分片”。在 MongoHQ,我们通过运行每个 mongod 来做到这一点。在一个容器中,我们可以将其与同一台机器上的其他实例隔离。根据您的规范,您可以在单个主机上运行多达 10 个分片,如果您想扩展主机,则可以运行更多分片。
  • 您可以从单个分片开始,然后迁移到分片集群。这是我们推荐的分片方法:除非必须,否则不要分片。通过延迟分片,您可以提高对系统进行更改的灵活性。当分片到位时,你已经致力于一条特定的路径,没有灵活性(当你知道 future 时,这是可以的)。通过延迟分片,您没有任何权衡。
  • 仲裁器不需要专用硬件。您可以在虚拟机上运行它们。这些不需要相同级别的备份要求,但应该具有良好的正常运行时间。
  • 使用 3 个服务器不是稳定正常运行时间的要求。但是,当一台数据主机出现故障几个小时时,您将被降级为一台数据主机。虽然降级到单个数据主机,但单个主机将正常工作。因为您只有一秒钟的数据在运行,所以您确实会面临更高的中断风险。话虽如此,对于大多数用例来说,2 个节点加上一个仲裁器是可以的,如果其中一个数据节点出现故障,它将保持运行状态。

  • 希望这可以帮助!我们在 MongoHQ 运行类似的配置,并且对我们从主机获得的性能水平感到非常满意。

    关于performance - 用于分片 + 冗余 MongoDB 环境的硬件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18319147/

    有关performance - 用于分片 + 冗余 MongoDB 环境的硬件的更多相关文章

    1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

      大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

    2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

      我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

    3. Ruby Sinatra 配置用于生产和开发 - 2

      我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

    4. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

      我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

    5. ruby - inverse_of 是否适用于 has_many? - 2

      当我使用has_one时,它​​工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290

    6. ruby - 使用 `+=` 和 `send` 方法 - 2

      如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

    7. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

      之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

    8. ruby-on-rails - ruby gem如何在rails环境下工作 - 2

      我试图在rails中了解rubygems是如何变得可以自动使用的,而不是在使用required的文件中gem? 最佳答案 这是通过bundler/setup完成的:http://bundler.io/v1.3/bundler_setup.html.它在您的config/boot.rb文件中是必需的。简而言之,它首先将环境变量设置为指向您的Gemfile:ENV['BUNDLE_GEMFILE']||=File.expand_path('../../Gemfile',__FILE__)然后它通过要求bundler/setup将所有ge

    9. ruby - 如何计算 Liquid 中的变量 +1 - 2

      我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

    10. ruby - "undefined method"用于 rails 模型 - 2

      我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom

    随机推荐