最全Ceph实践【2022】

1,299 阅读10分钟

一、Ceph原理

转发ceph基础架构

二、环境准备

IP作用
172.17.0.51ceph-01
172.17.0.52ceph-02
172.17.0.53ceph-03

所有节点都执行

#添加host (所有节点)设置hostname
cat >>/etc/hosts <<EOF
172.17.0.51  ceph-01
172.17.0.52  ceph-02
172.17.0.53  ceph-03
EOF

#配置时间同步
yum install chrony -y
# 修改配置文件
sed -i "s/^server.*$//g" /etc/chrony.conf
sed -i "s/#local stratum 10/local stratum 10/" /etc/chrony.conf
cat >> /etc/chrony.conf <<EOF
server ntp5.aliyun.com iburst
server pool.ntp.org iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
EOF
# 启动服务
systemctl start chronyd;systemctl enable chronyd

#配置centos、epeo、ceph源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
wget -O /etc/yum.repos.d/ceph.repo http://down.i4t.com/ceph/ceph.repo
yum clean all
yum makecache

#在所有节点安装ceph相关软件包
yum install -y ceph ceph-mon ceph-mgr ceph-radosgw ceph-mds  ceph-mgr-dashboard  
#也可以使用官方推荐的安装方式,下面的方式会重新给我们配置yum源,ceph-deploy install ceph-01 ceph-02 ceph-03

ceph-01 设置免密

ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@ceph-01
ssh-copy-id -i /root/.ssh/id_rsa.pub root@ceph-02
ssh-copy-id -i /root/.ssh/id_rsa.pub root@ceph-03

ceph-01 安装ceph-deploy工具

yum install -y python-setuptools ceph-deploy 

三、ceph集群部署

部署mon

接下来为ceph创建一个配置目录,后面操作需要在这个目录下进行

mkdir /root/ceph-deploy
cd /root/ceph-deploy

创建monitor

[root@ceph-01 ceph-deploy]# ceph-deploy new ceph-01 --public-network 10.10.10.0/24

#ceph-01代表部署monitor节点
#参数设置
--cluster-network 集群对外的网络
--public-network 集群内通信的网络
#--public-network建议添加,否则后面添加monitor节点会提示错误
执行完毕后我们可以看到在/root/ceph-deploy目录会有为我们生成的一些文件

添加允许ceph时间偏移

echo "mon clock drift allowed = 2" >>/root/ceph-deploy/ceph.conf
echo "mon clock drift warn backoff = 30" >>/root/ceph-deploy/ceph.conf

接下来我们需要初始化monitor

[root@ceph-01 ~]# cd /root/ceph-deploy
[root@ceph-01 ceph-deploy]# ceph-deploy mon create-initial

用ceph-deploy把配置文件和admin密钥拷贝到所有节点,这样每次执行Ceph命令行时就无需指定monitor地址和ceph.client.admin.keyring了

[root@ceph-01 ceph-deploy]# ceph-deploy admin ceph-01 ceph-02 ceph-03
#把配置文件和admin密钥分发到各个节点

禁用不安全模式

ceph config set mon auth_allow_insecure_global_id_reclaim false

添加mon

cd /root/ceph-deploy
ceph-deploy mon add ceph-02 --address 172.17.0.52
ceph-deploy mon add ceph-03 --address 172.17.0.53

部署mgr

ceph-deploy mgr create ceph-01

添加mgr

ceph-deploy mgr create ceph-02 ceph-03

部署OSD

#这里添加三台osd集群
[root@ceph-01 ceph-deploy]# cd /root/ceph-deploy/
[root@ceph-01 ceph-deploy]# ceph-deploy osd create ceph-01 --data /dev/sdb
[root@ceph-01 ceph-deploy]# ceph-deploy osd create ceph-02 --data /dev/sdb
[root@ceph-01 ceph-deploy]# ceph-deploy osd create ceph-03 --data /dev/sdb

配置dashboard

详细的官网部署文档链接:docs.ceph.com/docs/master…

