- A+
配景
跟着数据的积聚,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机制实现准及时数据的操作监控