以遇见为主题做网站,上海相亲网,做网站语言,广州网站推广软件MongoDB的配置服务器
引入了分片机制之后#xff0c;MongoDB启用了配置服务器(config server) 来存储元数据#xff0c;这些元数据包括分片信息、权限控制信息#xff0c;用来控制分布式锁。其中分片信息还会被负责执行查询mongos使用。 MongoDB的配置服务器有一个很大的优…MongoDB的配置服务器
引入了分片机制之后MongoDB启用了配置服务器(config server) 来存储元数据这些元数据包括分片信息、权限控制信息用来控制分布式锁。其中分片信息还会被负责执行查询mongos使用。 MongoDB的配置服务器有一个很大的优点就是主节点崩溃了它也可以继续提供读服务。 大多数中间件的主从结构都是在主节点崩溃之后完全不可用直到选举出了一个新的主节点。 但是不管怎么说配置服务器在MongoDB里是一个非常关键的组件如果一旦配置服务器有问题哪怕只是轻微地性能抖动一下对整个MongoDB集群的影响都很大。
MongoDB的复制机制主从机制
MongoDB的副本也是MongoDB实例它们和主实例持有一样的数据。在MongoDB里用Primary来代表主实例用Secondary来代表副本实例。主从实例合并在一起也叫做一个复制集Replica Set 类似于数据库的读写分离机制可以在MongoDB上进行读写分离。读从Secondary0实例读写入Primary实例同时Secondary0和Secondary1从Primary实例里同步数据 在MongoDB里主从之间的数据同步是通过所谓的oplog来实现的类似MySQL的binlog。但是oplog会有一些缺点
在一些特定的操作里oplog可能会超乎想象地大。这主要是因为oplog是幂等的所以任何操作都比要转化为幂等操作。简单来说任何对MongoDB里数据的操作最后都会被转化成一个set操作。所以可以预计的是就是只更新了数据的一小部分但是生成的oplpg还是set整个数据。oplog是有期限的即MongoDB限制了oplog的大小。当oplog占据了太多的磁盘之后就会被删除。就算某个从节点来不及同步oplog也是会被删除的。这个时候这个从节点只能重新发起一次全量的数据同步。
写入语义
和Kafka的写入语义非常像可以通过参数来控制写入数据究竟写到哪里写入语义对性能、可用性和数据可靠性有显著的影响。 在MongoDB里写入语义也叫Write Concern它由w、j和wtimeout三个参数控制。
w参数
它的取值如下
majority要求写操作已经同步给大部分节点默认取值可用性强但是写入性能差数字N如果N1要求必须写入主节点如果N大于1那么就必须写入主节点而且写入N-1个从节点如果N0那么就不用等任何节点写入。性能很好但是虽然客户端收到了成功的响应数据也有可能丢失。自定义写入节点策略可以给一些节点打上标签然后要求写入的时候一定要写入带有这些标签的节点实践中用的较少
j参数
控制数据有没有被写到磁盘上对于j来说它的取值就是true或false
wtimeout参数
写入的超时时间只会在w1的时候生效。 在超时之后MongoDB就直接返回一个错误但是这种情况下MongoDB可能还是写入数据成功了
面试准备
负责的业务或公司有没有使用MongoDB主要用来做什么为什么要用MongoDB用MySQL可以吗用MongoDB的时候文档支持分片吗如果支持的话按什么来分片的业务有多少数据量并发有多高MongoDB怎么部署的主从节点有多少有没有多数据中心的部署方案MongoDB的写入语义即w和j这两个参数的取值
面试话题引导
Kafka的acks机制可以引申到MongoDB的写入语义上其他中间件的对等结构或主从结构可以引导到MongoDB的分片和主从机制上Kafka的元数据可以结合MongoDB的元数据一起回答MongoDB数据不丢失的问题可以结合写入语义来回答参考Kafka分析的思路。 在整个MongoDB的面试过程中注意和不同的中间件进行对比凸显在这方面的积累