Ceph File System (CephFS) 是与 POSIX 标准兼容的文件系统, 能够提供对 Ceph 存储集群上的文件访问. Jewel 版本(10.2.0) 是第一个包含稳定 CephFS 的 Ceph 版本. CephFS 需要至少一个元数据服务器 (Metadata Server - MDS
) daemon (ceph-mds
) 运行, MDS daemon 管理着与存储在 CephFS 上的文件相关的元数据, 并且协调着对 Ceph 存储系统的访问.
Table of Contents Ceph 文件系统简介 CephFS 架构 CephFS 主要特性 CephFS 的限制 配置 CephFS MDS ceph-deploy 部署 MDS 手动部署 MDS 移除一个 MDS 部署 Ceph 文件系统 创建一个 Ceph 文件系统 创建访问 CephFS 和客户端 以 kernel client 形式挂载 CephFS 手动挂载 自动挂载 以 FUSE client 形式挂载 CephFS 手动挂载 自动挂载 管理 Ceph 文件系统 卸载 Ceph 文件系统 卸载以 kernel clients 形式挂载的 CephFS 卸载以 FUSE client 形式挂载的 CephFS CephFS 管理命令 文件系统 设置 上线/下线 文件系统
Ceph 文件系统简介
CephFS 会在任何可能的情况下使用 POSIX 方法. 例如, CephFS 会在所有客户端之间保持缓存强一致性, 但在某些情况下, CephFS 会与严格的 POSIX 语义有些区别.
CephFS 架构
下图展示了 CephFS 的层次结构:
底层是核心集群所依赖的, 包括:
OSDs (ceph-osd)
: CephFS 的数据和元数据就存储在 OSDs 上
MDS (ceph-mds)
: Metadata Servers
, 管理着 CephFS 的元数据
Mons (ceph-mon)
: Monitors 管理着集群 Map 的主副本
Ceph 存储集群的协议层是 Ceph 原生的 librados
库, 与核心集群交互.
CephFS 库层包括 CephFS 库 libcephfs
, 工作在 librados
的顶层, 代表着 Ceph 文件系统.
最上层是能够访问 Ceph 文件系统的两类客户端.
CephFS 主要特性
CephFS 的限制
配置 CephFS MDS
要使用 CephFS, 至少就需要一个 metadata server 进程。可以手动创建一个 MDS, 也可以使用 ceph-deploy
或者 ceph-ansible
来部署 MDS。
ceph-deploy 部署 MDS
1 $ ceph-deploy mds create mds [mds2 ...]
手动部署 MDS
建立 MDS 元数据文件夹
1 $ sudo mkdir -p /var/lib/ceph/mds/ceph-{$id }
为提高性能, 可以将该文件夹挂载到 SSD 上。
2. 在 /etc/ceph/ceph.conf
中加入下面一节
1 2 [mds.{$id }] host = {hostname}
创建认证密钥
1 $ sudo ceph auth get-or-create mds.{$id } mon 'profile mds' mgr 'profile mds' mds 'allow *' osd 'allow *' > /var/lib/ceph/mds/ceph-{$id }/keyring
启动 MDS 服务
1 $ sudo systemctl enable --now ceph-mds@{$id }
查看集群状态:
1 2 3 4 $ ceph -s ... mds: cephfs_a-1/1/1 up {0=c=up:active}, 3 up:standby ...
移除一个 MDS
如果想要移除集群中的一个 MDS,可以通过如下步骤
先创建一个 MDS
停止旧的 MDS, 启用新的 MDS
1 $ ceph mds fail <mds name>
移除旧 MDS 的数据文件夹
1 $ sudo rm -rf /var/lib/ceph/mds/ceph-{$id }
部署 Ceph 文件系统
部署一个 CephFS, 步骤如下:
在一个 Mon 节点上创建 Ceph 文件系统.
若使用 CephX
认证, 需要创建一个访问 CephFS 的客户端
挂载 CephFS 到一个专用的节点.
创建一个 Ceph 文件系统
CephFS 需要两个 Pools - cephfs-data
和 cephfs-metadata
, 分别存储文件数据和文件元数据:
1 2 $ ceph osd pool create cephfs-data 256 256 $ ceph osd pool create cephfs-metadata 64 64
一般 metadata pool 可以从相对较少的 PGs 启动, 之后可以根据需要增加 PGs. 因为 metadata pool 存储着 CephFS 文件的元数据, 为了保证安全, 最好有较多的副本数. 为了能有较低的延迟, 可以考虑将 metadata 存储在 SSDs 上.
2. 安装 ceph-common
包:
1 $ sudo yum install -y ceph-common
创建一个 CephFS, 名字为 cephfs
:
1 $ ceph fs new cephfs cephfs-metadata cephfs-data
验证至少有一个 MDS
已经进入 Active
状态:
创建访问 CephFS 和客户端
在 Monitor 上, 创建一个用户:
1 2 3 4 $ ceph auth get-or-create client.<id> <capabilities> $ ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow rw' osd 'allow rw pool=cephfs-data, allow rw pool=cephfs-metadata'
验证生成的 key:
1 2 3 4 $ ceph auth get client.<id> $ ceph auth get client.cephfs
将 client keyring 复制到 client 节点的 /etc/ceph
目录下,并修改权限:
1 2 $ sudo scp root@mon1:/etc/ceph/ceph.client.cephfs.keyring /etc/ceph/ceph.client.cephfs.keyring $ sudo chmod 644 /etc/ceph/ceph.client.cephfs.keyring
以 kernel client 形式挂载 CephFS
可以手动用 mount
命令挂载 CephFS 或者通过 /etc/fstab
自动挂载 CephFS.
手动挂载
建立挂载点, 例如 /cephfs
:
挂载 CephFS. 列出多个 Monitors 的地址, 指定 CephX
所需的密钥文件和客户端名, 注意不是 keyring file:
1 $ sudo mount -t ceph mon1:6789,mon2:6789,mon3:6789/ /cephfs -o name=cephfs,secretfile=/etc/ceph/cephfs.secret
验证 CephFS 已经成功挂载:
自动挂载
创建挂载点:
编辑 /etc/fstab
文件:
1 $ echo "mon1:6789,mon2:6789,mon3:6789:/ /cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfs.key,_netdev,noatime 0 0" | sudo tee -a /etc/fstab
重启或者:
以 FUSE client 形式挂载 CephFS
同样地, 可以手动通过 ceph-fuse
挂载或者通过向 /etc/fstab
添加挂载项自动挂载.
将 ceph.conf
从 Monitor 节点复制到客户端节点,
1 2 $ sudo scp root@mon1:/etc/ceph/ceph.conf /etc/ceph/ceph.conf $ sudo chmod 644 /etc/ceph/ceph.conf
客户端上安装 ceph-fuse
:
1 $ sudo yum install ceph-fuse -y
手动挂载
创建挂载点, 例如 /cephfs
:
使用 ceph-fuse
挂载 CephFS, 如果 对应的 keyring 不在 /etc/ceph
下, 则要显示指定:
1 $ sudo ceph-fuse -n client.cephfs [--keyring /etc/ceph/client.cephfs.keyring] /cephfs
验证 CephFS 已经成功挂载:
自动挂载
创建挂载点:
向 /etc/fstab
添加一项:
1 2 3 $ echo "none /cephfs fuse.ceph ceph.id=cephfs[,ceph.conf=/etc/ceph/ceph.conf],_netdev,defaults 0 0" | sudo tee -a /etc/fstab $ echo "id=cephfs,conf=/etc/ceph/ceph.conf /mnt/ceph2 fuse.ceph _netdev,defaults 0 0" | sudo tee -a /etc/fstab
挂载 CephFS:
1 2 3 $ sudo mount -a $ sudo reboot
管理 Ceph 文件系统
卸载 Ceph 文件系统
卸载以 kernel clients 形式挂载的 CephFS
跟卸载其他挂载的磁盘一样:
1 2 3 4 $ sudo umount <mount-point> $ sudo umount /cephfs
卸载以 FUSE client 形式挂载的 CephFS
1 2 3 4 $ fusermount -u <mount-point> $ sudo fusermount -u /cephfs
CephFS 管理命令
文件系统
创建一个 CephFS。
1 ceph fs new <file system name> <metadata pool name> <data pool name>
Ceph 默认只能创建一个 CephFS,若要创建多个,需要设置可创建多个文件系统:
1 ceph fs flag set enable_multiple true
列出所有文件系统:
导出文件系统元数据。
删除文件系统。
1 ceph fs rm <file system name> [--yes-i-really-mean-it]
获取文件系统设置。
1 ceph fs get <file system name>
更改文件系统设置。
1 ceph fs set <file system name> <var> <val>
增加/删除数据 Pool
1 2 3 4 ceph fs add_data_pool <file system name> <pool name/id> ceph fs rm_data_pool <file system name> <pool name/id>
设置
更改最大文件大小限制:
1 ceph fs set <fs name> max_file_size <size in bytes>
如果大小设为0, 不意味着大小没有限制,而是只能创建大小为0的文件。最大文件大小过大
兼容性设置。设置客户端最小兼容版本
1 2 3 4 ceph fs set <fs name> min_compat_client <release> ceph fs set cephfs min_compat_client naultilus
上线/下线 文件系统
下线 CephFS
1 ceph fs set <fs_name> down true
上线 CephFS
1 ceph fs set <fs_name> down false