mongodb需要配置仲裁节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb需要配置仲裁节点相关的知识,希望对你有一定的参考价值。

记录一下,MongoDB的角色创建及配置,以便以后使用

经过大量血的教训,一个分片配置两个副本集时(一个是primary一个是secondary),如果primary挂掉,secondary是不会升级的,必须要加上一个不存储数据的仲裁节点

config = {"_id" : "tonghao", "members" : [ {"_id" : 0, "host" : "10.2.42.101:27017", priority:2},{"_id" : 1, "host" : "10.2.40.104:27017", priority:1},{"_id" : 2, "host":"10.2.40.104:27016", arbiterOnly:true}]}

priority:2,数字越大级别越高,级别高的作为主节点。

主从复制原理:

假如副本集的数据主从同步不一致,则需要把local db下的文件全复制。
也就是要迁移oplog时间戳

当Mongo DB 被设置成主库时(这一点很重要),在 local db 下有个 collection 叫oplog.$main ,这个就是Mongo 的 oplog。

当Primary节点完成数据操作后,Secondary会做出一系列的动作保证数据的同步:
1:检查自己local库的oplog.rs集合找出最近的时间戳。
2:检查Primary节点local库oplog.rs集合,找出大于此时间戳的记录。
3:将找到的记录插入到自己的oplog.rs集合中,并执行这些操作。

Secondary节点同步到哪了:
1:Primary节点插入一条数据
2:同时,会把该数据写入到Primary的oplog中,并且记录一个时间戳
3:db.runCommand({getlasterror:1,w:2})在Primary节点被调用时,Primary就完成了写入操作,等待其他非仲裁节点来同步数据
4:Secondary节点查询Primary的oplog并且拉去oplog
5:Secondary根据时间戳应用oplog
6:Secondary请求大于本身oplog时间戳的oplog
7:Primary更新时间戳

以上是关于mongodb需要配置仲裁节点的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb集群形式探究-一主一从一仲裁。

mongodb分片部署

MongoDB 分片、仲裁器和集群设置

MongoDB仲裁节点的理解以及memcached,zookeeper,redis,故障恢复方案思考.

mongodb3.0.1副本集安装部署(仲裁节点模式)

mongodb 副本集搭建