#启用dashboard
ceph mgr module enable dashboard
#禁用ssl加密
ceph config set mgr mgr/dashboard/ssl false
#配置IP和端口
ceph config set mgr mgr/dashboard/ceph-01/server_addr 10.10.10.5
ceph config set mgr mgr/dashboard/ceph-01/server_port 18080
#重启ceph-dashboard
ceph mgr module disable dashboard
ceph mgr module enable dashboard

#创建dashboard用户
echo "cephadmin" >pass.txt&&ceph dashboard ac-user-create admin administrator -i pass.txt

四、 简单文件验证

  • 创建存储池 pool 要想使用ceph的存储功能,必须先创建存储池
$ ceph osd pool create mypool 64 64
pool 'mypool' created

# pool 支持设置 quota 限额(对象个数、容量),具体见官方文档
# pool 默认使用 3 个副本,还支持纠删码方式的(类似 raid5),具体见官方文档
  • 列出当前集群所有存储池 pool
$ ceph osd lspools
mypool

默认情况下pool会为我们找到3个osd副本,保证高可用


[root@ceph-01 ~]# ceph osd pool get mypool size
size: 3

当然这些默认的参数也是可以修改的,比如我们修改一下osd副本数量

[root@ceph-01 ~]# ceph osd pool set mypool size 2
set pool 1 size to 2
[root@ceph-01 ~]# ceph osd pool get mypool size
size: 2
  • 上传一个文件
rados put a.log access.log --pool=mypool
#a.log ----存放的文件名
#access.log ------要上传的文件
  • 获取一个文件
rados get a.log test.txt -p mypool
# a.log是对象的ID
# test.txt是outfile,即输出文件叫啥名字
# -p指定存储池
  • 删除一个文件
rados rm a.log  -p=mypool
  • 列出指定存储池有哪些文件
rados ls --pool=mypool
  • 查看指定文件在Ceph集群内是怎样做映射的
ceph osd map mypool issue
osdmap e16 pool 'mypool' (1) object 'issue' -> pg 1.651f88da (1.1a) -> up ([1,0,2], p1) acting ([1,0,2], p1)

ceph map信息简要说明

osdmap e16 pool 'mypool' (1) object 'issue' -> pg 1.651f88da (1.1a) -> up ([1,0,2], p1) acting ([1,0,2], p1)

# pg 1.651f88da (1.1a),表示第1号存储池的1a号pg
# up  Ceph的存储池是三副本存储的,后面的三个数字是存储了此文件的三个osd的编号,p1表示1号osd是主osd
# acting同理
  • 删除一个存储池 pool
$ ceph osd pool rm mypool mypool --yes-i-really-really-mean-it
Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
#- 必须加 --yes-i-really-really-mean-it
#- 报错是由于没有配置 mon 节点的 mon_allow_pool_delete 字段所致,解决办法就是到mon节点进行相应的设置。

解决方法 2 种:

方法一

修改集群 ceph.conf 文件,添加:

[mon]
mon_allow_pool_delete = true

然后使用 ceph-deploy --overwrite-conf config push ceph-01 ceph-02 ceph-03 推送配置文件到所有节点

最后在集群种所有 mon 节点重启 mon 进程:systemctl restart ceph-mon@{主机名}

方法二 ceph 可以在运行时更改 ceph-osd 、 ceph-mon 、 ceph-mds 守护进程的配置,此功能在增加/降低日志输出、启用/禁用调试设置、甚至是运行时优化的时候非常有用的。

所以前面两个步骤一样的,只是最后一个步骤使用命令直接动态修改所有 mon 节点配置,无需重启,具体命令查看官方文档。

五、Ceph存储使用

部署完 Ceph 集群之后,如何在Ceph集群中存储文件呢?ceph提供了三种接口供用户使用,分别是:

  • rbd,块存储,以块的方式使用,通常适用于和虚拟化如KVM结合,用于给虚拟化提供块存储设备
  • object storage,对象存储,通过radosgw提供对象存储api,供用户上传put和get下载对象文件
  • cephfs文,件存储,以cephfs挂载文件系统的方式使用ceph

