Jam*_*ell 4 replication mongodb proxy
根据这篇文章:
在单个副本集中,您不能分发写入,它们都必须转到主副本。您可以通过您认为合适的读取首选项将读取分发到辅助节点。驱动程序跟踪什么是主要的,什么是次要的,并适当地路由查询。
根据Mongo 文档:
您还可以部署一组 mongos 实例并在应用程序和 mongos 之间使用代理/负载均衡器。在这些部署中,您必须为客户端关联配置负载均衡器,以便来自单个客户端的每个连接都到达相同的 mongos。
所以基本上,如果你有一个由 3 个节点组成的副本集,你就不能真正使用代理/负载均衡器,因为所有写入都需要转到主节点,并且你需要客户端关联......所以所有读取还需要去初级。
不过,我在想的是,有可能将应用程序连接到负载平衡器。负载均衡器会将所有请求路由到主节点(不是很平衡,但无论如何)......直到/除非主节点宕机——此时负载均衡器将开始将请求路由到“新的主节点”。
我不确定这是否可行,因为负载均衡器如何知道哪个 mongo 服务器被选为新的主服务器(以及它应该在哪里路由新请求)?
假设这是可能的,这将实现一定程度的冗余,以防主服务器出现故障......我也希望它也能在网络分区发生时避免过时写入的副作用,因为负载平衡器(因此所有数据库客户端)只会连接到一个主服务器。
或者这是一个愚蠢的问题......
你需要仔细阅读。Amongos
是提供对分片集群的访问的查询路由器。mongos 非常了解底层副本集、(重新)选举以及最后但并非最不重要的一点,即哪个节点是分片副本集的主要节点。
拥有多个 mongo 有很多优点。通常的设置是每个应用程序服务器有一个 mongos。该设置可能是不需要的,例如,因为您可以根据负载自动扩展应用程序服务器。mongos
您可以使用查询路由器设置多台计算机,并通过连接字符串将所有这些实例传递到应用程序服务器。这里的问题是所有查询都会转到第一个mongos
列出的查询。为了避免这种情况,您可以在mongos
实例前面放置一个 TCP 负载均衡器。
对于副本集来说,这一切都是不必要的。首先,(大多数,即所有主要)驱动程序都清楚地知道它们正在连接到副本集(如果配置正确)。使用副本集感知驱动程序,它们会自动确定当前的主写入。对于某种负载平衡,有一个称为“读首选项”的概念。简化:在每个查询的基础上,您可以选择从辅助数据库读取数据,并根据最终一致性接受读取过时数据的可能性。同样,(大多数)驱动程序都意识到这一点,并且不需要负载平衡器。
小智 5
最近我参加了 mongo 大学 M202 提供的在线课程,在第 3 章 FAULT TOLERANCE AND AVAILABILITY 中专门谈到了这两个问题:
不鼓励在具有负载均衡器的副本集中,因为负载均衡器应该了解实际的主服务器,并且还应该了解集群中的读取首选项。
因此,关于第一个问题的答案是不,不可能在副本集集群上拥有外部负载均衡器。
对于第二个问题,给出的答案是可以在分片系统前面有一个负载均衡器,但只有一个警告,即负载均衡器应该保持对所解决的 mongos 的粘性,这与Web应用程序。
原因是在请求期间,即从游标读取,如果负载均衡器使用与之前选择的不同的 mongos,则下一个元素的检索将失败。
归档时间: |
|
查看次数: |
14442 次 |
最近记录: |