Attention To, Convert To Capped Collection

假设3个节点的replica Set,其中有一个collection包含索引已经50GB了,所在的数据库分区空间剩余不足50GB。

需要将这个collection转换成cappedCollection。

需要注意哪些?

先来看看转换操作的特点:

1. 首先convertToCapped操作包含了以下内容,

                                "cloneCollectionAsCapped" : "$yourCollection",

                                "toCollection" : ".tmp.convertToCapped.$yourCollection",

                                "size" : $定义的大小

其实是先创建好cappedCollection,然后克隆数据。

2. convertToCapped操作还是一个写锁操作,非常危险。

convertToCapped: write-lock

  { convertToCapped:<fromCollectionName>, size:<sizeInBytes> }

结合这两点,我们应该注意啥呢?

1. 避免直接在PRIMARY节点操作. 可以选择先将其中的一个SECONDARY节点从replicaSet去除, 转换好在加进来并且转换为PRIMARY角色。

2. 由于是拷贝的操作,所以需要有足够的剩余空间,但是显然这里剩余空间是不够的,所以需要先腾出足够的空间来做转换操作。(可能需要重建库才能缩减存储空间)

3. cappedCollection在_ID上是不建索引的,并且事先建立索引也将影响拷贝速度,所以建议先将索引全部删除再开始转换操作。

另外需要注意的是,节点拆除之后,被拆除的节点需要进入非replicaSet启动模式,否则启动后不能做写操作。例如注释掉两行:

# replSet=blss

# autoresync=true

再次加入replicaSet之后,启动的时候需要将注释去掉,并且加入启动参数 : 

--replSet blss/192.168.xxx.xxx:xxxx,192.168.xxx.xxx:xxxx,192.168.xxx.xxx:xxxx 

replSet这里要写全,否则新加入的节点会认为自己的配置文件里面没有自己,无法加入到replicaSet.

PRIMARY节点报错 : 

                {

                        "_id" : 2,

                        "name" : "192.168.xxx.xxx:xxxx",

                        "health" : 0,

                        "state" : 6,

                        "stateStr" : "(not reachable/healthy)",

                        "uptime" : 0,

                        "optime" : {

                                "t" : 0,

                                "i" : 0

                        },

                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),

                        "lastHeartbeat" : ISODate("2011-11-01T23:53:44Z"),

                        "errmsg" : "still initializing"

                }

新加入中的节点报错 : 

Wed Nov  2 07:50:20 [startReplSets] replSet caught exception in startReplSets thread: replSet error self not present in the configur

ation

【其他参考】

30G的collection,转cappedCollection.

耗时73688秒,还没有转结束。

> db.currentOp()

{

        "inprog" : [

                {

                        "opid" : 24,

                        "active" : true,

                        "waitingForLock" : false,

                        "secs_running" : 73688,

                        "op" : "query",

                        "ns" : "blss..tmp.convertToCapped.$myCollection",

                        "query" : {

                                "cloneCollectionAsCapped" : "$myCollection",

                                "toCollection" : ".tmp.convertToCapped.$myCollection",

                                "size" : 30000000000

                        },

                        "client" : "0.0.0.0:0",

                        "desc" : "conn"

                }

        ]

}

时间: 2024-08-01 13:43:04

Attention To, Convert To Capped Collection的相关文章

mongoDB 定长集合(capped collection)

大多数情况下,mongoDB中都是普通的集合,这些集合也称为动态集合,可以自动增长以容纳更多的数据.但这并不适合所有的场景.比如需要保存应用程序的某一个时间段日志,对于历史日志需要定期老化.这种情形下,定长集合就派上了用场.本文描述了定长集合的特性以及给出相关演示. 一.定长集合的特性 需要事先创建,创建时指定大小,即大小固定,后续不可以随意改变 新文档被插入到队列末尾 使用循环的方式老化最老的文档,即不支持从定长集合手动删除文档 数据被顺序写入到磁盘上的固定空间 固定集合不能被分片 由于覆盖特

mongoDB&#039;s Capped Collections