RBD 块存储

RBD(Rados Block Device)即Ceph提供的块存储接口,提供一个连续的序列化空间(可以理解为一个image),块存储能够实现传统存储介质如硬盘,CD,磁带库等存储的功能,RBD能够为虚拟机提供一个大规模,可扩展的存储空间,简单点来说,能够为虚拟机提供磁盘,可以在磁盘上做磁盘分区,格式化等操作,其具有如下特点:

  • Thin-provisioned,预分配,即瘦模式,随使用空间增长而增长
  • Images up to 16 exabytes,镜像最大可以支持16EB
  • Configurable striping,支持配置条带模式,
  • In-memory caching,内存缓存
  • Snapshots,快照
  • Copy-on-write cloning,copy-on-write克隆,用于大规模分发机器
  • Kernel driver support,内核驱动支持,内核支持rbd,cephfs
  • KVM/libvirt support,支持KVM和libvirt,用于KVM虚拟化场景
  • Back-end for cloud solutions,终端云解决方案,支持OpenStack,CloudStack,K8S等
  • Incremental backup,增量备份
  • Disaster recovery (multisite asynchronous replication),灾难恢复,支持多地域异步复制

1.1创建资源池 pool

我们先以Ceph RBD的方式来介绍Ceph集群的使用,通过在Ceph集群中创建一个RBD块文件供用户进行使用,要使用Ceph,首先需要一个资源池pool,pool是Ceph中数据存储抽象的概念,其由多个pg(Placegroup)和pgp组成,创建的时候可以指定pg的数量,pg的大小一般为2^n次方,如下先创建一个pool

  • 创建-个pool
ceph osd pool create newpool 128 128

关于pg_num和pgp_num的数量,官方推荐的计算方案为,每个OSD推荐使用100个PG,OSD的数量*100/pool副本数量,然后取最近2的^n次方的值,套公式,其值为:PGs=3*100/3=100,取最近的值为128,此时的设置低于官方建议。

  • 查看pg_num和pgp_num,副本数size大小
[root@WT-ARCHERY-10-5 ~/ceph-deploy]#ceph osd pool get newpool pg_num
pg_num: 128
[root@WT-ARCHERY-10-5 ~/ceph-deploy]#ceph osd pool get newpool pgp_num
pgp_num: 128
[root@WT-ARCHERY-10-5 ~/ceph-deploy]#ceph osd pool get newpool size
size: 3

通过ceph -s 看到Ceph集群当前的整体情况,包含有cluster,services,data,io信息,health状态可以看到集群当前处于告警HEALTH_WARN状态,告警提示内容为“application not enabled on 1pool(s)”,资源池pool未启用application,Ceph 推荐开启application的功能。

  • 开启application功能,application即设置资源池pool存储接口类型,包含三种:rbd,cephfs和,rgw,可以根据资源池pool的类型,设置不同的application,如下开启资源池为rbd类型
  [root@node-1 ~]# ceph osd pool application enable newpool rbd
enabled application 'rbd' on pool 'newpool'
[root@WT-ARCHERY-10-5 ~/ceph-deploy]#ceph osd pool application get newpool
{
    "rbd": {}
}

至此,Ceph资源池pool相关操作到此完毕,接下来在pool中创建镜像。

1.2 rbd块存储使用

Ceph RBD块存储主要为虚拟化如KVM提供块存储设备,KVM需要依赖于qemu和libvirt和RBD块存储交互,这也是和云平台如OpenStack,CloudStack,Kubernetes交互的基础,因此非常有必要掌握Ceph原生RBD块存储的使用。由于当前Ceph集群未与虚拟化或者云平台进行集成,因此采用原生的rbd接口与Ceph进行交互(云平台通过调用rbd接口完成块存储生命周期管理)。

  • 在创建镜像前我们还需要修改一下features值,rbd map时候,exclusive-lock, object-map, fast-diff, deep-flatten的features不支持,因此需要先disable,否则会提示RBD image feature set mismatch报错信息
