调整mongodb的oplog的大小

当MongoDB集群的数据增长时,oplog占用大量空间。oplog是用于副本集同步的关键,类似MySQL的binlog,不能随意删除。本文介绍了如何查看和调整oplog大小,以及调整后可能对集群的影响,提醒在操作时需谨慎,特别是在生产环境中。
部署运行你感兴趣的模型镜像

最近,公司业务数据存储量增多导致mongo数据库数据增长!

因为是集群状态(PRIMARY + SECONDARY + SECONDARY)

查看了各个db的大小,发现除了业务db之外,mongo自带的localdb也在占用着很多的磁盘空间

PRIMARY> show dbs;
News	0.203125GB
lo	50.0537109375GB
s	335.7900390625GB
s	(empty)
sn	0.203125GB
tst	0.203125GB

如上!除了s(业务db)之外,lo(我改了下local名字)也占用了50G空间!

细致查看了各个表,发现local库中有一个oplog.rs占着51G空间

PRIMARY> use lo
switched to db lo
PRIMARY> show tables;
me
oplog.rs
replset.minvalid
slaves
startup_log
system.indexes
system.replset
PRIMARY> db.oplog.rs.stats(1024*1024)
{
	"ns" : "local.oplog.rs",
	"count" : 5955015,
	"size" : 51108,
	"avgObjSize" : 0.008582346140186044,
	"storageSize" : 51200,
	"numExtents" : 26,
	"nindexes" : 0,
	"lastExtentSize" : 25,
	"paddingFactor" : 1,
	"systemFlags" : 0,
	"userFlags" : 0,
	"totalIndexSize" : 0,
	"indexSizes" : {
		
	},
	"capped" : true,
	"max" : NumberLong("9223372036854775807"),
	"ok" : 1
}

如上!查了下资料,mongo安装时会默认分配给oplog.rs 整个磁盘5%的空间!

例如:本地磁盘是500G,默认会分配25G空间给这个oplog使用,上面之所以是50G是因为做过调整的!在配置文件中定义了大小!下面是mongodb的配置文件!

$ cat /etc/mongod.conf |grep -v "^#" |grep -v "^$"
logpath=/var/log/mongo/mongod.log #log路径
logappend=true                    #log是否为追加
fork = true        
dbpath=/var/lib/mongo             #数据目录
pidfilepath = /var/run/mongodb/mongod.pid   #pid文件路径
replSet=sns_replset
oplogSize=51200                   #oplog的Size.单位:<MB>
rest=true
shardsvr=true
port = 27017

oplog主要是用于副本同步Primary时使用的,类似于mysql的binlog!不能轻易删除!如果大小超过了设定的大小,会采用覆盖的方式继续更新oplog!

修改oplog的大小

一,查看现在oplog的大小!

PRIMARY> db.oplog.rs.stats().maxSize
NumberLong(1970031616)

注意,mongo 2.4.10版本执行上面的命令会没有任何输出,其他版本没测!解决这种问题,把末尾的masSize去掉就好了!查看"max" : NumberLong("9223372036854775807"),即可!

PRIMARY> db.oplog.rs.stats()
NumberLong(1970031616)

二,修改副本集节点oplog的大小

注意,oplog必须大于990MB,所以修改oplog的大小时要考虑可调整的范围!

PRIMARY> db.adminCommand({replSetResizeOplog:1,size:1000})
 {
     "ok" : 1,
     "$clusterTime" : {
         "clusterTime" : Timestamp(1593527768, 1),
         "signature" : {
             "hash" : BinData(0,"7fw3+0veB35tVTFl83c57kvM0OI="),
             "keyId" : NumberLong("6841443127941660675")
         }
     },
     "operationTime" : Timestamp(1593527768, 1)
 }

size:要调整的Size

三,下面的步骤并不是调整oplog的Size后必须执行的!请合理执行!请谨慎使用!尤其是在集群状态下!

默认执行完第二步之后,如果是减小oplog的Size,空间并不会真正被释放出来!直到手动压缩oplog以后!

use local
db.runCommand({"compact" : "oplog.rs"})

注意,请谨慎使用该操作,因为集群状态下,副本依赖oplog同步Primary!如果副本没有来及同步,可能会导致主副数据不一样!所以建议关闭mongodb使用,生产中,如果数据量不大,建议副本重新同步Primary的数据!

至此!关于这篇文档的解说就结束了!

最后

还是那句话:

                    ⚠:我依旧是那个不懂技术的小白!

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值