在mongoDB中有一个非常好用的collection : Capped Collections.这种Collection可以设置最大的extent size或max documents,除此之外,在auto-FIFO age-out特性方面具有非常好的性能.capped collection自动维护插入顺序,在某些特殊的使用场景中非常有效,如记录日志的场景,某监控软件保留一个月的监控数据可查,在RDBMS中一般可以使用分区表,定期清理历史数据.在mongodb中使用capped collect

Fluentd插件使用方法

这里主要介绍从MongoDB同步数据到ODPS.ruby环境的搭建以及fluent_plugin_mongo_odps插件的安装. 1.准备工作 1.1安装环境要求 Ruby 2.1以上 Gem 2.4.5以上 1.2 ruby的安装首先查看你的Linux系统是否安装了ruby可以用下面两个命令查询 rpm -qa | grep ruby 或 yum list | grep ruby 1.3 安装一些依赖环境 执行下面的命令: yum install gcc-c++ patch readline

MongoDB Jira系列-3.0.6修复的那些事儿

大家好,我是E叔. 经常有朋友向我咨询版本选型的问题. 受到老毕同学的启发,E叔决定为大家搬运+翻译+简单解释 MongoDB3.0.4+以后各个版本fixed的比较重要的jira issues.大家可以根据需求来决定版本选型. 今天是3.0.6篇. Issues fixed in 3.0.6 以下均是3.0.6中修复了的jira issues.(比较重要的issues) 由于人肉整理,难免有遗漏,欢迎补充. SERVER-20248 与连接数&session有关的内存泄露一则 SERVER-1

MongoDB查询优化分析

在MySQL中,慢查询日志是经常作为我们优化查询的依据,那在MongoDB中是否有类似的功能呢?答案是肯定的,那就 是开启Profiling功能.该工具在运行的实例上收集有关MongoDB的写操作,游标,数据库命令等,可以在数据库级别开 启该工具,也可以在实例级别开启.该工具会把收集到的所有都写入到system.profile集合中,该集合是一个capped collection.更多的信息见:http://docs.mongodb.org/manual/tutorial/manage-the-

MongoDB实战(3)固定集合与GridFS

一.固定集合(Capped Collection) capped collections 是性能出色的有着固定大小的集合,以 LRU(Least Recently Used 最近最少使用)规则和插入顺序进行 age-out(老化移出)处理,自动维护集合中对象的插入顺序,在创建时要预先指定大小.如果空间用完,新添加的对象将会取代集合中最旧的对象. 可以插入及更新,但更新不能超出 collection 的大小,否则更新失败.不允许删除,但是可以调用 drop() 删除集合中的所有行,但是 drop

闲谈MongoDb+GridFS+Nginx

原文:http://tech.techweb.com.cn/thread-433779-1-1.htmlhttp://nightsailer.com/2009/11/13/499.html MongoDb果然是个好东西. 我在最近的一个项目实践中, 实验性的用到了这个东西.在测试中,对于GridFS相当满意. 首先, 和传统的MogileFS不同, gridfs可以和其它的meta数据部署在同一个db中,默认的会为gridfs的collection分别创建fs.files和fs.chunks.5

MongoDB 如何保证 oplog 顺序?

MongoDB 复制集里,主备节点间通过 oplog 来同步数据,Priamry 上写入数据时,会记录一条oplog,Secondary 从 Primary 节点拉取 oplog并重放,以保证最终存储相同的数据集. oplog 主要特性 幂等性,每一条oplog,重放一次或多次,得到的结果是一样的:为实现幂等 mongodb 对很多操作进行来转换,比如将 insert 转换为 upsert.$inc 操作转换为 $set等等. 固定大小(capped collection),oplog 使用固定

MongoDB资料汇总

与大家共勉~ 1.MongoDB是什么 MongoDB介绍PPT分享 MongoDB GridFS介绍PPT两则 初识 MongoDB GridFS MongoDB GridFS 介绍 一个NoSQL与MongoDB的介绍PPT MongoDB:下一代MySQL? 写给Python程序员的MongoDB介绍 又一篇给Python程序员的MongoDB教程 MongoDB源码研究系列文章 白话MongoDB系列文章 MongoDB Tailable Cursors 特性介绍 MongoDB 文档阅