
在使用 Ceph 集群时,你可能会看到 HEALTH_WARN 集群状态。
集群警告可能是由于组件故障等多种原因引起的,例如 MON、OSD、PG 和 MDS。
在我的例子中,我看到警告是由于 Ceph 监控器引起的,如下所示
1
| health HEALTH_WARN 1 mons down, quorum 0,1 ceph-mon1,ceph-mon2
|
首先,我尝试重新启动 MON 服务,但没有效果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| [root@ceph-mon3 ~]# service ceph status mon
=== mon.ceph-mon3 ===
mon.ceph-mon3: not running.
[root@ceph-mon3 ~]# service ceph start mon
=== mon.ceph-mon3 ===
Starting Ceph mon.ceph-mon3 on ceph-mon3...
Invalid argument: /var/lib/ceph/mon/ceph-ceph-mon3/store.db: does not exist (create_if_missing is false)
IO error: /var/lib/ceph/mon/ceph-ceph-mon3/store.db/000001.dbtmp: Input/output error
2015-05-22 11:44:38.065906 7fad6c6967a0 -1 failed to create new leveldb store
failed: 'ulimit -n 131072; /usr/bin/ceph-mon -i ceph-mon3 --pid-file /var/run/ceph/mon.ceph-mon3.pid -c /etc/ceph/ceph.conf --cluster ceph '
Starting ceph-create-keys on ceph-mon3...
[root@ceph-mon3 ~]#
[root@ceph-mon3 ~]# service ceph status mon
=== mon.ceph-mon3 ===
mon.ceph-mon3: not running.
[root@ceph-mon3 ~]#
|
我收到的错误消息不太正常,所以我开始粗暴地操作我的集群,通过移动监控器 store.db 文件。!!!请谨慎操作
1
| mv /var/lib/ceph/mon/ceph-ceph-mon3/store.db /var/lib/ceph/mon/ceph-ceph-mon3/store.db.orig
|
这真的把 MON 搞坏了,所以现在我知道了导致新的错误的另一种方法,耶!
1
2
3
4
5
6
7
| [root@ceph-mon3 ceph-ceph-mon3]# service ceph start mon
=== mon.ceph-mon3 ===
Starting Ceph mon.ceph-mon3 on ceph-mon3...
2015-05-22 11:59:45.385826 7faa43dfb7a0 -1 unable to read magic from mon data.. did you run mkcephfs?
failed: 'ulimit -n 131072; /usr/bin/ceph-mon -i ceph-mon3 --pid-file /var/run/ceph/mon.ceph-mon3.pid -c /etc/ceph/ceph.conf --cluster ceph '
Starting ceph-create-keys on ceph-mon3...
[root@ceph-mon3 ceph-ceph-mon3]#
|
表演时间开始了 :-)
然后我开始认真工作,通过阅读监控器日志,我发现监控器 IP 地址不正确,它们需要具有不同的地址范围。
要解决这个问题,首先我们需要将监控器 IP 地址更改为正确的范围。
更改 Ceph 监控器 IP 地址 ¶
- 获取监控器映射,你可以看到当前的 IP 范围是 80.50.X.X,我们需要将其更改为正确的范围。
1
2
3
4
5
6
7
8
9
10
11
12
13
| [root@ceph-mon1 ~]# ceph mon getmap -o /tmp/monmap
got monmap epoch 3
[root@ceph-mon1 ~]#
[root@ceph-mon1 ~]# monmaptool --print /tmp/monmap
monmaptool: monmap file /tmp/monmap
epoch 3
fsid 98d89661-f616-49eb-9ccf-84d720e179c0
last_changed 2015-05-18 14:42:01.287460
created 2015-05-18 14:41:00.514879
0: 80.50.50.35:6789/0 mon.ceph-mon1
1: 80.50.50.37:6789/0 mon.ceph-mon2
2: 80.50.50.39:6789/0 mon.ceph-mon3
[root@ceph-mon1 ~]#
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| [root@ceph-mon1 ~]# monmaptool --rm ceph-mon1 /tmp/monmap
monmaptool: monmap file /tmp/monmap
monmaptool: removing ceph-mon1
monmaptool: writing epoch 3 to /tmp/monmap (2 monitors)
[root@ceph-mon1 ~]# monmaptool --rm ceph-mon2 /tmp/monmap
monmaptool: monmap file /tmp/monmap
monmaptool: removing ceph-mon2
monmaptool: writing epoch 3 to /tmp/monmap (1 monitors)
[root@ceph-mon1 ~]# monmaptool --rm ceph-mon3 /tmp/monmap
monmaptool: monmap file /tmp/monmap
monmaptool: removing ceph-mon3
monmaptool: writing epoch 3 to /tmp/monmap (0 monitors)
[root@ceph-mon1 ~]#
[root@ceph-mon1 ~]#
[root@ceph-mon1 ~]# monmaptool --print /tmp/monmap
monmaptool: monmap file /tmp/monmap
epoch 3
fsid 98d89661-f616-49eb-9ccf-84d720e179c0
last_changed 2015-05-18 14:42:01.287460
created 2015-05-18 14:41:00.514879
[root@ceph-mon1 ~]#
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| [root@ceph-mon1 ~]# monmaptool --add ceph-mon1-ib 10.100.1.101:6789 /tmp/monmap
monmaptool: monmap file /tmp/monmap
monmaptool: writing epoch 3 to /tmp/monmap (1 monitors)
[root@ceph-mon1 ~]#
[root@ceph-mon1 ~]#
[root@ceph-mon1 ~]# monmaptool --add ceph-mon2-ib 10.100.1.102:6789 /tmp/monmap
monmaptool: monmap file /tmp/monmap
monmaptool: writing epoch 3 to /tmp/monmap (2 monitors)
[root@ceph-mon1 ~]#
[root@ceph-mon1 ~]# monmaptool --add ceph-mon3-ib 10.100.1.103:6789 /tmp/monmap
monmaptool: monmap file /tmp/monmap
monmaptool: writing epoch 3 to /tmp/monmap (3 monitors)
[root@ceph-mon1 ~]#
[root@ceph-mon1 ~]#
[root@ceph-mon1 ~]# monmaptool --print /tmp/monmap monmaptool: monmap file /tmp/monmap
epoch 3
fsid 98d89661-f616-49eb-9ccf-84d720e179c0
last_changed 2015-05-18 14:42:01.287460
created 2015-05-18 14:41:00.514879
0: 10.100.1.101:6789/0 mon.ceph-mon1-ib
1: 10.100.1.102:6789/0 mon.ceph-mon2-ib
2: 10.100.1.103:6789/0 mon.ceph-mon3-ib
[root@ceph-mon1 ~]#
|
- 在注入新的 monmap 之前,先关闭监控器服务,然后注入 monmap。
1
2
3
4
5
6
| [root@ceph-mon1 ~]# service ceph stop mon
=== mon.ceph-mon1 ===
Stopping Ceph mon.ceph-mon1 on ceph-mon1...kill 441540...done
[root@ceph-mon1 ~]#
[root@ceph-mon1 ceph]# ceph-mon -i ceph-mon1 --inject-monmap /tmp/monmap
[root@ceph-mon1 ceph]#
|
- 为集群中的其他监控器重复这些步骤,以节省时间,你可以将第一个监控器节点 (ceph-mon1) 的新 monmap 文件复制到其他监控器节点,然后简单地将此新 monmap 注入到它们的 ceph 监控器实例中。
- 最后,在所有监控器节点上启动监控器服务。
1
2
3
4
5
6
7
8
9
| [root@ceph-mon1 ceph]# service ceph start mon
=== mon.ceph-mon1 ===
Starting Ceph mon.ceph-mon1 on ceph-mon1...
Starting ceph-create-keys on ceph-mon1...
[root@ceph-mon1 ceph]#
[root@ceph-mon1 ceph]# service ceph status mon
=== mon.ceph-mon1 ===
mon.ceph-mon1: running {"version":"0.80.9"}
[root@ceph-mon1 ceph]#
|
如果仍然看到监控器问题,你可以重新部署监控器节点
1
| [root@ceph-mon1 ceph]# ceph-deploy --overwrite-conf mon create ceph-mon3
|
1
2
3
4
5
6
7
8
9
| [root@ceph-mon3 ceph]# ceph -s
cluster 98d89661-f616-49eb-9ccf-84d720e179c0
health HEALTH_OK
monmap e4: 3 mons at {ceph-mon1=10.100.1.101:6789/0,ceph-mon2=10.100.1.102:6789/0,ceph-mon3=10.100.1.103:6789/0}, election epoch 18, quorum 0,1,2 ceph-mon1,ceph-mon2,ceph-mon3
osdmap e244: 55 osds: 54 up, 54 in
pgmap v693: 192 pgs, 3 pools, 0 bytes data, 0 objects
5327 MB used, 146 TB / 146 TB avail
192 active+clean
[root@ceph-mon3 ceph]#
|
这可能会给你一些关于 Ceph 监控器故障排除的想法。你也可以遵循 Ceph 文档中提到的更详细的步骤。