运维开发网

mongodb需要配置仲裁节点

运维开发网 https://www.qedev.com 2020-04-17 18:24 出处:网络 作者:运维开发网整理
记录一下,MongoDB的角色创建及配置,以便以后使用 经过大量血的教训,一个分片配置两个副本集时(一个是primary一个是secondary),如果primary挂掉,secondary是不会升级的,必须要加上一个不存储数据的仲裁节点 config = {"_id" : "tonghao", "members" : [ {"_id" : 0, "host" : "10.2.42.101:270
记录一下,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并且拉去oplog5:Secondary根据时间戳应用oplog6:Secondary请求大于本身oplog时间戳的oplog7:Primary更新时间戳

0

精彩评论

暂无评论...
验证码 换一张
取 消