ceph 升级后, ceph mon 启动报错:
Dec 31 12:55:11 server ceph-mon[15982]: 2025-12-31T12:55:11.930+0800 7f60570a3e40 -1 _open error initializing leveldb db back storage in /var/lib/ceph/mon/ceph-server/store.db
Dec 31 12:55:11 server ceph-mon[15982]: /builddir/build/BUILD/ceph-18.2.6/src/mon/MonitorDBStore.h: In function 'void MonitorDBStore::_open(const std::string&)' thread 7f60570a3e40 time 2025-12-31T12:55:11.930993+0800
Dec 31 12:55:11 server ceph-mon[15982]: /builddir/build/BUILD/ceph-18.2.6/src/mon/MonitorDBStore.h: 635: ceph_abort_msg("MonitorDBStore: error initializing keyvaluedb back storage")
大致原因之前使用 level db,ceph 18.2 使用变为了 rocksdb。
恢复方法,通过 osd 信息重建 mon。
-
使用 osd 上存储的信息重建 mon
ms=<directory>
mkdir $msfor host in host_list; do rsync -avz "ms" root@host:"ms"; rm -rf "ms" ssh root@host <<EOF
for osd in /var/lib/ceph/osd/ceph-*; do
ceph-objectstore-tool --data-path $osd --op update-mon-db --mon-store-path ms done EOF rsync -avz root@host:ms ms; done -
重建 mon 存储
ceph-monstore-tool <directory> rebuild -- --keyring <keyring>
如果没有 keyring
ceph-monstore-tool <directory> rebuild
-
替换
mv /var/lib/ceph/mon/<mon-ID>/store.db
/var/lib/ceph/mon/<mon-ID>/store.db.corrupted -
导出 mon
ceph-mon -i <mon-ID> --extrace-monmap /tmp/lastmap
-
删除 mon ,注意 默认生成的 mon 无法启动,需要删除
monmaptool --rm a /tmp/lastmap
-
重新添加 mon
monmaptool --add <mon-ID> <mon ip>:6789 /tmp/lastmap
-
导入 mon
ceph-mon -i <mon-ID> --inject-monmap /tmp/lastmap
-
启动 mon
systemctl start ceph-mon@<mon-ID>