问题现象

新部署的集群,无法正常启动mon,执行 ceph health detail 有如下输出信息

  1. $ ceph health detail
  2. ……
  3. mon.node3 (rank 2) addr 192.168.1.121:6789/0 is down (out of quorum)

原因分析

ceph health detail 输出信息来看,是node3节点出现的异,导出无法完成quorum。经过信息核对,node3节点的IP地址和实际配置的IP地址是不匹配的。而通过在正常的节点node1上执行 ceph daemon mon.node1 mon_status 进行核实map信息,map中记录的node3的地址存在错误。

处理过程

1、停掉有问题的mon进程
  1. systemctl stop ceph-mon@{host}
2、抽取map,命令如下:
  1. ceph-mon -i {id} --extract-monmap /tmp/monmap

如:

  1. ceph-mon -i node3 --extract-monmap /tmp/monmap
3、修改map,把有异常的map信息删除,命令如下:
  1. monmaptool --rm {id} /tmp/monmap

如:

  1. monmaptool --rm node3 /tmp/monmap
4、可以通过print命令来验证一下是否已经删掉,命令如下:
  1. monmaptool --print /tmp/monmap

执行结果类似如下这样:

  1. $ monmaptool --print /tmp/monmap
  2. monmaptool: monmap file /tmp/monmap
  3. epoch 3
  4. fsid 9a0ef35c-691a-4c3c-b242-c5a57e43e08a
  5. last_changed 2018-07-20 12:01:29.580779
  6. created 2018-07-20 11:57:44.542507
  7. 0: 192.168.1.10:6789/0 mon.node1
  8. 1: 192.168.1.11:6789/0 mon.node2
5、重新把正确的ip添加到monmap,命令如下:
  1. monmaptool --add {id} {IP}:{port} /tmp/monmap

如:

  1. monmaptool --add node3 192.168.1.12:6789 /tmp/monmap
6、注入monmap,命令如下:
  1. ceph-mon -i {id} --inject-monmap /tmp/monmap

如:

  1. ceph-mon -i node3 --inject-monmap /tmp/monmap
7、重启mon进程,命令如下:
  1. systemctl start ceph-mon@{id}

如:

  1. systemctl start ceph-mon@node3

结果验证

通过 ceph -sceph health detail 确认集群状态为HEALTH_OK