MongoDB学习(一)
MongoDB是目前非常流行的nosql,尤其是在MongoDB4.0以后支持了事务操作,让MongoDB适应了更多的场景。目前我们在使用MongDB时,都会采用集群部署,主从结构(一主多从)。
MongoDB集群
MongoDB数据同步原理
MongoDB主节点接受所有的写请求,在发生新增,修改,删除操作时会向oplog中写入日志,MongoDB会有一个线程一直监听oplog这个集合,当监听到oplog变动时,就会读取日志,并将日志回放,以此来实现主从同步。
MongoDB高可用
MongoDB采用主从模式,当主节点宕机后,从节点会重新发起投票,选出新的主节点,从而保证集群的高可用性。每个节点和每个节点之间都有一个互相的心跳,每两秒会发送一次心跳,如果连续5次没有响应则认为该节点失联,如果失联的是主节点,则会发起投票(如何认为主节点宕机)。MongoDB的投票算法采用Rasft算法。MongDB从节点最多可以有50个,但是拥有选举权的则最多有7个。
从节点当选主节点的条件:
-
能够和大多数节点连接
-
openlog的数据要比别的节点都新或者相同
-
手动给节点设置优先级
首先要满足1,2条件,3条件是人为的,可以不设定。
MongoDB从节点参数
搭建MongoDB集群,可以给从节点设置一些参数,比如上文提到的选举时的优先级,在这里罗列四个常见参数
- 是否拥有选举权,最多可以设置7个拥有选举权的从节点
- 选举时的优先级,值越高则越越优先成为主节点,0无法成为主节点
- 隐藏,会复制数据但是对应用不可见。他也可以拥有选举权但是优先级必须为0
- 同步延迟,可以设定该节点保持与主节点的时间差。如果出现数据错误等问题,可以使用该节点数据,降低影响。
MongoDB的集群类型
副本集群
建议为一主两从
分片集群
从数据库层实现了分库分表。使用分片集群要注意在部署mongos,configserver和shard必须在不同的机器上面。尤其是configServer,机器必须要稳定。其次就是片键的选择,要根据适合的场景选择片键
-
hash片键
数据分布均匀但是范围查询性能很差
-
range片键
可能会有热点数据产生成