echo "rbd_default_features = 1" >>ceph.conf
ceph-deploy --overwrite-conf config push WT-ARCHERY-10-5 node02 wt-test-10-129
#重启各节点mon,systemctl restart ceph-mon@{{主机名}}.service 
  • rbd块存储接口交互的工具为rbd,通过rbd命令来实现RBD块的创建,如创建一个10G的块存储
rbd create -p newpool --image ceph-rbd-demo.img --size 10G
  • 可以通过ls和info查看RBD镜像的列表和详情信息
[root@WT-ARCHERY-10-5 ~]#rbd -p newpool ls
ceph-rbd-demo.img
[root@WT-ARCHERY-10-5 ~]#rbd -p newpool info ceph-rbd-demo.img
rbd image 'ceph-rbd-demo.img':
	size 10 GiB in 2560 objects
	order 22 (4 MiB objects)
	snapshot_count: 0
	id: 1223a11a1de81
	block_name_prefix: rbd_data.1223a11a1de81
	format: 2
	features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
	op_features: 
	flags: 
	create_timestamp: Wed Apr 27 14:05:57 2022
	access_timestamp: Wed Apr 27 14:05:57 2022
	modify_timestamp: Wed Apr 27 14:05:57 2022
[root@WT-ARCHERY-10-5 ~]#

  • RBD存储块已创建起来了,如何使用呢?RB将D块设备已映射到本地的/dev/rbd0设备上,因此可以对设备进行格式化操作使用
[root@WT-ARCHERY-10-5 ~/ceph-deploy]#rbd create -p newpool --image ceph-rbd-demo.img --size 10G
[root@WT-ARCHERY-10-5 ~/ceph-deploy]#rbd -p newpool ls
ceph-rbd-demo.img
[root@WT-ARCHERY-10-5 ~/ceph-deploy]#rbd map -p newpool --image ceph-rbd-demo.img
/dev/rbd0
[root@WT-ARCHERY-10-5 ~/ceph-deploy]
  • 块文件挂载,通过fdisk -l查看多了块设备,之后就可以通过格式化mout挂载
[root@WT-ARCHERY-10-5 ~/ceph-deploy]#mkfs.xfs /dev/rbd0
meta-data=/dev/rbd0              isize=512    agcount=16, agsize=163840 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=1024   swidth=1024 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@WT-ARCHERY-10-5 ~/ceph-deploy]#mkdir /mnt/ceph-rbd
[root@WT-ARCHERY-10-5 ~/ceph-deploy]#mount /dev/rbd0 /mnt/ceph-rbd/
  • 块卸载
# 卸载文件系统
umount  /dev/rbd0
# 卸载块存储,再次使用rbd device ls查看显示为空则为卸载成功
[root@node-1 ~]# rbd device unmap -p newpool --image ceph-rbd-demo.img

1.3 RBD扩容 当前rbd是10G大小,现扩容到30G,在不丢数据的情况下

#查看大小
[root@WT-ARCHERY-10-5 /mnt/ceph-rbd]#rbd -p newpool info ceph-rbd-demo.img 
rbd image 'ceph-rbd-demo.img':
	size 10 GiB in 2560 objects
	order 22 (4 MiB objects)
	snapshot_count: 0
	id: 16fb098cd3bbd
	block_name_prefix: rbd_data.16fb098cd3bbd
	format: 2
	features: layering
	op_features: 
	flags: 
	create_timestamp: Wed Apr 27 14:20:07 2022
	access_timestamp: Wed Apr 27 14:20:07 2022
	modify_timestamp: Wed Apr 27 14:20:07 2022

#接下来使用resize参数进行扩容到15G

