副本集的组成
1. 同步:MongoDB的复制功能是使用操作日志oplog实现的,操作日志包含了主节点的每一次写操作。oplog是主节点的local数据库中的一个固定集合。备份节点通过查询整个结婚就可以知道要进行
复制的操作了。每个备份节点都维护者自己的oplog,记录每一次从主节点复制数据的操作。这样,每个成员都可以作为同步源提供给其他成员使用。
2. 将oplog中的同一个操作执行多次,与只执行一次的效果是一样的。如果单个操作会影响多个文档,那么每个受影响的文档都会对应oplog中的一条日志。例如db.remove()删除了10个文档,那就对应十条日志记录。
3. oplog是主节点的local数据库中的一个固定集合。先从数据库同步数据,然后从日志里同步以后的数据。
4. 为了避免陈旧备份节点的出现,让主节点使用比较大的operlog保存足够多的操作日志是很重要的。大的operlog会占用更多的磁盘空间,通常来说,这是一个比较好的折衷方案,因为磁盘会越来越便宜。
而且实际中使用的oplog只有一小部分,因此oplog不会占用太多RAM。
5. 心跳:为了维护最新的视图,每个成员每隔两秒就会向其他成员发送一个心跳请求。心跳请求的信息量非常小,用于检查每个成员的状态。心跳最重要的功能之一就是让主节点知道自己是否满足集合"大多数"
的条件。如果主节点不再得到"大多数"服务器的支持,它就会退位,变成备份节点。
6. 成员状态:主节点,备份节点,STARTUP(成员刚启动),STARTUP2(初始化同步过程),RECOVERING(正常,但暂不能处理读请求),ARBITER(仲裁者状态)
7. 系统出问题时会处于一下状态:DOWN(不可达),UNKNOW(),REMOVED(成员被移除时),ROLLBACK(回滚中),FATAL(错误)
8. 回滚:有些情况下,回滚可能会导致数据丢失,这些丢失的数据被保存到一个.bson文件中,可以手动恢复。
9. 某些情况下,如果要回滚的内容太多,MongoDB可能承受不了。如果要回滚的数量大于300M,或者要回滚30分钟以上的操作,回滚就会失败。对于回滚失败的节点,必须要重新同步。
原文:http://www.cnblogs.com/Jtianlin/p/5118962.html