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


目录

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

Ceph 集群管理

管理集群规模大小

增加减少 Monitor

增加 Monitor

减少 Monitor

增加减少 OSD

增加一个 OSD

  1. 创建 OSD。
1
[ceph@ceph0 ~]$ ceph osd create [<osd-uuid> [<osd-id>]]
  1. 创建新 OSD 默认目录,如果不是 root 用户,需要修改目录权限
1
2
[ceph@ceph0 ~]$ ssh new-osd-host sudo mkdir /var/lib/ceph/osd/ceph-<new-osd-id>
[ceph@ceph0 ~]$ ssh new-osd-host sudo chown -R ceph:ceph /var/lib/ceph/osd/ceph-<new-osd-id>
  1. 一般如果硬盘不是用作系统盘,可以格式化,并挂载到刚建立的 ceph 目录上。
1
2
[ceph@ceph0 ~]$ ssh new-osd-host sudo mkfs -t xfs /dev/{driver-for-ceph}
[ceph@ceph0 ~]$ ssh new-osd-host sudo mount -o user_xattr /dev/{driver-for-ceph} /var/lib/ceph/osd/ceph-<new-osd-id>
  1. 初始化 OSD 数据目录,OSD 目录下必须是空的。
1
[ceph@ceph0 ~]$ ssh new-osd-host ceph-osd -i <osd-id> --mkfs --mkkey
  1. 注册新的 OSD。
1
[ceph@ceph0 ~]$
  1. 添加新的 OSD 到 CRUSH map 中。
1
[ceph@ceph0 ~]$

移除一个 OSD

更换 OSD 1

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

更换 OSD 2