[root@WT-ARCHERY-10-5 /mnt/ceph-rbd]#rbd  -p newpool resize ceph-rbd-demo.img --size 15G
Resizing image: 100% complete...done.
[root@WT-ARCHERY-10-5 /mnt/ceph-rbd]#rbd -p newpool info ceph-rbd-demo.img 
rbd image 'ceph-rbd-demo.img':
	size 15 GiB in 3840 objects
	order 22 (4 MiB objects)
	snapshot_count: 0
	id: 16fb098cd3bbd
	block_name_prefix: rbd_data.16fb098cd3bbd
	format: 2
	features: layering
	op_features: 
	flags: 
	create_timestamp: Wed Apr 27 14:20:07 2022
	access_timestamp: Wed Apr 27 14:20:07 2022
	modify_timestamp: Wed Apr 27 14:20:07 2022
[root@WT-ARCHERY-10-5 /mnt/ceph-rbd]#

扩容之后我们的设备/dev/rbd0是已经扩容上去,但是我们的文件系统并没有扩容上

image-20220427145224371.png

image-20220427145255254.png

接下来我们需要使用resize2fs/xfs_growfs对文件系统进行扩容,xfs类型用xfs_growfs,ext2ext3ext4文件系统用resize2fs

xfs_growfs /dev/rbd0

RGW 对象存储

对象存储是什么? 可以理解是一个海量的存储空间,可以通过API在任何时间、任何地点访问对象存储里面的数据。我们常用的阿里云OSS、七牛云存储以及百度网盘、私有网盘等都属于对象存储。

Cpeh是一个分布式对象存储系统,通过它的对象网关(object gateway),也就是RADOS网关(radosgw)提供对象存储接口。RADOS网关利用librgw (RADOS网关库)和librados这些库,允许应用程序跟CEPH对象存储建立连接。Ceph通过RESTful API提供可访问且最稳定的多租户对象存储解决方案之一。

RADOS网关提供RESTful接口让用户的应用程序将数据存储到CEPH集群中。RADOS网关接口满足以下特点;

  • 兼容Swift: 这是为了OpenStack Swift API提供的对象存储功能
  • 兼容S3: 这是为Amazon S3 API提供的对象存储功能
  • Admin API: 这也称为管理API或者原生API,应用程序可以直接使用它来获取访问存储系统的权限以及管理存储系统

除了上述的特点,对象存储还有以下特点

  • 支持用户认证
  • 使用率分析
  • 支持分片上传 (自动切割上传重组)
  • 支持多站点部署、多站点复制

对象存储网关架构讲解

1.1 部署RGW存储网关

使用ceph对象存储我们需要安装对象存储网关(RADOSGW)

ceph-radosgw软件包我们之前是已经安装过了,这里可以检查一下

[root@WT-ARCHERY-10-5 ~]#rpm -qa|grep ceph-radosgw
ceph-radosgw-14.2.22-0.el7.x86_64
[root@WT-ARCHERY-10-5 ~]#

这里我使用ceph-01当做存储网关来使用

[root@ceph-01 ~]# cd /root/ceph-deploy
[root@ceph-01 ceph-deploy]# ceph-deploy rgw create WT-ARCHERY-10-5

执行成功后通过ceph-s查看集群状态,看不到rgw服务,说明rgw服务启动报错了,通过日志/var/log/ceph/ceph-client.rgw.WT-ARCHERY-10-5.log有如下报错

image-20220428101204075.png

ceph自L版本后,mon_max_pg_per_osd,默认值也从300变更为200,可通过mon_max_pg_per_osd = 1000

echo "mon_max_pg_per_osd = 1000" >>ceph.conf
ceph-deploy --overwrite-conf config push WT-ARCHERY-10-5 node02 wt-test-10-129
#重启各节点mon,systemctl restart ceph-mon@{{主机名}}.service

然后再执行ceph-deploy rgw create WT-ARCHERY-10-5 查看集群状态有rgw服务,恢复正常

1.2 调用对象存储网关

我们先创建一个s3的用户,获取到key之后访问对象存储

