1
2
3
4
5
6
7
作者:李晓辉

联系方式:

1. 微信:Lxh_Chat

2. 邮箱:939958092@qq.com

Ceph存储集群容量扩容概述

可以通过两种方式扩展集群中的存储:

  • 添加额外 OSD 节点到集群,又称横向扩展

  • 添加额外存储空间到现有 OSD 节点,又称纵向扩展

使用 cephadm shell -- ceph health 命令确认集群是否已处于 HEALTH_OK 状态,然后再开始部署额外的 OSD。

添加更多的OSD服务器

作为存储管理员,可以向Ceph存储集群添加更多主机,以维护集群健康并提供足够的负载容量。在当前存储空间已满的情况下,可以通过增加一个或多个osd来增加集群存储容量。

分发ssh密钥

以 root 用户身份,将 Ceph 存储集群 SSH 公钥添加到新主机上 root 用户的 authorized_keys 文件。

1
[root@clienta ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@new-osd-1

检查并配置先决条件

更新inventory后,使用–limit选项运行preflight剧本,以限制剧本的任务只在指定的节点上运行

1
2
3
[root@clienta ~]# ansible-playbook -i /usr/share/cephadm-ansible/hosts/ \
/usr/share/cephadm-ansible/cephadm-preflight.yml \
--limit new-osd-1

选择添加主机的方法

使用命令

在 Cephadm shell 中,以 root 用户身份使用 ceph orch host add 命令将新主机添加到存储集群

1
[ceph: root@clienta /]# ceph orch host add new-osd-1 --labels=mon,osd,mgr

使用规范文件添加多个主机

要添加多个主机,创建一个包含主机描述的YAML文件,在管理容器中创建YAML文件,然后运行ceph orch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
service_type: host
addr:
hostname: new-osd-1
labels:
- mon
- osd
- mgr
---
service_type: host
addr:
hostname: new-osd-2
labels:
- mon
- osd

使用ceph orch apply添加OSD服务器

1
2
3
[ceph: root@adm ~]# ceph orch apply -i host.yaml
Added host 'new-osd-1' with addr '192.168.122.102'
Added host 'new-osd-1' with addr '192.168.122.103'

列出主机

从 cephadm shell 中使用 ceph orch host ls 列出集群节点。当主机在线并正常运行时,STATUS 列为空。

1
2
3
4
5
[ceph: root@adm /]# ceph orch host ls
HOST ADDR LABELS STATUS
existing-osd-1 192.168.122.101 mon
new-osd-1 192.168.122.102 mon osd mgr
new-osd-2 192.168.122.103 mon osd

为OSD服务器配置额外的OSD存储

Ceph 要求满足以下条件才能考虑使用存储设备:

  • 设备不得有分区。

  • 设备不得处于 LVM 状态。

  • 设备不得挂载。

  • 设备不得包含文件系统。

  • 设备不得包含 Ceph BlueStore OSD。

  • 设备必须大于 5 GB。

从 cephadm shell 运行 ceph orch device ls 命令,以列出可用设备。--wide 选项提供更多设备详细信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@serverc ~]# ceph orch device ls
Hostname Path Type Serial Size Health Ident Fault Available
clienta.lab.example.com /dev/vdb hdd 10.7G Unknown N/A N/A Yes
clienta.lab.example.com /dev/vdc hdd 10.7G Unknown N/A N/A Yes
clienta.lab.example.com /dev/vdd hdd 10.7G Unknown N/A N/A Yes
clienta.lab.example.com /dev/vde hdd 10.7G Unknown N/A N/A Yes
clienta.lab.example.com /dev/vdf hdd 10.7G Unknown N/A N/A Yes
serverc.lab.example.com /dev/vde hdd 10.7G Unknown N/A N/A Yes
serverc.lab.example.com /dev/vdf hdd 10.7G Unknown N/A N/A Yes
serverc.lab.example.com /dev/vdb hdd 10.7G Unknown N/A N/A No
serverc.lab.example.com /dev/vdc hdd 10.7G Unknown N/A N/A No
serverc.lab.example.com /dev/vdd hdd 10.7G Unknown N/A N/A No
serverd.lab.example.com /dev/vde hdd 10.7G Unknown N/A N/A Yes
serverd.lab.example.com /dev/vdf hdd 10.7G Unknown N/A N/A Yes
serverd.lab.example.com /dev/vdb hdd 10.7G Unknown N/A N/A No
serverd.lab.example.com /dev/vdc hdd 10.7G Unknown N/A N/A No
serverd.lab.example.com /dev/vdd hdd 10.7G Unknown N/A N/A No
servere.lab.example.com /dev/vde hdd 10.7G Unknown N/A N/A Yes
servere.lab.example.com /dev/vdf hdd 10.7G Unknown N/A N/A Yes
servere.lab.example.com /dev/vdb hdd 10.7G Unknown N/A N/A No
servere.lab.example.com /dev/vdc hdd 10.7G Unknown N/A N/A No
servere.lab.example.com /dev/vdd hdd 10.7G Unknown N/A N/A No

