MongoDB 运维优化系列(一)

一、设置日志级别

方法1:

db.adminCommand({"setParameter":1,"logLevel":0});

 方法2(仅启动):

在启动时,可通过在参数中附加数目更多的“v”(即-v、-vv、-vvv、-vvvv或-vvvvv)

    数字或v越小,表示日志优先级别越高。如 : 0 - 必要内容,5 - 几乎所有操作。

 

二、设置:对于查询耗时Nms的操作,记录日志

db.setProfilingLevel(1,N);

 

三、设置日志文件分割

方法1:

# kill -SIGUSR1 <mongod process id> //向mongo进程发送自定义过程
# find /data/mongodb_data/log/mongodb.log.* -mtime +7 -delete //只保留最近7天日志,剩下的删除

 方法2:

use admin;
db.runCommand({logRotate:1});

 WINDOWS系统只能用此方法。

方法3:Syslog Log Rotation

# vi /etc/logrotate.d/mongodb
/opt/mongodb/log/mongodb.log {
 daily     
 rotate 7
 compress    
 dateext
 missingok     
 notifempty    
 sharedscripts     
 copytruncate     
 postrotate        
 /bin/kill -SIGUSR1 `cat /data/mongodb_data/mongod.lock 2> /dev/null` 2>/dev/null || true     
endscript }

 

四、设置oplog

查询oplog的大小及保存的操作记录持续的时长
repltest:PRIMARY> db.printReplicationInfo()
configured oplog size:   1024MB
log length start to end: 3705secs (1.03hrs)
oplog first event time:  Thu Oct 10 2013 11:13:29 GMT+0800 (CST)
oplog last event time:   Thu Oct 10 2013 12:15:14 GMT+0800 (CST)
now:                     Fri Oct 11 2013 16:33:42 GMT+0800 (CST)
 
查询从节点的数据源列表,其中有数据滞后的时间
repltest:PRIMARY> db.printSlaveReplicationInfo()
source:   192.168.1.101:37017
syncedTo: Fri Oct 11 2013 16:38:16 GMT+0800 (CST)
= 1 secs ago (0hrs)
source:   192.168.1.100:37017
no replication info, yet.  State: ARBITER
 
修改oplog的大小

方法1:

The oplog exists internally as a capped collection, so you cannot modify its size in the course of normal operations.另:改变oplog大小,需要在每个节点上执行维护模式。(官方推荐)
步骤:

1:重启一个实例以单机模式,

通常再关闭server之前,使用rs.stepDown() 强制primary成为secondary

2:重新创建一个新大小,

其中包含旧的oplgo的入口条目的oplog

3:重启mongod作为replica set的成员

操作步骤:
1>: Restart a Secondary in Standalone Mode on a Different Port
关闭mongod实例:
repset:PRIMARY> use admin
repset:PRIMARY> db.shutdownServer()
重启mongod实例以单机模式,修改端口,并不要加--replSet参数
#vim /etc/mongo.conf
  dbpath=/var/lib/mongodb
  logpath=/var/log/mongodb/mongo.log
  pidfilepath=/var/run/mongo.pid
  directoryperdb=true
  logappend=true
  #replSet=repset
  bind_ip=192.168.1.100,127.0.0.1
  port=37017
  oplogSize=2000
  fork=true
#mongod -f /etc/mongo.conf
备份oplog
#mongodump --db local --collection 'oplog.rs' --port 37017
 
2>: Recreate the Oplog with a New Size and a Seed Entry
保存oplog的最新的时间点
> use local
> db.temp.save( db.oplog.rs.find( { }, { ts: 1, h: 1 } ).sort( {$natural : -1} ).limit(1).next() )
> db.temp.find()
删除旧的oplog
> db.oplog.rs.drop()
 
3> :Create a New Oplog
创建一个新的Oplog,大小为2G
> db.runCommand( { create: "oplog.rs", capped: true, size: (2 * 1024 * 1024 * 1024) } )
插入前面保存的旧的oplog的时间点的记录
> db.oplog.rs.save( db.temp.findOne() )
> db.oplog.rs.find()
 
4>:Restart the Member:
关闭单机实例:
> use admin
> db.shutdownServer()
修改回配置# vim /etc/mongo.conf
  dbpath=/var/lib/mongodb
  logpath=/var/log/mongodb/mongo.log
  pidfilepath=/var/run/mongo.pid
  directoryperdb=true
  logappend=true
  replSet=repset
  bind_ip=192.168.1.100,127.0.0.1
  port=37017
  oplogSize=2000
  fork=true
启动mongod
#mongod -f /etc/mongo.conf
重复上述步骤到所有需要更改的节点。
 

方法2:

步骤:
1:停掉所有replca set节点.
2:主节点删除local库下的文件,从节点删除数据目录下所有文件.
3:修改所有节点配置文件.
4:重启所有节点.
5:重新配置replca set,从节点会重新同步所有数据(initial sync).
ps:此法好处是简单,但需要停掉服务,且如果数据量很大,初始同步的成本较高
1>:关闭mongod实例(所有节点)
> use admin
> db.shutdownServer()
 
2>:删除local数据库下的所有文件(PRIMARY节点)
#rm -rf /var/lib/mongodb/local/*
  删除mongo数据目录(其他节点上操作,可不要删错哦,建议所有rm操作先mv,待无问题时候再删除)# rm -rf /var/lib/mongodb/*
 
3> 修改所有节点配置文件(oplogsize)
#vim /etc/mongo.conf
  dbpath=/var/lib/mongodb
  logpath=/var/log/mongodb/mongo.log
  pidfilepath=/var/run/mongo.pid
  directoryperdb=true
  logappend=true
  replSet=repset
  bind_ip=192.168.1.100,127.0.0.1
  port=37017
  oplogSize=2000
  fork=true
 
4> 重启所有节点mongod
> mongod -f /etc/mongo.conf

五、巡检脚本

#!/bin/bash
pro=`ps -ef|grep mongod|grep -v grep|awk '{print $2}'`
echo `ps aux|awk  'BEGIN {cpu=0;mem=0;apc=0;apm=0} {if("USER"!=$1){cpu+=$3;mem+=$4};if('$pro'==$2){apc+=$3;apm+=$4}}END{print ""cpu/100 "\t"mem/100 "\t" apc/100 "\t" apm/100}'`
df -h

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值