关于单台MongoDB实例开启Oplog的过程详解

  • A+
所属分类:MongoDB

配景

跟着数据的积聚,MongoDB中的数据量越来越年夜,数据阐发团队从数据库中抽取变化数据(如果根据栏位createdatetime,transdatetime),越来越艰苦。我们知道MongoDB的副本集有一个数据布局Oplog,里面存储了Primary节点的所有写操作(此处的写操作是指查询以外的操作,包括 更新、非常等)。实在,数据的抽取完全可以从Oplog中抓取这些操作,然后去重放。

oplog是local库下的一个固定聚拢,Secondary便是经由过程查看Primary 的oplog这个聚拢来进行复制的。每个节点都有oplog,记载这从主节点复制过来的信息,如许每个成员都可以作为同步源给其他节点。

Oplog 可以说是Mongodb Replication的纽带了。

然则在现实的临盆情况中,我们许多MongoDB 数据库是单实例的,那么我们可否在单实例数据库上开启Oplog?

谜底是确定的。

其原理便是,在单实例上设置装备摆设副本集,假如设置装备摆设胜利了,天然就有了Oplog

设置装备摆设进程

实在设置装备摆设的进程比拟简单。

step 1 : 在设置装备摆设文件中 添加副本集参数(replSet);

step 2 :重启服务;

step 3:在local数据库或admin数据库执行初始化副本集的剧本,rs.initiate()。

注意事变

1. 在设置装备摆设文件中增长副本集参数(replSet=??),MongoDB实例重启,第一次登入,执行其他敕令时(例如:show dbs),会提醒差错,差错信息如下,

{
"大众ok"大众 : 0,
"大众errmsg"大众 : "大众not master and slaveOk=false"大众,
"大众code"大众 : 13435,
"大众codeName"大众 : "大众NotMasterNoSlaveOk"大众
}

此时必定要执行初始化的敕令:

2 . 初始化时,请指明 Server信息和端口信息,不然初始化时可能报错,报错信息如下

"大众errmsg"大众 : "大众No host described in new configuration 1 for replica set replwms maps to this node"大众,

指定IP 和 端口,副本集名称,例如执行以下敕令,OK

3 . 副本集初始化可以在admin中执行,不仅仅可以在local数据库中执行【真正的副本集树立多是在admin库中执行】。

而不像有些文章中要求的那样 :You just need to issuers.initiate()on thelocaldatabase:

4. 初始完,副本集中独一的节点,可能短光阴显示为SECONDARY或OTHER。一样平常而言,稍等一会,就会天然规复为primary,无需人工干涉。

假如数据库的数据量不年夜,而且永劫间初始这种过渡状况(SECONDARY或OTHER),去看实例的日记,也显示无进展,此时可以斟酌重启服务。

下面案例是我们现实遇到的一个场景,我们是经由过程重启服务办理此问题,脚色由other重启转换为Primary

总结

以上便是这篇文章的全体内容了,愿望本文的内容对年夜家的进修或者事情具有必定的参考进修代价,假如有疑问年夜家可以留言交流,谢谢年夜家对剧本之家的支撑。

您可能感兴致的文章:

应用MongoDB中oplog机制实现准及时数据的操作监控

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: