MongoDB报表实例——隐藏成员方案

  

一个复制集的隐藏成员被配置为优先级:0,为了阻止它们被选举为主,设置隐藏:真的,阻止客户端连接到复制集路由读操作到它,即使他们指定了一个读偏好为次要的。


从一个隐藏成员读,你会看到一个独立的连接,而不是MongoReplicaSetClient类型,并指定slave_ok。


<强>


你可以使用mongo shell来隐藏一个存在复制集的成员:

,美元mongo  admin  -uxucy  -p ,,   PRIMARY>, conf =, rs.config (),,,,   ,{,“_id”:“测试”,,“版本”,:,21日,“成员”,:,“,{,“_id”: 0,,“主人”,:,“xucy.local: 27017”,,},, {,“_id”: 1,“主人”,:,“xucy.local: 28017”,,},, {,“_id”: 2,“主人”,:,“xucy.local: 29017”,,},],},,,,   PRIMARY>, conf.members [1] .priority =, 0,,,,,   PRIMARY>, conf.members [1] .hidden =, true ,,,,   PRIMARY>, conf.version  +=, 1,,,,,   PRIMARY>, rs.reconfig(参看)


xucy.local: 28017现在隐藏。他将继续复制和像往常一样在选举中投的票,但是连接到复制集的客户端将不会从它读取,即使xucy。地方:29017下线:

irb(主要):012:0>, rs =,蒙戈:MongoReplicaSetClient.new ([“xucy.local: 27017”,“xucy.local: 28017”, " xucy.local: 29017 "]),,,,=祝辞,& lt; Mongo: MongoReplicaSetClient: 0 x3fe06e4fe564  @seeds=[(“xucy.local”, 27017年),(“xucy.local”, 28017年),[“xucy.local”, 29017年]],@connected=true>,,,,,   irb(主要):013:0>, rs.primary ,,,,=祝辞,(“xucy.local”, 27017年),,,,,   irb(主要):014:0>, rs.secondaries ,,,,=祝辞,# & lt;集:,{}祝辞,#,an  empty  set ——, as  far  as 却;能够connection  is 而言,there 断开连接;no 二期梅毒疹。


报表代码将会像这样(使用Ruby):

require “mongo”,,,,   reporting =,蒙戈::MongoClient.new (“xucy.local”,“28017”, slave_ok:,真的),#,error  checking  goes  here ,,,,   报告[' my_application '][用户].aggregate (…)


<强>


使用隐藏的成员是一个最简单的方式去配置实例用于专属的工作负载像报表,然而:


<强>


带有2个普通和1个隐藏成员在一个复制集中,对于写的错误容忍等价于一个常规的3个成员的集合。然而,你失去两个节点,你的生产应用将不能优雅的降级到只读模式,因为你的隐藏成员将不允许复制集客户端读取。如果你只是喜欢一个隐藏成员的简单,并且花费不是问题,使用一个5成员(带有一个成员隐藏)的集合代替。


<强>


很多团队创建应用定制的包装代码添加基础知识给客户端,由MongoDB驱动提供。因为你需要使用独立连接到你的报表实例,你不能重用投资,将会让你很伤心。


MongoDB报表实例——隐藏成员方案