ceph Fs即 ceph filesystem,可以实现文件系统共享功能(POSIX 标准),客户端通过 ceph协议挂载并使用 ceph 集群作为数据存储服务器
http://docs.ceph.org.cn/cephfs/
Ceph FS 需要运行 Meta Data Services(MDS)服务,其守护进程为 ceph-mds,ceph-mds进程管理与 cephFS 上存储的文件相关的元数据并协调对 ceph 存储集群的访问。
在 linux 系统使用 ls 等操作査看某个目录下的文件的时候,会有保存在磁盘上的分区表记录文件的名称、创建日期、大小、inode 及存储位置等元数据信息,
在 cephfs 由于数据是被打散为若干个离散的 object 进行分布式存储,因此并没有统一保存文件的元数据,而且将文件的元数据保存到一个单独的存储出 metadata pool
但是客户端并不能直接访问metadata pool 中的元数据信息,而是在读写数的时候有 MDS(metadata server)进行处理。
读数据的时候有 MDS从metadata pool加载元数据然后缓存在内存(用于后期快速响应其它客户端的请求)并返回给客户端,写数据的时候有 MDS 缓存在内存并同步到 metadata pool
#cephfs 的 mds 的数据结构类似于 linux 系统的根形目录结构及 nginx 中的缓存目录分层一样.
![]()
![]()
部署MDS
#部署MDS服务
Ubuntu :
root@ceph-mgr1:~# apt-cache madison ceph-mds
ceph-mds | 16.2.15-1focal | https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific focal/main amd64 Packages
ceph-mds | 15.2.17-0ubuntu0.20.04.6 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-updates/main amd64 Packages
ceph-mds | 15.2.17-0ubuntu0.20.04.6 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/main amd64 Packages
ceph-mds | 15.2.1-0ubuntu1 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/main amd64 Packages
root@ceph-mgr1:~# apt install ceph-mds
CentOS:yum install ceph-mds
cephadmin@ceph-deploy:~$ ceph-deploy mds create ceph-mgr1
#创建 CephFS metadata 和 data 存储池:
#使用 CephFS 之前需要事先于集群中创建一个文件系统,并为其分别指定元数据和数据相关的存储池。下面创建一个名为 cephfs 的文件系统用于测试,
#它使用 cephfs-metadata为元数据存储池,使用 cephfs-data 为数据存储池:
cephadmin@ceph-deploy:~$ ceph osd pool create cephfs-metadata 32 32
cephadmin@ceph-deploy:~$ ceph osd pool create cephfs-data 64 64
cephadmin@ceph-deploy:~$ ceph osd pool ls
device_health_metrics
mypool
cephfs-metadata
cephfs-data
rbd-ibm
##创建cephFS 并验证
cephadmin@ceph-deploy:~$ ceph fs new mycephfs cephfs-metadata cephfs-data
cephadmin@ceph-deploy:~$ ceph fs ls
name: mycephfs, metadata pool: cephfs-metadata, data pools: [cephfs-data ]
cephadmin@ceph-deploy:~$ ceph fs status mycephfs
mycephfs - 0 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active ceph-mgr1 Reqs: 0 /s 14 14 12 0
POOL TYPE USED AVAIL
cephfs-metadata metadata 315k 84.3G
cephfs-data data 300M 84.3G
MDS version: ceph version 16.2.15 (618f440892089921c3e944a991122ddc44e60516) pacific (stable)
##验证cephFS服务状态
cephadmin@ceph-deploy:~$ ceph mds stat
mycephfs:1 {0=ceph-mgr1=up:active}
##创建客户端账户
cephadmin@ceph-deploy:~$ ceph auth add client.cadzzz mon 'allow r' mds 'allow rw' osd 'allow rwx pool=cephfs-data'
added key for client.cadzzz
cephadmin@ceph-deploy:~$ ceph auth get client.cadzzz
[client.cadzzz]
key = AQAWq/Jlf+6ZLhAAr6ClV7deNoHCHxNfTZiOmA==
caps mds = "allow rw"
caps mon = "allow r"
caps osd = "allow rwx pool=cephfs-data"
exported keyring for client.cadzzz
cephadmin@ceph-deploy:~$ ceph auth get client.cadzzz -o ceph.client.cadzzz.keyring
exported keyring for client.cadzzz
cephadmin@ceph-deploy:~$ ceph auth print-key client.cadzzz > cadzzz.key
cephadmin@ceph-deploy:~$ cat ceph.client.cadzzz.keyring
[client.cadzzz]
key = AQAWq/Jlf+6ZLhAAr6ClV7deNoHCHxNfTZiOmA==
caps mds = "allow rw"
caps mon = "allow r"
caps osd = "allow rwx pool=cephfs-data"
##安装ceph客户端
[root@k8s-haproxy02 ~]# yum install epel-release
[root@k8s-haproxy02 ~]# yum install -y https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm
[root@k8s-haproxy02 ~]# yum install -y ceph-common
cephadmin@ceph-deploy:~$ scp ceph.conf ceph.client.cadzzz.keyring root@192.168.40.110:/etc/ceph #从部署服务器同步认证文件
#验证客户端权限
[root@k8s-haproxy02 ~]# ceph --user cadzzz -s
cluster:
id: 0d8fb726-ee6d-4aaf-aeca-54c68e2584af
health: HEALTH_WARN
1 pool(s) do not have an application enabled
services:
mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 29h)
mgr: ceph-mgr1(active, since 29h), standbys: ceph-mgr2
mds: 1/1 daemons up
osd: 9 osds: 9 up (since 29h), 9 in (since 2d)
data:
volumes: 1/1 healthy
pools: 6 pools, 225 pgs
objects: 136 objects, 268 MiB
usage: 3.3 GiB used, 267 GiB / 270 GiB avail
pgs: 225 active+clean
内核空间挂载ceph-fs
#客户端挂载有两种方式:
一是内核空间
一是用户空间,内核空间挂载需要内核支持 ceph 模块,用户空间挂载需要安装 ceph-fuse
#客户端通过key文件挂载
[root@k8s-haproxy02 ~]# cat /etc/ceph/cadzzz.key
AQAWq/Jlf+6ZLhAAr6ClV7deNoHCHxNfTZiOmA==
[root@k8s-haproxy02 ~]# mount -t ceph 192.168.40.151:6789,192.168.40.152:6789,192.168.40.153:6789:/ /gali -o name=cadzzz,secretfile=/etc/ceph/cadzzz.key
或者
[root@k8s-haproxy02 ~]# mount -t ceph 192.168.40.151:6789,192.168.40.152:6789,192.168.40.153:6789:/ /gali -o name=cadzzz,secret=AQAWq/Jlf+6ZLhAAr6ClV7deNoHCHxNfTZiOmA==
[root@k8s-haproxy02 ~]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
192.168.40.151:6789,192.168.40.152:6789,192.168.40.153:6789:/ ceph 91G 105M 91G 1% /gali #这里有数据之前实验写入过数据的
#验证写入数据
[root@k8s-haproxy02 gali]# cp /etc/passwd /gali/
[root@k8s-haproxy02 gali]# dd if=/dev/zero of=/gali/new-testfile bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.686861 s, 305 MB/s
[root@k8s-haproxy02 gali]# ll
total 307202
-rw-r--r-- 1 root root 104857600 Mar 12 10:19 ceph-fs-testfile
-rw-r--r-- 1 root root 209715200 Mar 14 16:01 new-testfile
-rw-r--r-- 1 root root 1135 Mar 14 16:00 passwd
#开机挂载
[root@k8s-haproxy02 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Nov 14 17:15:55 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=034dcc55-8298-49c0-b442-4780ff9420ed /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
192.168.40.151:6789,192.168.40.152:6789,192.168.40.153:6789:/ /gali ceph defaults,name=cadzzz,secretfile=/etc/ceph/cadzzz.key,_netdev 0 0
#重启服务 验证是否正常挂载服务
[root@k8s-haproxy02 ~]# reboot
[root@k8s-haproxy02 ~]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.1G 0 1.1G 0% /dev
tmpfs tmpfs 1.1G 0 1.1G 0% /dev/shm
tmpfs tmpfs 1.1G 11M 1.1G 1% /run
tmpfs tmpfs 1.1G 0 1.1G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 19G 3.1G 16G 17% /
/dev/sda1 xfs 1.1G 144M 920M 14% /boot
192.168.40.151:6789,192.168.40.152:6789,192.168.40.153:6789:/ ceph 91G 315M 91G 1% /gali
tmpfs tmpfs 208M 0 208M 0% /run/user/0
#查看存储情况
#cephfs-data 4 64 300 MiB 76 900 MiB 0.35 84 GiB 因为存了3份 300M*3=900M
cephadmin@ceph-deploy:~$ ceph df
--- RAW STORAGE ---
CLASS SIZE AVAIL USED RAW USED %RAW USED
hdd 270 GiB 266 GiB 3.9 GiB 3.9 GiB 1.46
TOTAL 270 GiB 266 GiB 3.9 GiB 3.9 GiB 1.46
--- POOLS ---
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
device_health_metrics 1 1 0 B 0 0 B 0 84 GiB
mypool 2 64 628 B 2 12 KiB 0 84 GiB
cephfs-metadata 3 32 102 KiB 23 399 KiB 0 84 GiB
cephfs-data 4 64 300 MiB 76 900 MiB 0.35 84 GiB
rbd-ibm 6 32 157 MiB 86 446 MiB 0.17 84 GiB
cephfs-metadatat 7 32 0 B 0 0 B 0 84 GiB
#客户端模块
#客户端内核加载ceph.ko 模块挂载cephfs文件系统
[root@k8s-haproxy02 ~]# lsmod | grep ceph
ceph 363016 1
libceph 306750 1 ceph
dns_resolver 13140 1 libceph
libcrc32c 12644 4 xfs,ip_vs,libceph,nf_conntrack
#description: Ceph filesystem for Linux
[root@k8s-haproxy02 ~]# modinfo ceph
filename: /lib/modules/3.10.0-1160.el7.x86_64/kernel/fs/ceph/ceph.ko.xz
license: GPL
description: Ceph filesystem for Linux
author: Patience Warnick <patience@newdream.net>
author: Yehuda Sadeh <yehuda@hq.newdream.net>
author: Sage Weil <sage@newdream.net>
alias: fs-ceph
retpoline: Y
rhelversion: 7.9
srcversion: EB765DDC1F7F8219F09D34C
depends: libceph
intree: Y
vermagic: 3.10.0-1160.el7.x86_64 SMP mod_unload modversions
signer: CentOS Linux kernel signing key
sig_key: E1:FD:B0:E2:A7:E8:61:A1:D1:CA:80:A2:3D:CF:0D:BA:3A:A4:AD:F5
sig_hashalgo: sha256
用户空间挂载ceph-fs(ceph-fuse)
#如果内核本较低而没有 ceph 模块,那么可以安装 ceph-fuse 挂载,但是推荐使用内核模块挂载。
##卸载/gali
[root@k8s-haproxy02 ~]# umount /gali
##安装 ceph-fuse:
#可以再一台新的服务器 实验使用之前的
[root@k8s-haproxy02 ~]# yum install epel-release
[root@k8s-haproxy02 ~]# yum install -y https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm
[root@k8s-haproxy02 ~]# yum install -y ceph-common
cephadmin@ceph-deploy:~$ scp ceph.conf ceph.client.cadzzz.keyring root@192.168.40.110:/etc/ceph #从部署服务器同步认证文件
#ceph-fuse挂载
[root@k8s-haproxy02 ~]# mkdir /tablo
[root@k8s-haproxy02 ~]# ceph-fuse --name client.cadzzz -m 192.168.40.151:6789,192.168.40.152:6789,192.168.40.153:6789 /tablo
ceph-fuse[2024-03-14T16:25:24.445+0800 7f3ebbc54f40 -1 init, newargv = 0x556cc6270810 newargc=9
1472]: starting ceph client
ceph-fuse[1472]: starting fuse
#可以看到把刚刚的目录重新挂载到了服务器上
[root@k8s-haproxy02 ~]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.1G 0 1.1G 0% /dev
tmpfs tmpfs 1.1G 0 1.1G 0% /dev/shm
tmpfs tmpfs 1.1G 11M 1.1G 1% /run
tmpfs tmpfs 1.1G 0 1.1G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 19G 3.1G 16G 17% /
/dev/sda1 xfs 1.1G 144M 920M 14% /boot
tmpfs tmpfs 208M 0 208M 0% /run/user/0
ceph-fuse fuse.ceph-fuse 91G 315M 91G 1% /tablo
[root@k8s-haproxy02 ~]# ll /tablo/
total 307202
-rw-r--r-- 1 root root 104857600 Mar 12 10:19 ceph-fs-testfile
-rw-r--r-- 1 root root 209715200 Mar 14 16:01 new-testfile
-rw-r--r-- 1 root root 1135 Mar 14 16:00 passwd
#验证读写
[root@k8s-haproxy02 tablo]# cd /tablo/
[root@k8s-haproxy02 tablo]# dd if=/dev/zero of=/tablo/tablo-testfile bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.0228906 s, 458 MB/s
[root@k8s-haproxy02 tablo]# ll
total 317442
-rw-r--r-- 1 root root 104857600 Mar 12 10:19 ceph-fs-testfile
-rw-r--r-- 1 root root 209715200 Mar 14 16:01 new-testfile
-rw-r--r-- 1 root root 1135 Mar 14 16:00 passwd
-rw-r--r-- 1 root root 10485760 Mar 14 16:29 tablo-testfile
##开机挂载 指定用户会自动根据用户名称加载授权文件及配置文件ceph.conf
[root@k8s-haproxy02 tablo]# vim /etc/fstab
[root@k8s-haproxy02 tablo]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Nov 14 17:15:55 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=034dcc55-8298-49c0-b442-4780ff9420ed /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
#192.168.40.151:6789,192.168.40.152:6789,192.168.40.153:6789:/ /gali ceph defaults,name=cadzzz,secretfile=/etc/ceph/cadzzz.key,_netdev 0 0
none /tablo fuse.ceph ceph.id=cadzzz,ceph.conf=/etc/ceph/ceph.conf,_netdev,defaults 0 0
[root@k8s-haproxy02 tablo]# cd
[root@k8s-haproxy02 ~]# umount /tablo/
[root@k8s-haproxy02 ~]# mount -a
ceph-fuse[1596]: starting ceph client2024-03-14T16:32:50.086+0800 7ff303219f40 -1 init, newargv = 0x560bf121b5d0 newargc=11
ceph-fuse[1596]: starting fuse
[root@k8s-haproxy02 ~]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.1G 0 1.1G 0% /dev
tmpfs tmpfs 1.1G 0 1.1G 0% /dev/shm
tmpfs tmpfs 1.1G 11M 1.1G 1% /run
tmpfs tmpfs 1.1G 0 1.1G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 19G 3.1G 16G 17% /
/dev/sda1 xfs 1.1G 144M 920M 14% /boot
tmpfs tmpfs 208M 0 208M 0% /run/user/0
ceph-fuse fuse.ceph-fuse 91G 0 91G 0% /tablo