当引擎设置为rocksdb(MongoRocks)时,Percona Server for MongoDB 无法启动

Posted

技术标签:

【中文标题】当引擎设置为rocksdb(MongoRocks)时,Percona Server for MongoDB 无法启动【英文标题】:Percona Server for MongoDB fails to start when engine is set to rocksdb (MongoRocks) 【发布时间】:2016-03-09 07:52:16 【问题描述】:

我的理解是 Percona Server for MongoDB(最新版本)已经用 RocksDB 引擎编译。然而,当我设置标志以使用它时,服务无法启动。它以代码 100(未捕获的异常)退出,并且没有日志输出。有谁知道可能导致这种情况的原因是什么?提前致谢。

【问题讨论】:

请提供操作系统、/var/log/...如果是systemd journalctl -xn、初始化脚本等信息 【参考方案1】:

您可能会在日志中看到类似的内容:

2016-03-10T21:17:23.433-0600 I CONTROL  ***** SERVER RESTARTED *****
2016-03-10T21:17:23.435-0600 I ACCESS   Initialized External Auth Session
2016-03-10T21:17:23.437-0600 I CONTROL  [initandlisten] MongoDB starting : pid=1323 port=27017 dbpath=/var/lib/mongodb 64-bit host=ubuntu14
2016-03-10T21:17:23.437-0600 I CONTROL  [initandlisten] db version v3.0.8-1.3
2016-03-10T21:17:23.437-0600 I CONTROL  [initandlisten] git version: 354592f7850d8d113690f610049baec94812da2b
2016-03-10T21:17:23.437-0600 I CONTROL  [initandlisten] build info: Linux vps-trusty-x64-01 2.6.32-042stab112.15 #1 SMP Tue Oct 20 17:22:56 MSK 2015 x86_64 BOOST_LIB_VERSION=1_49
2016-03-10T21:17:23.437-0600 I CONTROL  [initandlisten] allocator: tcmalloc
2016-03-10T21:17:23.437-0600 I CONTROL  [initandlisten] options:  config: "/etc/mongod.conf", net:  bindIp: "127.0.0.1", port: 27017 , processManagement:  pidFilePath: "/var/run/mongod.pid" , storage:  dbPath: "/var/lib/mongodb", engine: "rocksdb", journal:  enabled: true  , systemLog:  destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log"  
2016-03-10T21:17:23.503-0600 I STORAGE  [initandlisten] exception in initAndListen: 28574 Cannot start server. Detected data files in /var/lib/mongodb created by storage engine 'mmapv1'. The configured storage engine is 'rocksdb'., terminating
2016-03-10T21:17:23.503-0600 I CONTROL  [initandlisten] dbexit:  rc: 100

如果是这样,问题是您已经启动了服务器,指定了 Rocksdb 引擎,但仍在 dbpath 中使用不同的存储引擎数据集。为了解决此问题,您需要从 dbpath 中删除文件以使用新引擎。

如果您想要保留 MongoDB 中的现有数据,那么您首先需要使用 mongodump 工具备份可以使用 mongorestore 恢复的信息切换存储引擎并重新启动服务器后。

更改 /etc/mongod.conf 中的存储引擎后,要从干净的 dbpath 开始,请发出以下命令(以 root 身份):

注意:这将永久删除存储在 MongoDB 数据库中的所有数据:

# service mongod stop
# rm -rf /var/lib/mongodb/*
# service mongod start

几秒钟后,您应该会在日志文件的底部看到以下消息。

# tail /var/log/mongodb/mongod.log

2016-03-10T21:25:30.398-0600 I CONTROL  ***** SERVER RESTARTED *****
2016-03-10T21:25:30.400-0600 I ACCESS   Initialized External Auth Session
2016-03-10T21:25:30.402-0600 I CONTROL  [initandlisten] MongoDB starting : pid=1530 port=27017 dbpath=/var/lib/mongodb 64-bit host=ubuntu14
2016-03-10T21:25:30.402-0600 I CONTROL  [initandlisten] db version v3.0.8-1.3
2016-03-10T21:25:30.402-0600 I CONTROL  [initandlisten] git version: 354592f7850d8d113690f610049baec94812da2b
2016-03-10T21:25:30.402-0600 I CONTROL  [initandlisten] build info: Linux vps-trusty-x64-01 2.6.32-042stab112.15 #1 SMP Tue Oct 20 17:22:56 MSK 2015 x86_64 BOOST_LIB_VERSION=1_49
2016-03-10T21:25:30.402-0600 I CONTROL  [initandlisten] allocator: tcmalloc
2016-03-10T21:25:30.402-0600 I CONTROL  [initandlisten] options:  config: "/etc/mongod.conf", net:  bindIp: "127.0.0.1", port: 27017 , processManagement:  pidFilePath: "/var/run/mongod.pid" , storage:  dbPath: "/var/lib/mongodb", engine: "rocksdb", journal:  enabled: true  , systemLog:  destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log"  
2016-03-10T21:25:30.808-0600 I NETWORK  [initandlisten] waiting for connections on port 27017

【讨论】:

【参考方案2】:

编辑 /etc/mongod.conf 时,请确保不要放太多缩进(空格)。

storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
#  engine: mmapv1
#  engine: PerconaFT
  engine: rocksdb  #---->only two spaces
#  engine: wiredTiger

我也有同样的问题,我花了好几天才弄明白。

【讨论】:

以上是关于当引擎设置为rocksdb(MongoRocks)时,Percona Server for MongoDB 无法启动的主要内容,如果未能解决你的问题,请参考以下文章

ArangoDB:无法初始化 RocksDB 引擎:IO 错误

RocksDB存储引擎测试

flinkRocksDB介绍以及Flink对RocksDB的支持

cockroach SortedDiskMap类图(临时引擎 rocksdb与pebble实现)

RocksDB系列八:Bloom Filter

融合RocksDB, Pregel, Foxx & Satellite Collections 怎样使数据库性能提升35%?