3.3.2 CephFS 访问方式
1. CephFS 接入整体介绍
CephFS 接入主要分为两类:第一类是通过 POSIX 兼容的自定义客户端接入,主要方式为采用 CephFS 内核客户端及 CephFS FUSE(Filesystem in Userspace)客户端挂载;第二类是通用的标准网络文件协议(如 NFS、SMB),通过和已有开源组件结合的方式来提供接入,如 NFS-Ganesha 及 Samba 等。通过以上方式接入 CephFS 后,用户可以像操作本地文件系统一样来操作存储在 Ceph 集群上的树状结构目录与文件数据。特别地,CephFS 提供 Windows 专有客户端(非 SAMBA),具体使用及分析可以参考 ceph-dokan 在 github 上的项目。
2. CephFS 客户端接入(Kernel/Fuse)
本节主要介绍 CephFS 私有客户端的接入方式。CephFS 有两种私有客户端,分别为内核态 Kernel 形式的私有客户端与用户态 Fuse 形式的私有客户端。以下简单介绍CephFS 的部署与挂载。
(1)CephFS 部署
CephFS 系统至少需要两个 RADOS 池,一个用于数据,另一个用于元数据,见图 3-35。由于元数据多为随机存储,建议使用随机性能好的 SSD 盘作为元数据存储池,从而得到更好的元数据性能水平。
具体部署步骤如下。
启动 MDS 服务 # ceph-deploy mds create <cephfs-master> # 创建数据 Pool # ceph osd pool create cephfs_data 128 # 创建元数据 Pool # ceph osd pool create cephfs_metadata 128 # 创建并展示 fs 状态 # ceph fs new cephfs cephfs_metadata cephfs_data # ceph fs ls # ceph mds stat
图 3-35 CephFS 集群架构示意
(2)CephFS 挂载(不启用 CephX)
◆ 挂载准备
在挂载前,需要确保客户端节点有一份 Ceph 配置文件并确保配置文件有权限。
# mkdir -p -m 755 /etc/ceph # ssh <user>@<mon-host> "sudo ceph confifig generate-minimal-conf" | sudo tee / etc/ceph/ceph.conf # chmod 644 /etc/ceph/ceph.conf
◆ Kernel 挂载
CephFS 的 Kernel 挂载方式依赖于 CephFS Kernel Driver,一般已集成在高版本内核中,是一个挂载方便、性能较高的接入方式。可以通过如下命令检查当前内核是否支持CephFS Kernel Driver。
# 检查内核是否支持 CephFS Kernel Driver # stat /sbin/mount.ceph
如已支持 Kernel Driver,则具体挂载步骤操作如下。
# 本地创建挂载点 # mkdir /mnt/Cephfs # 使用 linux 命令 mount、umount 进行挂载、卸载 # mount -t ceph <mon-host>:<mon-port>:/ <mount_point>
如需要设置操作系统启动时自动挂载 CephFS,在客户端节点的 /etc/fstab 文件中加入挂载行即可,挂载系统为 Ceph。
◆ Fuse 挂载
如当前客户端系统未加载 CephFS Kernel Driver,可以使用用户态客户端 ceph-fuse进行挂载。
# 安装 ceph-fuse 客户端软件 # yum install ceph-fuse # 使用 ceph-fuse 命令挂载 # ceph-fuse -m <mon-host>:<mon-port> /mnt/Cephfs # 使用 umount 命令卸载 # umount /mnt/cephfs
如需要设置操作系统启动时自动挂载 ceph-fuse,可在客户端节点的 /etc/fstab 文件中加入以下行。
none /mnt/mycephfs fuse.ceph defaults 0 0
(3)CephX 认证挂载
如已启用 CephX 鉴权机制,则需要为客户端生成 Key。此处假设创建新用户 cephfs,并允许用户访问 CephFS 池。
# 在 Ceph 集群上执行命令创建 cephfs 用户 # ceph auth get-or-create client.cephfs mon 'allow *' mds 'allow *' mgr 'allow *' osd 'allow *' -o /etc/ceph/ceph.client.admin.keyring # 在客户端获得 client.cephfs 密钥 # ceph auth get-key client.cephfs > /etc/ceph/cephfskey # 执行挂载命令(以 Kernel Driver 方式为例) # mount -t ceph <mon-host>:<mon-port>:/ <mount_point> -o name=cephfssecretfifile=/etc/ceph/cephfskey
3. CephFS NFS/Samba 接入(lib 库访问)
CephFS 提供了一套 lib 库(libcephfs),NFS-Ganesha、Samba 等多个开源项目已经集成 libcephfs,从而使得 CephFS 集群可以通过 NFS、SMB 协议提供文件存储服务。详情可见 NFS-Ganesha、Samba 等各开源组件介绍,图 3-36 ~图 3-38 分别为 Kernel 客户端接入方式与 NFS-Ganesha、Samba 接入方式的架构示意图,便于读者比较理解。
图 3-36 Kernel 客户端架构示意
图 3-37 NFS-Ganesha 接入架构示意
图 3-38 Samba 接入架构示意