线上mongodb版本升级——各种问题Invariant failure

1.  升级mongodb线上版本到3.2.15,然后启动新的进程,没有问题。

其次,使用以前的数据文件启动另一个进程(指定了新的配置文件,实测mongodb 2.4的配置文件在测试机器上也可以用来启动mongodb),在生产环境的机器上每一次都会报错如下:

Invariant failure cce.get() src/mongo/db/catalog/database.cpp 187

[initandlisten] Got signal: 6 (Aborted)

mongod(_ZN5mongo15invariantFailedEPKcS1_j 0xCB)

2. 尝试了 https://jira.mongodb.org/browse/SERVER-9032 , http://www.cnblogs.com/sailrancho/p/3392181.html

提到的设置locale, 无效!

差点而就打算使用 /usr/bin/mongod -f /etc/mongod.conf --repair . 但是我不放弃,绝对不应轻易采用修复数据库的方式(记得这样是会需要非常多的磁盘空间的)。

逛遍了各大网站,没有看到解决方案!

比如 https://segmentfault.com/q/1010000000602546 , https://jira.mongodb.org/browse/SERVER-14238, https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/mongodb-user/3Ckmgph2Li4/IOznrpCYwAAJ , https://stackoverflow.com/questions/31273977/mongo-db-invariant-failure

3. 于是在测试机器和生产机器上参考官方配置文件,添加如下debug:

systemLog:

destination: file

logAppend: true

verbosity: 5

traceAllExceptions: true

#quiet: true

path: /sda/var/log/mongodb/mongodb300.log

4. 启动服务,获取日志。使用bcompare对比:

测试机器:

0800 D STORAGE  [initandlisten]    Recovering database: local

2017-07-24T13:34:21.374+0800 D STORAGE  [initandlisten]    Recovering database: mclog

后面一切正常

生产机器:

2017-07-24T13:25:04.906+0800 D STORAGE  [initandlisten]    Recovering database: system

2017-07-24T13:25:04.906+0800 D STORAGE  [initandlisten] mmf open /sda/var/lib/mongodb/system.ns

2017-07-24T13:25:04.906+0800 D STORAGE  [initandlisten] mmf finishOpening 0x7fc51ac90000 /sda/var/lib/mongodb/system.ns len:16777216

2017-07-24T13:25:04.906+0800 D STORAGE  [initandlisten] mmf open /sda/var/lib/mongodb/system.0

2017-07-24T13:25:04.906+0800 D STORAGE  [initandlisten] mmf finishOpening 0x7fc515c90000 /sda/var/lib/mongodb/system.0 len:67108864

2017-07-24T13:25:04.906+0800 D STORAGE  [initandlisten] allocating new extent

2017-07-24T13:25:04.925+0800 D STORAGE  [initandlisten] MmapV1ExtentManager::allocateExtent desiredSize:4096 fromFreeList: 0 eloc: 0:102000

2017-07-24T13:25:04.925+0800 D STORAGE  [initandlisten] 30 writes (1 kB) covered by 30 pre-images (1 kB)

2017-07-24T13:25:04.925+0800 D STORAGE  [initandlisten] 0 pre-images coalesced into 6 write intents

2017-07-24T13:25:04.928+0800 I -        [initandlisten] Invariant failure cce.get() src/mongo/db/catalog/database.cpp 187

5. 于是非常怀疑生产机器的system命名空间是哪里来的,里面有啥?

进入dbpath,看到system.0,system.ns.

于是在dbpath下创建目录testbak并把上面两个文件mv进去。再次启动,成功了!!

6. 对于老的服务,已经不会在写入新的数据(之前的版本使用的"storageEngine":"mmapv1",所以新版本会延续使用),所以将journal目录重命名,并且设置

storage:

dbPath: /sda/var/lib/mongodb

journal:

enabled: false

再次启动,可以使用。那么可以删除以前的旧数据中的日志了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容