目录

一、环境准备

二、什么是文件系统

三、ceph块存储与文件系统区别

四、创建ceph文件系统

1、启动MDS服务

2、创建存储池

3、创建Ceph文件系统

4、客户端挂载


一、环境准备

Ceph集群搭建参照:Ceph集群部署

以下Ceph存储实验环境均基于上述Ceph集群环境搭建。

二、什么是文件系统

一个文件系统是由inode和block两部分in

  • inode存储文件的描述信息(metadata元数据)
  • block存储真正的数据

cephadm部署使用docker_ceph

 根据这个原理,所以在做ceph文件系统的时候,需要划分2个存储池,一个用来存储inode,另一个用来存储block。

三、ceph块存储与文件系统区别

前面已经介绍了ceph块存储,那么ceph块存储和ceph文件系统有什么区别呢,分别适合在什么场合使用呢?

答:Ceph的块设备具有优异的读写性能,但不能多处挂载同时读写,目前主要用在OpenStack上作为虚拟磁盘。而Ceph的文件系统接口读写性能较块设备接口差,但具有优异的共享性。

四、创建ceph文件系统

1、启动MDS服务

ceph文件系统是通过ceph-mds服务管理的。

在node1主机通过ceph-deploy脚本启动MDS服务,可以启动任何一个节点的mds服务,这里我们启动node3的mds服务:

# 在node1远程启动node3的mds服务
cd /root/ceph-cluster   #该目录,是最早部署ceph集群时,创建的目录,具体跟看前文:ceph集群部署

#远程node3,拷贝配置文件,启动mds服务,执行过程见下图
ceph-deploy mds create node3

cephadm部署使用docker_linux_02

 到node3检查下mds服务启动情况:

systemctl status ceph-mds@node3   #服务名称后跟@+节点名

cephadm部署使用docker_ceph文件系统_03

2、创建存储池

在集群中的任何一台主机都可以操作(任何node节点都可以操作)

# 创建存储池,对应64个PG(先创建64个以满足后续osd扩容需求),cephfs_data为自定义存储池名称
ceph osd pool create cephfs_data 64

#创建存储池,对应64个PG(先创建64个以满足后续osd扩容需求),cephfs_metadata为自定义存储池名称
ceph osd pool create cephfs_metadata 64

如上操作,其中:

(1)cephfs_data存储池是用来存放block数据,cephfs_metadata是用来存储inode数据;

(2)关于PG的说明:

PG是逻辑概念,对应如下图中间一层的2个PG(Placement Group),第1排obj为需要读写的数据,第3排是数据真正存放的位置是OSD对应的盘上,PG对应OSD,一个PG可以对应一个或多个OSD,数据是先写到PG,再写到OSD,数据读取也是先读PG,可以1个PG对应所有OSD,也可以使用2个或多个对应所有OSD,考虑到效率,同一个PG下面不要有太多的OSD,这里先创建64个PG是考虑后面OSD会扩容增加,满足后续使用需求。

cephadm部署使用docker_ceph_04

查看当前存储池:

ceph osd lspools

cephadm部署使用docker_服务器_05

 如上,前面是存储池编号,后面是存储池名称。

3、创建Ceph文件系统

创建文件系统即将上面创建的inode和block存储池合并到一起,可以理解成普通块设备的格式化。

在任何一个node节点执行:

#new为新建,myfs1文自定义文件系统名称,cephfs_metadata和cephfs_data为之前创建的存放inode和block的存储池
#注意:cephfs_metadata和cephfs_data有先后顺序,放在前面的是存放inode,后面的是存放block,不要顺序搞错
ceph fs new myfs1 cephfs_metadata cephfs_data

查看ceph文件系统:

ceph fs ls

cephadm部署使用docker_linux_06

 如上可以看到ceph文件系统名为myfs1,后面分别对应用户存储inode和block的存储池,前者存放inode元数据,后者存放block数据。

4、客户端挂载

(1)临时挂载

#如下,其中:
#mount -t 后面跟文件系统类型,这里是ceph类型
#192.168.2.20:6789:/ 为MON节点的IP(不是MDS节点),如果是单IP的话,可以写任意一个MON节点的IP,后面的根不是服务器文件系统的根,而是对应ceph文件系统的根,这里是挂载整个ceph文件系统,所以写根
#/mnt是本地挂载点
#-o指定挂载选项,其中admin是用户名,secret是密钥,可以在/etc/ceph/ceph.client.admin.keyring文件里找到
mount -t ceph 192.168.2.20:6789:/  /mnt  -o name=admin,secret=AQC/h4Fj/ckvDxAARjpUCbf1VeDaHQFhuZrELg==

cephadm部署使用docker_cephadm部署使用docker_07

如上有一个问题,如果提供挂载的服务器挂掉了,那么文件系统就无法使用了,所以可以使用下面的高可用方案。

高可用方案(多个IP):

mount -t ceph 192.168.2.20:6789,192.168.2.30:6789,192.168.2.40:6789:/  /mnt  -o name=admin,secret=AQC/h4Fj/ckvDxAARjpUCbf1VeDaHQFhuZrELg==

cephadm部署使用docker_linux_08

(2)永久挂载

使用fstab实现永久挂载ceph文件系统需要单独安装一个包:libcephfs1

yum install libcephfs1 -y
vim /etc/fstab   #挂载内容如下
#单IP方案
#192.168.2.20:6789:/   /mnt   ceph  defaults,_netdev,name=admin,secret=AQC/h4Fj/ckvDxAARjpUCbf1VeDaHQFhuZrELg==  0  0

#多IP高可用方案
192.168.2.20:6789,192.168.2.30:6789,192.168.2.40:6789:/   /mnt   ceph  defaults,_netdev,name=admin,secret=AQC/h4Fj/ckvDxAARjpUCbf1VeDaHQFhuZrELg==  0  0
mount -a

cephadm部署使用docker_服务器_09