mongodb:具有负载均衡器的副本集


9

可以使用mongodb副本集进行负载平衡吗?我不是在要求HAProxy或类似的东西,而是从mongodb获得内置功能。在文档中找不到有关此问题的提示。

Answers:


11

如果使用分片,则“负载平衡器”是mongos进程-实际上,它更像是路由器-它保留config数据库的内存副本,并可以基于分片键进行决策。

如果您是指在相同副本集之间或集合中的成员之间进行负载平衡,那么有一个功能要求让mongos也处理该场景(https://jira.mongodb.org/browse/SERVER-1594),但是驾驶员的操作方式并不是真正必要的(尽管这会使驾驶员的复杂程度降低)。

在单个副本集中,您无法分发写入,所有写入都必须转到主副本。您可以视需要通过“ 读取首选项”将读取内容分发到辅助服务器。驱动程序跟踪什么是主要的,什么是次要的,并适当地路由查询。


2

“负载平衡”是通过分片实现的。通过分片,您实际上将写入/更新分发到各个分片上。没有特定的算法可以执行此操作,因为mongo可以让您根据所需的任何键组合对数据进行分区。最好的分区算法是将顺序条目与随机条目混合在一起的算法。

例如,用户ID可以按以下方式分区

xx-sha1(user email) 
xx = time sequence

请注意,要实现分片,您需要具有三个配置服务器和数据节点。可以将数据节点分组为副本集以实现冗余,并且可以(仅在可以的情况下)用于从辅助节点读取数据。我只说因为复制是异步完成的,所以您只能读取数据,因此不能保证新数据在查询时可在辅助数据库上使用。

请记住,分区算法完全取决于您,并且应该适合您的应用程序需求。此外,您还应该考虑是否只想写入数据并且仅偶尔读取数据,还是需要在写入数据后立即读取数据。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.