[root@WT-ARCHERY-10-5 ~/ceph-deploy]#radosgw-admin user create --uid ceph-s3-user --display-name "Ceph S3 User Demo newpool"
{
    "user_id": "ceph-s3-user",
    "display_name": "Ceph S3 User Demo newpool",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,##这个参数就是刚修改的mon_max_pg_per_osd
    "subusers": [],
    "keys": [
        {
            "user": "ceph-s3-user",
            "access_key": "PQNYI3EE9XQWVULRBK9Q", #这里的key是我们后期访问radosgw的认证,如果忘记了可以通过radosgw-admin user info --uid ceph-s3-user查看
            "secret_key": "yhEDGvbHIJUPvTFUbsqQ6GCB4pJ5q9LHM6gWqnob"
        }
    ],
    "swift_keys": [],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw",
    "mfa_ids": []
}

[root@WT-ARCHERY-10-5 ~/ceph-deploy]#

这里的key我们已经获取到了,接下来我们使用s3的接口进行访问

首先安装python-bot

yum install python-boto

编写Python sdk脚本

import boto
import boto.s3.connection
access_key = 'PQNYI3EE9XQWVULRBK9Q'      #这里需要替换我们创建的key
secret_key = 'yhEDGvbHIJUPvTFUbsqQ6GCB4pJ5q9LHM6gWqnob'   #这里也需要替换
conn = boto.connect_s3(
    aws_access_key_id = access_key,
    aws_secret_access_key = secret_key,
    host = '10.10.10.5', port = 7480,
    is_secure=False, calling_format = boto.s3.connection.OrdinaryCallingFormat(),
    )
bucket = conn.create_bucket('ceph-s3-bucket')
for bucket in conn.get_all_buckets():
    print "{name}".format(
        name = bucket.name,
        created = bucket.creation_date,
)
#执行脚本
[root@ceph-01 ~]# python s3.py
ceph-s3-bucket

执行完Python脚本,我们可以看到在pool创建了一个default.rgw.backets.index的索引

image-20220428105002964.png

s3cmd上传

[root@WT-ARCHERY-10-5 ~]#s3cmd put 333.gif  s3://ceph-s3-bucket/imgs/abc.gif
WARNING: Could not refresh role
upload: '333.gif' -> 's3://ceph-s3-bucket/imgs/abc.gif'  [1 of 1]
 74367 of 74367   100% in    0s   180.26 KB/s  done
[root@WT-ARCHERY-10-5 ~]#

s3cmd下载

[root@WT-ARCHERY-10-5 ~]#s3cmd get s3://ceph-s3-bucket/imgs/abc.gif nima.gif
[root@WT-ARCHERY-10-5 ~]#s3cmd get s3://ceph-s3-bucket/imgs/abc.gif nima.gif
WARNING: Could not refresh role
download: 's3://ceph-s3-bucket/imgs/abc.gif' -> 'nima.gif'  [1 of 1]
 74367 of 74367   100% in    0s     2.43 MB/s  done
[root@WT-ARCHERY-10-5 ~]#ls nima.gif 
nima.gif
[root@WT-ARCHERY-10-5 ~]#

最终我们数据会在pools里面生成

[root@WT-ARCHERY-10-5 ~]# ceph osd lspools
4 order_pool
5 .rgw.root
6 default.rgw.control
7 default.rgw.meta
8 default.rgw.log
9 default.rgw.buckets.index
10 default.rgw.buckets.data
[root@WT-ARCHERY-10-5 ~]#rados -p default.rgw.buckets.data ls
faec293f-4d6e-4aa4-bc59-9cfbd7d98a16.104118.1_etc/passwd
[root@WT-ARCHERY-10-5 ~]#rados -p default.rgw.buckets.index ls
.dir.faec293f-4d6e-4aa4-bc59-9cfbd7d98a16.104118.1
[root@WT-ARCHERY-10-5 ~]#

cephfs 文件系统

为什么需要使用CephFS 由于RBD不可以多个主机共享同一块磁盘,出现很多客户端需要写入数据的问题,这时就需要CephFS文件系统