以 root 用户身份运行 ceph orch daemon add osd 命令,以便使用特定主机上的特定设备创建 OSD

可以看到,添加了osd服务后,vdf的状态就从yes变成了no

1
2
3
4
[root@serverc ~]# ceph orch daemon add osd servere.lab.example.com:/dev/vdf
Created osd(s) 9 on host 'servere.lab.example.com'
[root@serverc ~]# ceph orch device ls | grep servere | grep vdf
servere.lab.example.com /dev/vdf hdd 10.7G Unknown N/A N/A No

或者,运行 ceph orch apply osd --all-available-devices 命令,以便在所有可用和未使用的设备上部署 OSD

1
2
[root@serverc ~]# ceph orch apply osd --all-available-devices
Scheduled osd.all-available-devices update...

可以仅使用特定主机上的特定设备创建osd,下以下示例会在各主机上由 /dev/vdc 和 /dev/vdd 支持的组 default_drive_group 中创建两个 OSD

1
vim osd_spec.yml
1
2
3
4
5
6
7
8
9
10
11
12
service_type: osd
service_id: default_drive_group
placement:
hosts:
- serverc.lab.example.com
- serverd.lab.example.com
- servere.lab.example.com
data_devices:
paths:
- /dev/vdb
- /dev/vdc
- /dev/vdd

运行 ceph orch apply 命令来实现 YAML 文件中的配置。

1
2
[root@serverc ~]# ceph orch apply -i osd_spec.yml
Scheduled osd.default_drive_group update...

查询osd信息

使用 ceph osd tree 命令显示 CRUSH 树。验证新 OSD 在基础架构中的位置正确无误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@serverc ~]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.09796 root default
-3 0.02939 host serverc
0 hdd 0.00980 osd.0 up 1.00000 1.00000
1 hdd 0.00980 osd.1 up 1.00000 1.00000
2 hdd 0.00980 osd.2 up 1.00000 1.00000
-5 0.02939 host serverd
3 hdd 0.00980 osd.3 up 1.00000 1.00000
5 hdd 0.00980 osd.5 up 1.00000 1.00000
7 hdd 0.00980 osd.7 up 1.00000 1.00000
-7 0.03918 host servere
4 hdd 0.00980 osd.4 up 1.00000 1.00000
6 hdd 0.00980 osd.6 up 1.00000 1.00000
8 hdd 0.00980 osd.8 up 1.00000 1.00000
9 hdd 0.00980 osd.9 up 1.00000 1.00000

使用 ceph osd df 命令,验证数据使用量,以及每个 OSD 的放置组数量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@serverc ~]# ceph osd df
ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS
0 hdd 0.00980 1.00000 10 GiB 14 MiB 2.4 MiB 0 B 12 MiB 10 GiB 0.14 0.71 34 up
1 hdd 0.00980 1.00000 10 GiB 24 MiB 2.4 MiB 0 B 21 MiB 10 GiB 0.23 1.18 39 up
2 hdd 0.00980 1.00000 10 GiB 24 MiB 2.4 MiB 0 B 22 MiB 10 GiB 0.24 1.20 32 up
3 hdd 0.00980 1.00000 10 GiB 23 MiB 2.4 MiB 0 B 20 MiB 10 GiB 0.22 1.14 35 up
5 hdd 0.00980 1.00000 10 GiB 26 MiB 2.4 MiB 0 B 24 MiB 10 GiB 0.25 1.30 34 up
7 hdd 0.00980 1.00000 10 GiB 15 MiB 2.4 MiB 0 B 13 MiB 10 GiB 0.15 0.76 36 up
4 hdd 0.00980 1.00000 10 GiB 23 MiB 2.4 MiB 0 B 20 MiB 10 GiB 0.22 1.13 25 up
6 hdd 0.00980 1.00000 10 GiB 15 MiB 2.4 MiB 0 B 13 MiB 10 GiB 0.15 0.76 25 up
8 hdd 0.00980 1.00000 10 GiB 22 MiB 2.4 MiB 0 B 20 MiB 10 GiB 0.22 1.10 25 up
9 hdd 0.00980 1.00000 10 GiB 15 MiB 2.4 MiB 0 B 12 MiB 10 GiB 0.14 0.72 30 up
TOTAL 100 GiB 201 MiB 24 MiB 8.5 KiB 177 MiB 100 GiB 0.20
MIN/MAX VAR: 0.71/1.30 STDDEV: 0.04