这篇文章会记录管理 Ceph 集群的方法及在搭建和管理集群过程中遇到的一些问题及解决方案…


目录

  1. Ceph 集群管理
  2. 管理集群规模大小
    1. 增加减少 Monitor
      1. 增加 Monitor
      2. 减少 Monitor
    2. 增加减少 OSD
      1. 增加一个 OSD
      2. 移除一个 OSD
      3. 更换损坏的 OSD

Ceph 集群管理

管理集群规模大小

增加减少 Monitor

增加 Monitor

减少 Monitor

增加减少 OSD

增加一个 OSD

移除一个 OSD

更换损坏的 OSD

Ceph 的设计就是具有故障容忍性的. Ceph 可以在降级的状态进行操作而不会丢失数据. 例如, Ceph 在一个驱动器损坏的情况下仍能工作, 这时, 损坏的 OSD 上的数据在其他 OSD 上的副本会回填到另外的 OSDs 上, 即降级状态. 然而, 如果一个 OSD 损坏了, 你应该将其替换掉, 并重建该 OSD.

当 OSD 出故障了, 其状态会显示为 downin. Ceph 会提示健康度警告. Ceph 显示 OSD down 不一定就是 OSD 出故障了, 也有可能是心跳包或其他网络问题. Ceph 中 OSD 出故障了, 一般按照如下程序进行替换.

  1. 检查集群健康度.
1
[ceph@ceph0 ~]$ ceph -s
  1. 如果一个 OSD 显示为 down, 确定其在 **CRUSH ** 层级中的位置, 位于哪个节点上.
1
[ceph@ceph0 ~]$ ceph osd tree | grep -i down
  1. 登陆到有故障的 OSD 所在节点上, 尝试去重启 OSD.
1
2
[ceph@ceph0 ~]$ ssh bad-osd-node sudo systemctl restart ceph-osd@bad-osd-id
[ceph@ceph0 ~]$ ssh bad-osd-node sudo systemctl status ceph-osd@bad-osd-id

如果结果显示 OSD 运行正常, 查看其日志, 有可能是网络问题. 如果无法重启, 说明 驱动器很可能是损坏了.

  1. 检查故障 OSD 挂载点. 如果没法启动 OSD, 先看看挂载点是否还在, 如果不在, 可以重新挂载它.
1
[ceph@ceph0 ~]$ df -h

如果还是无法挂载. 说明, 很有可能驱动器损坏了. 需要利用工具查看驱动器的健康程度, 检查结果若真是损坏了, 我们就需要将其替换掉, 并重新建立一个 OSD.

  1. 执行如下命令来更换 OSD 在的硬盘.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
### 1. 标记 OSD 已经不在集群中.
[ceph@ceph0 ~]$ ceph osd out osd.<num>
### 2. 确保该 OSD 进程已经停止.
[ceph@ceph0 ~]$ ssh bad-osd-host systemctl stop ceph-osd@<osd-id>
### 3. 确保集群回填数据成功.
[ceph@ceph0 ~]$ ceph -w
### 4. 将 OSD 从 CRUSH map 中移除.
[ceph@ceph0 ~]$ ceph osd crush remove osd.<num>
### 5. 移除 OSD 认证密钥.
[ceph@ceph0 ~]$ ceph auth del osd.<num>
### 6. 将 OSD 从集群中移除.
[ceph@ceph0 ~]$ ceph osd rm osd.<num>
### 7. 卸载故障的驱动器.
[ceph@ceph0 ~]$ ssh bad-osd-node sudo umount /var/lib/ceph/{daemon}/{cluster}-{daemon-id}
### 8. 不支持热插拔, 需要将节点下线, 更换硬盘. 在此之前, 需要设置集群禁止回填数据.
[ceph@ceph0 ~]$ ceph osd set noout
### 9. 更换完毕硬盘后, 将节点启动上线, 移除 `noout` 设置.
[ceph@ceph0 ~]$ ceph osd unset noout
### 10. 找到 OSD 驱动器, 格式化硬盘. 例如.
[cepp@ceph0 ~]$ ssh bad-osd-host sudo mkfs.xfs /dev/sdd
  1. 重建 OSD. 见 增加一个 OSD
  2. 检查 CRUSH 层级, 确保没有问题.
1
[ceph@ceph0 ~]$ ceph osd tree

如果对 OSD 在 CRUSH 层级中的位置不满意, 可以将其移动到合适的地方.

1
[ceph@ceph0 ~]$ ceph osd crush move <bucket-to-move> <bucket-type>=<parent-bucket>
  1. 确保重建的 OSD 已经上线.
1
[ceph@ceph0 ~]$ ceph -s