那么如果两个挂了,是否最后一个可以继续运行呢?
答案是不能的,这里就不实验了 。
因为有一个理论知识:
副本集在绝大多数活着的情况下才能正常运行 。
也就是说3个有两个正常才能运行,5个就要3个 。
为什么这样呢? 假设一个问题,现在有3个副本集,一个因为网络问题,无法与其他节点连接 。
那么它自己就选自己为主节点,其他两个选他们自己其中一个为主节点 。
那么问题来了,就有两个主节点了,这样就可以写入不同的主节点,那么就出现问题了,两边数据无法同步了 。
下一个问题,副本集是如何选举的呢? 什么时候进行选举呢?
当一个从节点无法与主节点连通时候,他就会联系并请求其他的副本集成员将自己选举为主节点 。
没错,就像边关大将,如果察觉皇帝不在了,就开始密谋向其他边关大臣推举自己作为皇帝 。
然后其他边关大臣要确认是不是皇帝驾崩了,如果确认皇帝没有驾崩,那么是不会进行支持的 。
如果确定皇帝不在了,那么也不一样选发起的这个边关大将 。
而是先考虑哪个副本集是最新数据,然后是优先级最高的节点作为主节点 。
如果一个副本是最新数据,而其他没有,那么会选择这个节点作为主节点 。但是值得注意的是,如果优先级更高的节点同步了最新数据后,那么优先级更高的节点,将会成为新的主节点 。
副本集之间会互相间隔两秒发送一次心跳 。如果某个成员在10秒内没有反馈心跳,则其他成员会将改不良成员标记为无法访问 。
前文提及到优先级最高的会作为主节点:
那么如何设置优先级呢?
rs.add({"host":"localhost:27017", "priority":1.5})
这个优先级有一个特殊值,如果选择0的话,那么这个节点永远不会成为新的节点 。
然后优先级更高的一般会成为主节点,是这样的,如果设置了优先级更高的副本集,那么当这个副本集拥有最新数据的时候,当前节点会自动退位给这个节点 。
config = rs.config()config.members[0].priority=1.5rs.reconfig(config)
![mongodb基础整理篇————副本概念篇[外篇]](https://www.huyubaike.com//bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL2ltZzIwMjIuY25ibG9ncy5jb20vYmxvZy8xMjg5Nzk0LzIwMjIxMC8xMjg5Nzk0LTIwMjIxMDE2MTIzMTQzNTAwLTYyNjI3MzQ5MS5wbmc=.jpg)
文章插图
我们可以看到前面是27018,现在变成了27017了 。
根据上面结论得出:优先级最高的节点,才是合法继承人 。
如果你想在从节点上读取数据,但是有一个从节点只是用来做备份的,机器性能很差的话,你不希望客户端去访问这台机器怎么办?
你可以设置该节点隐藏 。
config.members[0].hidden=true
这样去设置 。其原理也很简单,就是客户端获取副本集信息的时候是调用db.isMaster() 来查看 。
如果设置了,那么isMaster() 是不包含该隐藏的信息的 。
所以客户端就不会去访问这个副本集了 。
然后如果副本集只是作为备份的话,那么其实是不需要索引的,那么可以设置:
{"buildIndexs":false},这样从节点就不会创建索引了,同样它的优先级也应该设置为0,这样就不会选为主节点了 。
破烂之道这个破烂之道,并不是指垃圾的意思 。
而是节约成本的方式,个人称为破烂之道 。
从上面我们知道副本集肯定是3个和以上 。
但是有些数据库很大,比如16T左右的话,如果购买的是云服务器,成本也是不低的 。
这个时候公司认为要节约成本,那么其他这个时候只需要一个作为副本集作为备份就好 。
这个时候就可以加入仲裁者这种方式 。
经验总结扩展阅读
- CentOS 8.2 对k8s基础环境配置
- 没有物质基础的爱情,哪些星座配对走不远
- python基础--简单数据类型预览
- python基础-较复杂数据类型预览
- 分布式存储系统之Ceph集群RadosGW基础使用
- python的基本运用
- 零基础怎样玩好露娜(玩好露娜的核心诀窍)
- 一 网络安全主动进攻之DNS基础和ettercap实现DNS流量劫持
- 钉钉企业版怎么收费
- SQL基础语句入门