修改mongodb oplog size

转载地址:http://blog.csdn.net/huwei2003/article/details/43307647

修改mongodb oplog size

oplog简介:

oplog:operations log的简写,存储在一个特殊的数据库中(local),oplog就存储在其中的oplog.$main集合里面,这个集合是一个固定集合,新操作会自动替换旧的操作,以保证oplog不会超过预设的大小,其中的每个文档都代表主节点上执行的一个操作,oplog会包含所有对数据有修改的的操作(查询操作不会记录),默认下,oplog大小会占用64位的实例5%的可用磁盘空间。
mongo复制的过程:主节点应用业务操作修改到数据库中,然后记录这些操作到oplog中,从节点复制这些oplog,然后应用这些修改。ps:这些操作是异步的。如果从节点的操作已经被主节点落下很远,oplog日志在从节点还没执行完,oplog可能已经轮滚一圈了,从节点跟不上同步,复制就会停下,从节点需要重新做完整的同步,为了避免此种情况,尽量保证主节点的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
so,修改oplog的大小:(下面介绍两种方式)

方式一:

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
重复上述步骤到所有需要更改的节点。

方式二:

步骤:
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

时间: 2024-11-01 05:09:53

修改mongodb oplog size的相关文章

Increasing the OpLog Size in MongoDB(don't need full resync)

OpLog用于MongoDB数据库复制场合,特征: 1. 设置容量上限, 2. 循环使用 3. local数据库专用 对于MongoDB来说设置好适当的OpLog上限是非常有必要的,因为加大OpLog Size需要重启Master和Slave数据库,并且Slave数据库需要重新同步(full sync). 如果不做FULL SYNC,看看会出现什么样的情况: MASTER: [root@db6 data1]# /opt/mongodb-linux-x86_64-1.6.4/bin/mongo 1

MongoDB:Replica Set 之操作日志 Oplog

转载地址:http://francs3.blog.163.com/blog/static/4057672720121133328120/  之前的blog  学习了 MongoDB 主从搭建,以及节点管理的内容,接下来学习 实现主从复制一个重要角色,即 Oplog.         MongoDB 的复制集是通过 Oplog 来实现的,主库的更改操作会被记录到主库的 Oplog 日志中,然后从库通过异步方式复制主库的 Oplog 文件并且将 Oplog 日志应用到从库,从而 实现了与主库的同步.

从MongoDB Replica Set HA 看分布式系统读写一致性问题

副本集基础 Replica Set是mongodb提供的一个去中心化的备份模式(同时mongodb还提供了主从部署和分片模式),每个mongod都可以是master,且副本集内会自动选举出一个primary,其他都暂时为seconary,primary挂掉后会自动选举出新的primary.副本集内所有mongod存储的都是数据全集,secondary节点会从primary同步数据操作以保证自己的数据up-to-date.副本集有自己的选举机制,相对是一种比较简单的选举,根据心跳.权重等因素选取一

MongoDB Replica Set使用几点总结

本文会涉及到MongoDB副本集的初始化,读写性能,scala driver,简单运维等内容. 副本集初始化 在各个节点上replica set进程, nohup numactl --interleave=all ./mongod --dbpath /home/mongodb/data/ --logpath /home/mongodb/mongodb-linux-x86_64-2.4.7/run.log --port 8017 --rest --journal --replSet smartq

详解MongoDB管理命令_MongoDB

MongoDB是一个NoSQL数据库系统:一个数据库可以包含多个集合(Collection),每个集合对应于关系数据库中的表:而每个集合中可以存储一组由列标识的记录,列是可以自由定义的,非常灵活,由一组列标识的实体的集合对应于关系数据库表中的行.下面通过熟悉MongoDB的基本管理命令,来了解MongoDB提供的DBMS的基本功能和行为.  MongoDB命令帮助系统  在安装MongoDB后,启动服务器进程(mongod),可以通过在客户端命令mongo实现对MongoDB的管理和监控.看一下

MongoDB的主从复制及副本集的replSet配置教程_MongoDB

复制MongoDB的复制功能很重要,尤其是现在的存储引擎还不支持单击持久性.不仅可以用复制来应对故障切换,数据集成,还可以做读扩展,热备份或作为离线批处理的数据源. 1.主从复制主从复制是MongoDB最常用的复制方式.可用于备份,故障恢复和读扩展等. 基本就是搭建一个主节点和一个或多个从节点,每个从节点需要知道主节点的地址.运行mongod --master启动主服务器.运行mongod --slave --source master_address启动从服务器.[root@test02 ~]

Linux系统中MongoDB安装及主从配置

MongoDB 安?,主从配置 一 MongoDB 安装  代码如下 复制代码 [root@zabbix_server src]# wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.0.tgz [root@zabbix_server src]# tar xzvf mongodb-linux-x86_64-2.0.0.tgz [root@zabbix_server src]# mv mongodb-linux-x86_64-

MongoDB3.2 之 oplogSize修改

MongoDB3.2 之 oplogSize修改 前言: 有时候由于某些情况,我们需要修改oplogSize大小,由于目前版本3.2不支持在线修改,好像说是3.6版本将支持在线修改,所以我们只能对副本集成员逐一进行. 注:primary节点最后修改,先修改可能会成为主节点的secondary节点开始. 大致步骤如下: 重启节点为单实例方式运行(不同端口) 修改oplog大小(保留最近的一条oplog记录) 重新加入副本集 修改Secondary: 1.关闭此节点并以单实例启动 关闭节点进程 SE

MongoDB Secondary同步慢问题分析(续)

在MongoDB Scondary同步慢问题分析文中介绍了因Primary上写入qps过大,导致Secondary节点的同步无法追上的问题,本文再分享一个case,因oplog的写入被放大,导致同步追不上的问题. MongoDB用于同步的oplog具有一个重要的『幂等』特性,也就是说,一条oplog在备上重放多次,得到的结果跟重放一次结果是一样的,这个特性简化了同步的实现,Secondary不需要有专门的逻辑去保证一条oplog在备上『必须仅能重放』一次. 为了保证幂等性,记录oplog时,通常