我们使用高可用安装mds

ceph-deploy mds create WT-ARCHERY-10-5 node02 wt-test-10-129

接下来我们可以看到,已经有mds了,数量为3个,状态为启动等待的状态

[root@ceph-01 ceph-deploy]# ceph -s|grep mds    mds:  3 up:standby

因为没有文件系统,所以3个节点状态是启动,但是后面为等待的状态

创建pool

一个Ceph文件系统至少需要连个RADOS池,一个用于数据,一个用于元数据。

  • 对元数据池使用更好的复制级别,因为此池中的任何数据丢失都可能导致整个文件系统无法访问
  • 对元数据池使用SSD等低延迟存储,因为这将直接影响观察到的客户端文件系统操作的延迟。
  • 用于创建文件的数据池是默认数据池,是存储所有inode回溯信息的位置,用于硬链接管理和灾难恢复。因此,在CephFS中创建的所有inode在默认数据池中至少有一个对象。

创建存储池,数据data,元数据metadata

[root@ceph-01 ~]# ceph osd pool create cephfs_data 64  64
pool 'cephfs_data' created
[root@ceph-01 ~]# ceph osd pool create cephfs_metadata 64  64
pool 'cephfs_metadata' created
[root@ceph-01 ~]#
[root@ceph-01 ~]# ceph osd pool ls
..
cephfs_data
cephfs_metadata

创建文件系统

接下来需要创建文件系统,将刚刚创建的pool关联起来

[root@WT-ARCHERY-10-5 ~/ceph-deploy]#ceph fs new cephfs-data cephfs_metadata cephfs_data
new fs with metadata pool 13 and data pool 12
[root@WT-ARCHERY-10-5 ~/ceph-deploy]#
#cephfs-data为文件系统名称
#cephfs_metadata 为元数据的pool
#cephfs_data 为数据pool

创建完毕后可以通过下面的命令进行查看

[root@WT-ARCHERY-10-5 ~/ceph-deploy]#ceph fs ls
name: cephfs-data, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
[root@WT-ARCHERY-10-5 ~/ceph-deploy]#

此时,我们查看mds状态,已经有一个状态为active,另外2个为standb状态

image-20220510170430712.png

使用cephfs

1.内核驱动挂载

#创建挂载点,直接通过mount挂载
mkdir -pv /mnt/cephfs && mount -t ceph WT-ARCHERY-10-5:6789:/ /mnt/cephfs -o name=admin
[root@WT-ARCHERY-10-5 ~/ceph-deploy]#df -h|grep cephfs
10.10.10.5:6789:/              47G     0   47G   0% /mnt/cephfs
[root@WT-ARCHERY-10-5 ~/ceph-deploy]#
#我这里是显示50G大小,

我们可以看到,挂载完linux内核会自动加载ceph模块

image-20220510171232965.png

2.用户空间FUSE挂载 用户空间挂载主要使用的是ceph-fuse客户端,我们需要单独安装这个客户端

yum install ceph-fuse -y

使用ceph-fuse进行挂载

[root@WT-ARCHERY-10-5 ~]#ceph-fuse -n client.admin -m WT-ARCHERY-10-5:6789 /mnt/cephfs/
ceph-fuse[3520865]: starting ceph client2022-05-11 17:06:50.254 7f61749b2f80 -1 init, newargv = 0x5634e313cff0 newargc=9

ceph-fuse[3520865]: starting fuse
[root@WT-ARCHERY-10-5 ~]#
#
#- client.admin 默认有一个client.admin的用户
#- WT-ARCHERY-10-5:6789 mon地址 (也可以写多个,逗号分隔)

如果我们不指定mon,默认找的是/etc/ceph/ceph.conf里面的配置文件

挂在完成后我们就可以使用df -h看一下挂载点的状态

[root@WT-ARCHERY-10-5 ~]#df -h|grep cephfs
ceph-fuse                      70G  1.5G   69G   3% /mnt/cephfs
[root@WT-ARCHERY-10-5 ~]#