mongodb中mongodump 使用 --oplog 参数备份非常的慢

mongodb中mongodump 使用 –oplog 参数备份非常的慢

问题表现:最近生产环境突然收到 IO 使用率100%跟的报警
登上服务器产看io状态
iostat -x -m 1
%util 的值一直是 100%,await, 达到 60 以上,
top 查看,负载居然达到47以上,通过进程 id 找到相应的 进程,发现居然是 3个 mongodb 备份进程把磁盘io占用完了,
备份进程如下:

  /usr/local/mongodb3.0.15/bin/mongodump -h 192.168.201.129:28010  --oplog -o /data/backup/mongo_dbbackup/pktest/20180226174241/pktest >/data/backup/mongo_dbbackup/pktest/20180226174241/pktest.log 2>/data/backup/mongo_dbbackup/pktest/20180226174241/pktest.er

为什么是3个进程 同时进行的呢,我的定时任务是 每隔3个小时进行一次,mongodb 版本是3.0.15 wiredTiger引擎 , 备份压缩后的数据不到1G的数据,为什么3个小时都备份不完1G的数据呢,
产看备份日志文件

2018-02-26T17:42:41.812+0800    writing captured oplog to 

在17:42:41 分的时候就已经读oplog, 现在已经是22:03:46 已经超过4个 小时了, 为啥读取oplog中的数据居然要这么久,而且这个mongodb 业务量非常的小,为啥还这么慢
登录mongodb
执行如下命令

rs11:SECONDARY> rs.slaveOk()
rs11:SECONDARY> db.serverStatus().storageEngine
{ "name" : "wiredTiger" }
rs11:SECONDARY> show dbs
local           46.102GB
testdata2       0.036GB
texasmoney_108  0.312GB
texasmoney_13   2.072GB
texasmoney_67   1.508GB

oplog 居然达到46GB 数据

rs11:SECONDARY> rs.printReplicationInfo()
configured oplog size:   92160MB
log length start to end: 24826899secs (6896.36hrs)
oplog first event time:  Mon May 29 2017 13:39:32 GMT+0800 (CST)
oplog last event time:   Mon Mar 12 2018 22:01:11 GMT+0800 (CST)
now:                     Mon Mar 12 2018 22:01:11 GMT+0800 (CST)
rs11:SECONDARY> 

通过上面数据我们就分析出io以及高负载的原因:
原因:日志保留居然到达了287 天, oplog 明显太大,到时读取oplog的使用大量的io

解决办法: 缩小oplog 的 大小,我们生产环境一般保留48小时左右的数据,这个我们设置2GB 的大小

修改完以后,再次备份, 每次备份时间不用10分钟, 备份数据的性能大大提升

至于 修改oplog 的 大小的方法,后面有空就会写出来

猜你喜欢

转载自blog.csdn.net/brighter_xiao/article/details/79533891
今日推荐