Mongodb一群机器在做工作

时间:2014-01-31 22:33:15

标签: mongodb

我有一台设置72台机器从RabbitMQ队列中取出作业,并在4台机器和Arbeiter上的分片MongoDB上执行CRUD操作,我想知道让一台机器只处理CRUD操作是否有意义/感觉,一切都在同一个网络上运行。

侧面说明我正在考虑的原因是因为它使跟踪进度更容易。

2 个答案:

答案 0 :(得分:1)

对于分片解决方案,有四个实例可能很轻,也许你在谈论Replication

在MongoDB中,复制的概念用于高可用性,而不是用于性能。建议的最小配置是三个节点,一个主节点,一个辅助节点和一个仲裁节点。仲裁者的目的是处理哪个节点是主节点的选举,基本上通过将大多数投票交给一个来打破两个节点上的死锁。更稳定的副本集至少有三个主节点,辅助节点,辅助节点......以及可能的仲裁节点,其中仲裁器再次主要用于have an odd number of votes在选举中给予一个节点多数。

Sharded配置中,集群在集群中的分片上按确定的shard key进行拆分。分片的主要目的是当您的数据的working set大于单个节点上的可用RAM时。它允许查询在整个集群中分布,或者以包含所需数据的分片为目标,无论如何分配负载或不占用任何给定节点的资源。

Sharding还需要额外的节点config servers。这些节点保存关于分片上数据位置的元数据,并由router询问以将请求定向到每个分片。在生产中,您将有三个配置服务器来防止一个服务器出现故障。

在任何情况下,分片群集通常由每个分片中的副本集组成。从副本集中,只有主节点接受读/写操作的连接。您可以设置连接以允许从辅助节点读取,如果您可以使用可能不一致的数据,但只有一个节点将接受写入,然后复制到其他辅助节点。使用分片时,将根据所选的分片键将写入发送到分片或分片的主分片。

因此,CRUD操作中涉及的服务器数量完全取决于您的配置。

答案 1 :(得分:0)

您能否提供有关您问题的更多详情?那么你有72台机器来处理RabbitMQ队列和4路分片Mongo集群来托管数据?您是否进行过任何分析以了解系统的瓶颈是什么。它是Rabbitmq处理还是DB上的CRUD?一旦你进行了分片,如果你的密钥是均匀分布的,那么CRUD操作将分布在你所有的mongo分片上。