mongodb基础整理篇————副本概念篇[外篇]( 三 )


config = rs.config()config.members[0].priority=1.5rs.reconfig(config)

mongodb基础整理篇————副本概念篇[外篇]

文章插图
我们可以看到前面是27018,现在变成了27017了 。
根据上面结论得出:优先级最高的节点,才是合法继承人 。
如果你想在从节点上读取数据,但是有一个从节点只是用来做备份的 , 机器性能很差的话,你不希望客户端去访问这台机器怎么办?
你可以设置该节点隐藏 。
config.members[0].hidden=true这样去设置 。
其原理也很简单,就是客户端获取副本集信息的时候是调用db.isMaster() 来查看 。
如果设置了 , 那么isMaster() 是不包含该隐藏的信息的 。
所以客户端就不会去访问这个副本集了 。
然后如果副本集只是作为备份的话,那么其实是不需要索引的 , 那么可以设置:
{"buildIndexs":false},这样从节点就不会创建索引了,同样它的优先级也应该设置为0,这样就不会选为主节点了 。
破烂之道这个破烂之道,并不是指垃圾的意思 。
而是节约成本的方式,个人称为破烂之道 。
从上面我们知道副本集肯定是3个和以上 。
但是有些数据库很大 , 比如16T左右的话,如果购买的是云服务器,成本也是不低的 。
这个时候公司认为要节约成本,那么其他这个时候只需要一个作为副本集作为备份就好 。
这个时候就可以加入仲裁者这种方式 。
mongodb 支持一种特殊类型的副本成员,叫做仲裁者 。
作用就是参与选举,但是不会选择自己作为主节点 。
仲裁者并不保存数据,也不会为客户端提供服务;它只是为了帮助具有两个成员的副本集满足大多数的条件 。
设置仲裁者的方式:
rs.addArb("localhost:27021")或者:
rs.add({"_id":4,"host":"localhost:27021","arbiterOnly":true})仲裁者一般只有一个,因为仲裁者是为了绝大多数 , 来打破平衡的,防止偶数的情况,这是唯一的作用 。
仲裁者缺点 , 那就是如果一个数据从节点完全挂了,无法恢复,要启动一个新的数据节点去替换掉旧的 。
那么这个时候主节点负荷会很重,因为不仅要将数据复制为从节点,还需要处理应用程序的读写负荷 。
结下一节副本集的原理 。

推荐阅读