继续创作,加速生长!这是我参加「日新计划 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中。

Ceph集群CephFS文件存储核心概念及部署使用

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

Ceph集群CephFS文件存储核心概念及部署使用

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 92.检查创立的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 key3.检查是否挂载成功
[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