一个复制集的隐藏成员被配置为priority: 0,为了阻止它们被选举为主,设置hidden: true,阻止客户端连接到复制集路由读操作到它,即使他们指定了一个读偏好为secondary。
从一个隐藏成员读,你会看到一个独立的连接,而不是MongoReplicaSetClient类型,并指定slave_ok。
隐藏成员设置
你可以使用mongo shell来隐藏一个存在复制集的成员:
1
2
3
4
5
6
7
$ mongo admin -uxucy -p
PRIMARY> conf = rs.config()
{ "_id" : "test", "version" : 21, "members" : [ { "_id" : 0, "host" : "xucy.local:27017", }, { "_id" : 1, "host" : "xucy.local:28017", }, { "_id" : 2, "host" : "xucy.local:29017", } ] }
PRIMARY> conf.members[1].priority = 0
PRIMARY> conf.members[1].hidden = true
PRIMARY> conf.version += 1
PRIMARY> rs.reconfig(conf)
xucy.local:28017现在隐藏。他将继续复制和像往常一样在选举中投票,但是连接到复制集的客户端将不会从它读取,即使xucy.local:29017下线:
1
2
3
4
5
6
irb(main):012:0> rs = Mongo::MongoReplicaSetClient.new(["xucy.local:27017", "xucy.local:28017", "xucy.local:29017"])
=> <Mongo::MongoReplicaSetClient:0x3fe06e4fe564 @seeds=[["xucy.local", 27017], ["xucy.local", 28017], ["xucy.local", 29017]] @connected=true>
irb(main):013:0> rs.primary
=> ["xucy.local", 27017]
irb(main):014:0> rs.secondaries
=> #<Set: {}> # an empty set -- as far as this connection is concerned, there are no secondaries.
报表代码将会像这样(使用Ruby):
1
2
3
require 'mongo'
reporting = Mongo::MongoClient.new("xucy.local", "28017", slave_ok: true) # error checking goes here
reporting['my_application']['users'].aggregate(...)
考虑
使用隐藏的成员是一个最简单的方式去配置实例用于专属的工作负载像报表,然而:
隐藏成员不能在紧急情况下读取
带有2个普通和1个隐藏成员在一个复制集中,对于写的错误容忍等价于一个常规的3个成员的集合。然而,你失去两个节点,你的生产应用将不能优雅的降级到只读模式,因为你的隐藏成员将不允许复制集客户端读取。如果你只是喜欢一个隐藏成员的简单,并且花费不是问题,使用一个5成员(带有一个成员隐藏)的集合代替。
对于复制集的包装代码不能被使用
很多团队创建应用定制的包装代码添加基础知识给客户端,由MongoDB驱动提供。因为你需要使用独立连接到你的报表实例,你不能重用投资,将会让你很伤心。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com