mongodb的集群部分的问题及其理解整理
1.如何实现主从模式
启动时,-master指定主, -source标志是从(从库是没有写的权限).
2.主从模式,主挂了,能否自动切换?
不能,只能手动切换.(副本集模式,可实现自动切换)
3.如何实现副本集模式
启动时,使用-replSet指定
4.副本集是怎样的存在
一个主服务器(副本集下,无特定的主服务器),N个副本,N个仲裁
心跳:主-->从,频率2s
mongodb默认是从主节点读写数据的,副本节点上不允许读,需要设置副本节点可以读(rs.slaveOk())。
5.当前主库挂了,副本集是如何产生新主库的
冲裁服务器,会根据rublly算法,进行投票,全体通过,即当选新主。
关键要素:最新更新时间
6.什么时候数据同步,同步分几种
同步分两种,一种是初始化同步,一种是keep复制。
初始化同步:
当副本启动,肯定是全部信息同步;
当副本远远落后主库(根据opLog判断),也会全量同步。
keep复制:即增量同步
7.什么是opLog
oplog(operate log)也是mongodb的一个集合,保存在local.oplog.rs里,但是这个oplog是一个capped collection也就是固定大小的集合,新数据加入超过集合的大小会覆盖。所以这里需要注意,跨IDC的复制要设置合适的oplogSize,避免在生产环境经常产生全量复制。oplogSize 可以通过–oplogSize设置大小,对于linux 和windows 64位,oplog size默认为剩余磁盘空间的5%。
8.从节点的性能肯定不如主节点,但是对主节点是全量拷贝,从节点压力过大,如何处理
使用新的技术--分片
9.什么是分片
分片的思想是:分而治之。所有数据请求,经过mongs(类似路由器),分发到shard(分片),config Server负责记录路由和分片配置信息(mongos无物理存储分片和路由信息,只存在内存,config Serve实现物理存储),replica Set负责副本集(数据备份和恢复,仲裁主库)
10.如何实现分片
1.通过mongos,不是mongod,同时指定下config服务器
2.启动分片的服务器(即普通的mongo服务器)
3.addshard()
这里要注意的是,在addshard中,我们也可以添加副本集,这样能达到更高的稳定性
4.切分数据
4.1开启数据库分片功能,enablesharding
4.2指定集合中分片的片键
mongodb在线文档
https://docs.mongodb.com/v2.2/reference/method/rs.slaveOk/