升级 ceph (16.2 -> 18.2) ceph mon 启动失败

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。

  1. 使用 osd 上存储的信息重建 mon
ms=<directory>
mkdir $ms

for 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
  1. 重建 mon 存储
ceph-monstore-tool <directory> rebuild -- --keyring <keyring>

如果没有 keyring

ceph-monstore-tool <directory> rebuild
  1. 替换
mv /var/lib/ceph/mon/<mon-ID>/store.db \
   /var/lib/ceph/mon/<mon-ID>/store.db.corrupted
  1. 导出 mon
ceph-mon -i <mon-ID> --extrace-monmap /tmp/lastmap
  1. 删除 mon ,注意 默认生成的 mon 无法启动,需要删除
monmaptool --rm a /tmp/lastmap
  1. 重新添加 mon
monmaptool --add <mon-ID> <mon ip>:6789 /tmp/lastmap
  1. 导入 mon
ceph-mon -i <mon-ID> --inject-monmap /tmp/lastmap
  1. 启动 mon
systemctl start ceph-mon@<mon-ID>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值