阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

单台MongoDB实例开启Oplog

199次阅读
没有评论

共计 1140 个字符,预计需要花费 3 分钟才能阅读完成。

背景

随着数据的积累,MongoDB 中的数据量越来越大,数据分析团队从数据库中抽取变化数据(假如依据栏位 createdatetime,transdatetime),越来越困难。我们知道 MongoDB 的副本集有一个数据结构 Oplog,里面存储了 Primary 节点的所有写操作(此处的写操作是指查询以外的操作,包含 更新、异常等)。其实,数据的抽取完全可以从 Oplog 中抓取这些操作,然后去重放。

但是在实际的生产环境中,我们很多 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"
}

此时一定要执行初始化的命令:
rs.initiate({_id: "副本集名称", members: [{_id:0,host:"ServerIP:MongoDBPort"}]})

单台 MongoDB 实例开启 Oplog

 

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

 “errmsg” : “No host described in new configuration 1 for replica set replwms maps to this node”,

 单台 MongoDB 实例开启 Oplog

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

 单台 MongoDB 实例开启 Oplog

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

   而不像有些文章中要求的那样:You just need to issue rs.initiate() on the local database:

 

4.  初始完,副本集中唯一的节点,可能短时间显示为 SECONDARY 或 OTHER。一般而言,稍等一会,就会自然恢复为 primary,无需人工干预。

单台 MongoDB 实例开启 Oplog

单台 MongoDB 实例开启 Oplog

 

如果数据库的数据量不大,并且长时间初始这种过渡状态(SECONDARY 或 OTHER),去看实例的日志,也显示无进展,此时可以考虑重启服务。

下面案例是我们实际遇到的一个场景,我们是通过重启服务解决此问题,角色由 other 重启转换为 Primary 

单台 MongoDB 实例开启 Oplog

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1140字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中