当引擎设置为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 错误
flinkRocksDB介绍以及Flink对RocksDB的支持
cockroach SortedDiskMap类图(临时引擎 rocksdb与pebble实现)
融合RocksDB, Pregel, Foxx & Satellite Collections 怎样使数据库性能提升35%?