目录

Docker搭建Ceph集群

概述

通过 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。

参考资料

  1. docker搭建单机ceph集群
  2. ceph-container
  3. 第一篇: 用Docker搭建Ceph集群(nautilus版本)
  4. How to create a Ceph cluster on a single machine
  5. One Node Cluster
  6. 【ceph】ceph osd blacklist cep黑名单|MDS问题分析
  7. openEuler 22.03 LTS x86_64 cephadm 部署ceph16.2.14【4】重装 内网 离线部署 解决ceph orch device ls 没有数据返回问题!(安装不完整)
警告
本文最后更新于 2024年3月18日,文中内容可能已过时,请谨慎参考。