概述
通过 Docker 搭建一个 Ceph 集群,同时提供 CephFS 供测试使用。
操作步骤
安装下面必要的软件,其中 cephadm 是用来创建 Ceph 集群的工具,ceph-common 和 ceph 的软件包里还包含了挂载需要的客户端以及 lib 库。
1
2
3
4
|
# 主要的工具
yum install -y cephadm
# 如果有软件冲突的话,可以参考下面的例子,默认机器已经有docker相关的组件
yum install -y --exclude=docker-runc cephadm ceph-common ceph
|
创建Mon
最基本的,需要一个磁盘,这个磁盘可以是 LVM,甚至也可以是一块空的 U 盘,一般来说副本数要3,所以可以按下面要求创建3个 LVM 的 OSD,当然了如果设备有限,或者仅仅用于测试,直接创建一个 OSD 也能用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# 根据机器的磁盘配置
lsblk
# 视情况调整目录大小,下面的命令仅供参考
umount -l /home
lvremove /dev/openeuler/home
lvremove /dev/openeuler/data-0
lvreduce -L 100G /dev/openeuler/home
resize2fs /dev/openeuler/home 100G
# 删除逻辑分区
lvremove /dev/openeuler/data-0
# 创建
lvcreate -n data-0 -L 10G openeuler
# 注意IP是当前主机的IP,--allow-overwrite
cephadm bootstrap --mon-ip 192.168.1.203
# 加入集群
ceph orch daemon add osd node3:/dev/openeuler/data-0
ceph orch daemon add osd node3:/dev/openeuler/data-1
ceph orch daemon add osd node3:/dev/openeuler/data-2
ceph orch daemon add osd node3:/dev/sda1
|
有可能会遇到网络问题,此时需要代理或者提前离线将 Ceph 的相关镜像导入到宿主机,因为 cephadm 会去拉取镜像,大致如下,可以看到像 quay.io 这些域名有可能会被墙掉导致无法正常下载,这个时候就需要通过代理或者其他方式先提前下载好镜像了。
1
2
3
4
|
[root@node1 tmp]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
quay.io/ceph/ceph v16 45b8e27a4d95 2 weeks ago 1.19GB
quay.io/ceph/ceph-grafana 8.3.5 dad864ee21e9 23 months ago 558MB
|
基本上,执行上述脚本之后,就可以启动一个 Ceph 集群了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
Ceph Dashboard is now available at:
URL: https://node2:8443/
User: admin
Password: klz4e2wva7
Enabling client.admin keyring and conf on hosts with "admin" label
You can access the Ceph CLI with:
sudo /usr/sbin/cephadm shell --fsid cfb48a42-29f3-11ef-acb1-00e2696b7728 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring
Please consider enabling telemetry to help improve Ceph:
ceph telemetry on
For more information see:
https://docs.ceph.com/docs/pacific/mgr/telemetry/
|
删除集群
因为是测试,所以给的容量特别小,如果对配置不满意,还可以推倒重来。
1
2
3
4
|
# 为了破坏集群并删除该集群中存储的所有数据,请暂停cephadm以避免部署新的守护进程。
ceph orch pause
# 清除集群中所有主机的ceph守护进程
cephadm rm-cluster --force --zap-osds --fsid `ceph fsid`
|
开启CephFS
通过调整 pool 的 size,允许 Ceph 支持单独一个 OSD 也能正常挂载,毕竟资源有限,仅仅是用来测试的集群,可以不要求高可用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 创建mds进程
ceph orch apply mds mycephfs
# 创建文件系统
ceph fs volume create mycephfs
# 上面的命令一条抵下面三条
ceph osd pool create mycephfs_data
ceph osd pool create mycephfs_metadata
ceph fs new mycephfs mycephfs_metadata mycephfs_data
# 简单查看一下
ceph mds stat
# 调整一下参数
ceph config set mon mon_allow_pool_size_one true
ceph osd lspools
ceph osd pool set cephfs.mycephfs.data size 1 --yes-i-really-mean-it
ceph osd pool set cephfs.mycephfs.meta size 1 --yes-i-really-mean-it
ceph osd pool set device_health_metrics size 1 --yes-i-really-mean-it
ceph osd pool set cephfs.csi.meta size 1 --yes-i-really-mean-it
ceph osd pool set cephfs.csi.data size 1 --yes-i-really-mean-it
# 删除文件系统
ceph fs rm cephfs --yes-i-really-mean-it
|
下面分别是内核态和用户态的挂载命令,建议在其他机器尝试,前提也是需要安装 ceph, ceph-common 这些包。
1
2
3
4
|
# 内核态挂载
mount -t ceph 192.168.1.203:6789:/ /mnt/cephfs -o name=admin,secret=AQBM6GxmGRxSIxAA7GlYP4DhoIWAHDh07Ej1/g==
# 用户态挂载
ceph-fuse -n client.admin /mnt/cephfs -r /
|
最后可以查看一下通过 cephadm 部署的 Docker 版的 Ceph 集群都拉起了什么容器。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
d1135833bdfc quay.io/ceph/ceph "/usr/bin/ceph-osd -…" 4 minutes ago Up 4 minutes ceph-43db6952-e4cd-11ee-a269-00e269695ced-osd-0
0e24ba5c7dc6 quay.io/ceph/ceph "/usr/bin/ceph-mds -…" 12 minutes ago Up 12 minutes ceph-43db6952-e4cd-11ee-a269-00e269695ced-mds-mycephfs-node1-atmven
0a88a61848ba quay.io/ceph/ceph "/usr/bin/ceph-mds -…" 12 minutes ago Up 12 minutes ceph-43db6952-e4cd-11ee-a269-00e269695ced-mds-mycephfs-node1-ivsvry
5c820ceffbcd quay.io/prometheus/alertmanager:v0.23.0 "/bin/alertmanager -…" 13 minutes ago Up 13 minutes ceph-43db6952-e4cd-11ee-a269-00e269695ced-alertmanager-node1
ebf5613d5eba quay.io/ceph/ceph-grafana:8.3.5 "/bin/sh -c 'grafana…" 13 minutes ago Up 13 minutes ceph-43db6952-e4cd-11ee-a269-00e269695ced-grafana-node1
02c2999ad3a6 quay.io/prometheus/prometheus:v2.33.4 "/bin/prometheus --c…" 13 minutes ago Up 13 minutes ceph-43db6952-e4cd-11ee-a269-00e269695ced-prometheus-node1
395f51494294 quay.io/prometheus/node-exporter:v1.3.1 "/bin/node_exporter …" 14 minutes ago Up 14 minutes ceph-43db6952-e4cd-11ee-a269-00e269695ced-node-exporter-node1
36ac9d7e5888 quay.io/ceph/ceph "/usr/bin/ceph-crash…" 14 minutes ago Up 14 minutes ceph-43db6952-e4cd-11ee-a269-00e269695ced-crash-node1
bcf9559eced6 quay.io/ceph/ceph:v16 "/usr/bin/ceph-mgr -…" 15 minutes ago Up 15 minutes ceph-43db6952-e4cd-11ee-a269-00e269695ced-mgr-node1-aosvgz
0b6b6c49c294 quay.io/ceph/ceph:v16 "/usr/bin/ceph-mon -…" 15 minutes ago Up 15 minutes ceph-43db6952-e4cd-11ee-a269-00e269695ced-mon-node1
# ceph -s
cluster:
id: 43db6952-e4cd-11ee-a269-00e269695ced
health: HEALTH_WARN
4 pool(s) have no replicas configured
OSD count 1 < osd_pool_default_size 3
services:
mon: 1 daemons, quorum node1 (age 7h)
mgr: node1.aosvgz(active, since 6h)
mds: 2/2 daemons up, 2 standby
osd: 1 osds: 1 up (since 6h), 1 in (since 6h)
data:
volumes: 2/2 healthy
pools: 4 pools, 224 pgs
objects: 49 objects, 166 KiB
usage: 295 MiB used, 9.7 GiB / 10 GiB avail
pgs: 224 active+clean
|
常见问题
Device /dev/sda1 has a filesystem.
往 Ceph 集群添加新的硬盘和 OSD 的时候报错,是因为新增的磁盘内有文件系统,此时只需要把文件系统删除即可。
1
2
3
4
|
# 执行报错
ceph orch daemon add osd node3:/dev/sda1
# 解决方案
sudo wipefs -a /dev/sda1
|
ceph-volume lvm batch: error: /dev/sda1 is a partition, please pass LVs or raw block devices.
1
2
3
4
|
# 执行报错
ceph orch daemon add osd node3:/dev/sda1
# 解决方案
ceph orch daemon add osd node3:/dev/sda1 raw
|
因为 /dev/sda1 是 /dev/sda 的分区,通过 fdisk 命令删除分区,通过 raw 选项添加即可
Device /dev/sda has partitions.
需要删除 /dev/sda 上的分区。
1
2
3
4
|
# 执行报错
ceph orch daemon add osd node3:/dev/sda
# 解决方案
fdisk /dev/sda
|
总结
至此,一个简单的单节点 Ceph 就成功拉起了,仅仅是用到了 Docker 和一个区区 10G 的 LVM。
参考资料
- docker搭建单机ceph集群
- ceph-container
- 第一篇: 用Docker搭建Ceph集群(nautilus版本)
- How to create a Ceph cluster on a single machine
- One Node Cluster
- 【ceph】ceph osd blacklist cep黑名单|MDS问题分析
- openEuler 22.03 LTS x86_64 cephadm 部署ceph16.2.14【4】重装 内网 离线部署 解决ceph orch device ls 没有数据返回问题!(安装不完整)
警告
本文最后更新于 2024年3月18日,文中内容可能已过时,请谨慎参考。