继续创作,加速生长!这是我参加「日新计划 10 月更文应战」的第12天,点击检查活动详情
Ceph集群CephFS文件存储中心概念及布置运用
1.CephFS文件存储中心概念
1.1.CephFS文件存储简介
官方文档:docs.ceph.com/en/pacific/…
传统的文件存储一般运用的是NAS存储,经过NFS协议来完成,NFS类型的文件存储能够一起同享给多个客户端运用,传输协议简略,只需有网络就能够完成。
关于存储而言,高可用性是有必要具有的,一旦存储宕机,就会影响运用程序的运用,而NAS存储最典型的缺陷便是单点故障。
在Ceph分布式存储体系中有关于文件存储的存储类型,称之为CephFS,CephFS是一个符合POSIX的文件体系,构建在Ceph目标存储Rados之上,CephFS能够为各种运用程序供给最先进的、多用途、高可用性和高功能的文件存储。
CephFS文件体系至少需求一个MDS(Metadata Server组件)来存储文件体系的元数据信息,因此在运用CephFS文件存储之前,首要要在集群中布置MDS组件,我们期望CephFS文件存储具有高可用性,所以MDS组件一般都会在集群中布置多个,大多数情况下都是三个MDS组件。
CephFS支撑用户等级和内核等级的挂载运用,可扩展性极高,而且能够一起让多个Client客户端进行读写。
简而言之:CephFS文件存储便是供给相似NFS服务的同享存储体系,相当于根据NFS的分布式文件存储体系,多个客户端能够一起去挂载这个文件存储体系,而且还能够供给高可靠服务。
1.2.CephFS文件存储架构
CephFS文件体系的中心组件有:
-
MDS:MDS组件主要用于保存文件的元数据信息,会独自寄存在一个Pool资源池中。
- MDS支撑高可用性,默认采用主备形式,也能够装备成多主形式。
-
Client:客户端。
-
RADOS:CephFS也是根据RADOS来完成文件存储的,CephFS文件存储中的文件数据与文件的元数据都是独自在不同的Pool资源池中存储的。
Ceph集群假如想要完成CephFS文件存储,首要需求在集群中预备MDS组件,MDS组件主要是来保存文件存储中文件的元数据信息,一般会布置三个MDS组件,构成高可用形式,其间一个MDS的Active状况供给服务,别的两个都是Standby的状况,当Active状况的MDS挂掉后,Standby状况的MDS之间会就进行推举,推举成功的MDS节点就会成为集群中的Active。
MDS组件会将文件的元数据信息写在Journal日志中,最终Journal日志中的文件元数据信息会写入到一个Metadata的Pool资源池中,一切的MDS节点都会连接这个Pool资源池,而且MDS各节点之间会交流元数据信息,当Active状况的MDS组件挂掉了,推举出来的MDS会从Metadata Pool资源池获取整个集群中一切文件的元数据信息。
CephFS会将用户写入的文件数据与文件的元数据分隔寄存在不同的Pool资源池中,将数据与元数据分隔存储。
Client客户端能够直接在寄存数据的Pool资源池中写入文件数据,写入的文件依旧会被拆分成多个Object目标文件,这些Object目标文件写入到PG中,最后经过CRUSH算法存储在多个OSD中。
1.3.CephFS文件体系的运用场景与特性
运用场景:
- 为K8S集群Pod资源供给耐久化存储。
- 多个服务器一起挂载一个文件体系,一起进行读写。
CephFS文件体系多MDS的优势及特色:
- 当元数据默认的单个MDS成为瓶颈时,装备多个活泼的MDS看护进程,提高集群功能。
- 多个活泼的MDS有利于功能提高。
- 多个活泼的MDS能够完成MDS负载均衡。
- 多个活泼的MDS能够完成多租户资源隔离。
- 它能够将文件体系树分割成子树,每个子树能够交给特定的MDS进行权威办理,然后达到了跟着元数据服务器数量的添加,集群功能线性地扩展。
- 每个子树都是根据元数据在给定目录树中的热动态创立的。
- 一旦创立了子树,它的元数据就被迁移到一个未加载的MDS。
- 后续客户端对先前授权的MDS的恳求被转发。
2.在Ceph集群中布置MDS组件
1.在集群一切节点都装置mds组件
yum -y install ceph-mds
2.将一切的ceph节点都布置mds组件构成高可用集群
[root@ceph-node-1 ~]# cd /data/ceph-deploy/
[root@ceph-node-1 ceph-deploy]# ceph-deploy mds create ceph-node-1 ceph-node-2 ceph-node-3
3.检查集群状况
[root@ceph-node-1 ceph-deploy]# ceph -s
cluster:
id: a5ec192a-8d13-4624-b253-5b350a616041
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-node-1,ceph-node-2,ceph-node-3 (age 19h)
mgr: ceph-node-1(active, since 19h), standbys: ceph-node-2, ceph-node-3
mds: 3 up:standby
osd: 6 osds: 6 up (since 18h), 6 in (since 18h)
rgw: 1 daemon active (ceph-node-1)
task status:
data:
pools: 7 pools, 320 pgs
objects: 252 objects, 161 KiB
usage: 6.1 GiB used, 54 GiB / 60 GiB avail
pgs: 320 active+clean
能够看到集群中已经有3个MDS组件了,但是状况都处于standby,那是因为集群中还没有创立CephFS文件体系,导致MDS组件无法推举。
3.在Ceph集群中创立一个CephFS文件存储体系
一个Cephfs文件存储体系至少需求两个Rados资源池,一个资源池用于寄存文件数据,另一个资源池用于寄存文件的元数据信息,假如元数据资源池中的任何数据丢掉,都有可能导致整个文件体系无法访问。
对元数据资源池主张运用较低推迟的OSD,例如能够运用SSD硬盘的OSD,元数据资源池的推迟直接会影响在客户端中文件体系操作的推迟。
3.1.为CephFS文件存储体系创立Pool资源池
创立好这两个Pool资源池后,只能为一个cephfs文件存储体系运用,假如集群中需求创立多个cephfs文件体系,则需求创立多个元数据池和数据池,一个元数据资源池和数据资源池只能为一个Cephfs文件体系供给运用。
1.创立元数据资源池
[root@ceph-node-1 ~]# ceph osd pool create cephfs_metadata 16 16
pool 'cephfs_metadata' created
2.创立数据资源池
[root@ceph-node-1 ~]# ceph osd pool create cephfs_data 16 16
pool 'cephfs_data' created
3.检查创立的资源池
[root@ceph-node-1 ~]# ceph osd lspools
1 ceph-rbd-data
2 .rgw.root
3 default.rgw.control
4 default.rgw.meta
5 default.rgw.log
6 default.rgw.buckets.index
7 default.rgw.buckets.data
8 cephfs_metadata
9 cephfs_data
3.2.创立CephFS文件体系
指令格局:ceph fs new {cephfs_name} {metadata_pool} {data_pool}
1.创立cephfs文件存储
[root@ceph-node-1 ~]# ceph fs new cephfs-storage cephfs_metadata cephfs_data
new fs with metadata pool 8 and data pool 9
2.检查创立的cephfs文件存储
[root@ceph-node-1 ~]# ceph fs ls
name: cephfs-storage, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
[root@ceph-node-1 ~]# ceph fs volume ls
[
{
"name": "cephfs-storage"
}
]
3.3.再次调查Ceph集群的状况
[root@ceph-node-1 ~]# ceph -s
cluster:
id: a5ec192a-8d13-4624-b253-5b350a616041
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-node-1,ceph-node-2,ceph-node-3 (age 24h)
mgr: ceph-node-1(active, since 24h), standbys: ceph-node-2, ceph-node-3
mds: cephfs-storage:1 {0=ceph-node-1=up:active} 2 up:standby #当创立完cephfs文件体系后,mds组件主动推举一个mds组件为active状况,其余为standby状况
osd: 6 osds: 6 up (since 23h), 6 in (since 23h)
rgw: 1 daemon active (ceph-node-1)
task status:
data:
pools: 9 pools, 352 pgs
objects: 274 objects, 164 KiB
usage: 6.1 GiB used, 54 GiB / 60 GiB avail
pgs: 352 active+clean
4.内核等级挂载CephFS文件体系
挂载的操作文档:docs.ceph.com/en/pacific/…
4.1.无需认证的方法挂载CephFS文件体系
1)在客户端中创立挂载目录
[root@ceph-node-1 ~]# mkdir /cephfs_data
2)运用内核等级挂载Cephfs文件体系
CephFS体系能够理解为也是一个磁盘,类型是ceph的类型,直接能够经过mount指令进行挂载。
指令格局:mount -t ceph {monitor_addr}:/ /{path} -o name=admin
挂载时最好指定一切monitor组件的地址,否则当有一个monitor组件发生问题,就会影响挂载。
1.首要承认mount是否支撑ceph类型的文件体系,假如不支撑则去装置ceph-common包
[root@ceph-node-1 ~]# which mount.ceph
/usr/sbin/mount.ceph
2.挂载cephfs文件体系
[root@ceph-node-1 ~]# mount -t ceph 192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ /cephfs_data/ -o name=admin
#这个admin用户是ceph集群默认的用户,不需求指定secret key
3.检查是否挂载成功
[root@ceph-node-1 ~]# df -hT /cephfs_data/
文件体系 类型 容量 已用 可用 已用% 挂载点
192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ ceph 17G 0 17G 0% /cephfs_data
4.此时就能够在挂载目录中写入数据了。
4.2.运用认证方法挂载CephFS文件体系
1.获取admin用户的Key
[root@ceph-node-1 ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQBIWUhiEmaFOBAA6Jr6itUeHiLVVOeYFVpRog==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
2.经过认证方法挂载CephFS文件体系
[root@ceph-node-1 ~]# mount -t ceph 192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ /cephfs_data/ -o name=admin,secret=AQBIWUhiEmaFOBAA6Jr6itUeHiLVVOeYFVpRog==
3.检查是否挂载成功
[root@ceph-node-1 ~]# df -hT /cephfs_data/
文件体系 类型 容量 已用 可用 已用% 挂载点
192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ ceph 17G 0 17G 0% /cephfs_data
4.设置开机主动挂载
[root@ceph-node-1 ~]# vim /etc/fstab
192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ /cephfs_data ceph name=admin,secret=AQBIWUhiEmaFOBAA6Jr6itUeHiLVVOeYFVpRog== 0 0
也能够将用户的Key写入到一个文件中,然后引用这个文件,如下所示:
1.将key写入到一个文件中
[root@ceph-node-1 ~]# ceph-authtool -p /etc/ceph/ceph.client.admin.keyring > admin.key
[root@ceph-node-1 ~]# chmod 600 admin.key
2.挂载时引用这个Key文件
[root@ceph-node-1 ~]# mount -t ceph 192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ /cephfs_data/ -o name=admin,secretfile=/root/admin.key
3.开机主动挂载
192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ /cephfs_data ceph name=admin,secretfile=/root/admin.key 0 0
5.用户空间挂载CephFS文件体系
1.装置ceph-fuse客户端
[root@ceph-node-1 ~]# yum -y install ceph-fuse
2.创立挂载点
[root@ceph-node-1 ~]# mkdir /cephfuse-data
3.运用fuse挂载
[root@ceph-node-1 ~]# ceph-fuse -n client.admin -m 192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789 /cephfuse-data/
2022-04-03 23:37:18.794 7f5574ca7f80 -1 init, newargv = 0x5615fadddb50 newargc=9ceph-fuse[31903]: starting ceph client
ceph-fuse[31903]: starting fuse
4.检查挂载的文件体系
ceph-fuse[31903]: starting fuse
[root@ceph-node-1 ~]# df -HT /cephfuse-data/
文件体系 类型 容量 已用 可用 已用% 挂载点
ceph-fuse fuse.ceph-fuse 19G 0 19G 0% /cephfuse-data
6.检查CephFS的状况
[root@ceph-node-1 ~]# ceph fs status cephfs-storage