mongoDB复制集维护和切换——内存限制

在部署运行MongoDB作为graylog组件时,遇到内存占用过高问题,达到50G+。由于MongoDB自身不设内存限制,常规手段如ulimit无法有效控制。本文探讨如何利用cgroup限制MongoDB内存,以及在复制集中切换SECONDARY和PRIMARY节点的步骤。
摘要由CSDN通过智能技术生成

使用mongoDB是因为用到了graylog,部署运行2-3个月之后,发现mongoDB占用物理内存巨大,50G+,公司的数据架构居然质问我为什么不设置-Xmx堆内存大小,我尼玛只能呵呵醉了!

简单说mongoDB似乎没有配置项可以限制使用物理内存,粗略理解mongoDB本身不管理内存块,而是全部交给操作系统,如何限制mongoDB内存呢?

网上有说使用ulimit等,但是事实证明无效。

应对的办法就是使用cgroup,cgconfig是什么东西我就不说了,可以看我另一篇博客。

这里介绍下具体实施步骤。我们的复制集一共有3个节点,部署在三台机器上面,首先通过mongo ip:27017这种方式登录,查看每个几点的角色

rs0:SECONDARY>这种就是secondary了,rs0:PRIMARY>这种就是primary。

1、逐个处理secondary

第一步:
	db.adminCommand({"replSetMaintenance":true})
保险起见,执行这个命令,让secondary进入维护模式,这时流量就会切走。
第二步:
	kill mongoDB的进程号,等待mongo进程退出。
第三步:
	准备好cgconfig配置。在/etc/cgconfig.conf文件追加

	在/etc/cgrules.conf追加:
	
	重启cgconfig服务,service cgconfig restart
	在/cgroup/memory目录中可以看到DBLimitedGroup目录,说明生效了
第四步,重启secondary,不过前面要加上
cgexec -g memory:DBLimitedGroup bin/mongod -dbpath=./data/ -logpath=./logs/mongod.log --fork --replSet rs0 -bind_ip=192.168.32.189
 
 
    2、primary切换,然后处理之前的primary
 
mongo登陆primary,然后执行rs.stepDown(15)这时候,执行rs.status观测新的primary有没有选举出来

一般来说都会正常选举,这时候,执行上面的步骤,限制老primary的内存。

说明,可以通过rs.status()查看primary和secondary的状态,同时可以使用下面的命令查看同步进度,这样就可以保证服务整体可用。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值