如何在mongodb中对分片副本集执行只读查询

时间:2014-09-08 11:54:58

标签: mongodb replication sharding

考虑以下配置 -

  1. 2个Shard服务器每个都有1个副本集(比如rs0和rs1)。
  2. 3个配置服务器和1个查询路由器(mongos)
  3. 上面的分片配置工作正常。但是,我想从分片副本集(从rs0和rs1的辅助副本集)执行只读查询。因为,mongodb数据存在于副本集rs0和rs1中。那么,如何配置它,从rs0和rs1的二级中获取数据?

2 个答案:

答案 0 :(得分:1)

在您选择的驱动程序中使用Read Preferences,并为此“只读”查询将首选项设置为Secondary或SecondaryPreferred。另请阅读Asya的blog post about scaling with secondaries

答案 1 :(得分:1)

您的分片设置不应影响使用读取首选项,因此您可以继续使用Secondary或SecondaryPreferred访问每个分片中副本集的副本:

  

读取分片群集中的首选项

     

在2.2版中更改:在2.2版之前,mongos不支持   读取偏好模式语义。

     

在大多数分片群集中,每个分片都包含一个副本集。如   这样,阅读偏好也适用。关于阅读   首选项,分片群集中的读取操作与之相同   没有复制的副本。

     

与简单副本集不同,在分片群集中,所有交互都与   分片从客户端传递到mongos实例   实际连接到集成员。然后mongos负责   读取首选项的应用,这是透明的   应用

     

完全支持读取不需要进行任何配置更改   在分片环境中的偏好模式,只要mongos在   至少版本2.2。所有mongos都保持自己的连接池   副本集成员。结果:

     
      
  • 没有指定首选项的请求具有primary(默认值),除非mongos重用具有不同的现有连接   模式设置。为防止混淆,请始终明确设置您的阅读   偏好模式。

  •   
  • 所有最近和延迟计算都反映了mongos和mongod实例之间的连接,而不是客户端和mongod
      实例。这会产生所需的结果,因为所有结果都必须如此   在返回客户之前通过mongos。

  •   

http://docs.mongodb.org/manual/core/read-preference-mechanics/