四、Ceph 文件系统 CephFS 的介绍与配置
一、CephFs介绍
Ceph File System (CephFS) 是与 POSIX 标准兼容的文件系统, 能够提供对 Ceph 存储集群上的文件访问. Jewel 版本 (10.2.0) 是第一个包含稳定 CephFS 的 Ceph 版本. CephFS 需要至少一个元数据服务器 (Metadata Server - MDS) daemon (ceph-mds) 运行, MDS daemon 管理着与存储在 CephFS 上的文件相关的元数据, 并且协调着对 Ceph 存储系统的访问。
>对象存储的成本比起普通的文件存储还是较高,需要购买专门的对象存储软件以及大容量硬盘。如果对数据量要求不是海量,只是为了做文件共享的时候,直接用文件存储的形式好了,性价比高。 ### 二、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 MDS
要使用 CephFS, 至少就需要一个 metadata server 进程。可以手动创建一个
MDS, 也可以使用 ceph-deploy 或者 ceph-ansible 来部署 MDS。
登录到ceph-deploy工作目录执行
# cd /my-cluster/
# ceph-deploy mds create cephnode01 cephnode02 cephnode03
# ps aux | grep mds
ceph 8447 0.0 1.3 344060 24404 ? Ssl 2019 0:20 /usr/bin/ceph-mds -f --cluster ceph --id cephnode01 --setuser ceph --setgroup ceph
[root@cephnode01 my-cluster]# ls /var/log/ceph/
四、部署Ceph文件系统
部署一个 CephFS, 步骤如下:
- 在一个 Mon 节点上创建 Ceph 文件系统.
- 若使用 CephX 认证,需要创建一个访问 CephFS 的客户端
- 挂载 CephFS 到一个专用的节点.
- 以 kernel client 形式挂载 CephFS
- 以 FUSE client 形式挂载 CephFS
4.1、创建一个 Ceph 文件系统
1、CephFS 需要两个 Pools - cephfs-data 和 cephfs-metadata, 分别存储文件数据和文件元数据
# ceph osd pool create cephfs-data 256 256
# ceph osd pool create cephfs-metadata 64 64
# ceph osd lspools
1 .rgw.root,2 default.rgw.control,3 default.rgw.meta,4 default.rgw.log,5 rbd,6 kube,7 cephfs-data,8 cephfs-metadata,
2、创建一个 CephFS, 名字为 cephfs:
# ceph fs new cephfs cephfs-metadata cephfs-data
new fs with metadata pool 8 and data pool 7
# ceph fs status cephfs
cephfs - 0 clients
======
+------+--------+------------+---------------+-------+-------+
| Rank | State | MDS | Activity | dns | inos |
+------+--------+------------+---------------+-------+-------+
| 0 | active | cephnode01 | Reqs: 0 /s | 10 | 12 | ##源数据存储在node01
+------+--------+------------+---------------+-------+-------+
+-----------------+----------+-------+-------+
| Pool | type | used | avail |
+-----------------+----------+-------+-------+
| cephfs-metadata | metadata | 2246 | 6744M |
| cephfs-data | data | 0 | 6744M |
+-----------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
| cephnode03 | ##备用节点node2和node3
| cephnode02 |
+-------------+
MDS version: ceph version 12.2.12 (1436006594665279fe734b4c15d7e08c13ebd777) luminous (stable)
# ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow rw' osd 'allow rw pool=cephfs-data, allow rw pool=cephfs-metadata'
[client.cephfs]
key = AQB8kgxeq/p2BhAAyG8jY8WkYirNkniCz8Q0NA==
# ceph auth get client.cephfs
exported keyring for client.cephfs
[client.cephfs]
key = AQB8kgxeq/p2BhAAyG8jY8WkYirNkniCz8Q0NA==
caps mds = "allow rw" ##对madata源数据有读写权限
caps mon = "allow r" ##对monitor有读权限
caps osd = "allow rw pool=cephfs-data, allow rw pool=cephfs-metadata" ##对cephfs-data有读写权限
# ceph -s
cluster:
id: b1f800c7-a4bc-4fc7-87e2-239291f2e4c7
health: HEALTH_WARN
application not enabled on 1 pool(s)
services:
mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03
mgr: cephnode01(active), standbys: cephnode02, cephnode03
mds: cephfs-1/1/1 up {0=cephnode01=up:active}, 2 up:standby ##mds已经启动
osd: 3 osds: 3 up, 3 in
rgw: 1 daemon active
data:
pools: 8 pools, 112 pgs
objects: 251 objects, 4.97KiB
usage: 3.03GiB used, 21.0GiB / 24.0GiB avail
pgs: 112 active+clean
# ceph mds stat
cephfs-1/1/1 up {0=cephnode01=up:active}, 2 up:standby
# ceph fs ls
name: cephfs, metadata pool: cephfs-metadata, data pools: [cephfs-data ]
# ceph fs status
4.1.1、以 kernel client 形式挂载 CephFS(读写速度受限,但是生产建议此方式,不需要安装额外的组件)
1、创建挂载目录 cephfs
# mkdir /cephfs
# mount -t ceph 192.168.171.135:6789,192.168.171.136:6789,192.168.171.137:6789:/ /cephfs/ -o name=cephfs,secret=AQB8kgxeq/p2BhAAyG8jY8WkYirNkniCz8Q0NA==
# df -h
...省略
192.168.171.135:6789,192.168.171.136:6789,192.168.171.137:6789:/ 6.6G 0 6.6G 0% /cephfs
# echo "cephnode01:6789,cephnode02:6789,cephnode03:6789:/ /cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfs.key,_netdev,noatime 0 0" | sudo tee -a /etc/fstab
# stat -f /cephfs
文件:"/cephfs"
ID:55231a3600ab4e35 文件名长度:255 类型:ceph
块大小:4194304 基本块大小:4194304
块:总计:1686 空闲:1686 可用:1686
Inodes: 总计:0 空闲:-1
4.1.2、以 FUSE client 形式挂载 CephFS(推荐此种方式,仅限于熟悉ceph者)
1、安装ceph-common(记得提前配置好yum源)
yum install -y ceph-common
yum install -y ceph-fuse
# scp /etc/ceph/ceph.conf root@192.168.171.10:/etc/ceph/
# chmod 644 /etc/ceph/ceph.conf
/etc/ceph/ceph.client.cephfs.keyring:此文件使用 此命令:# ceph auth get client.cephfs 将内容重定向到/etc/ceph/ceph.client.cephfs.keyring 即可
# ceph-fuse --keyring /etc/ceph/ceph.client.cephfs.keyring --name client.cephfs -m 192.168.171.135:6789,192.168.171.136:6789,192.168.171.137:6789 /cephfs/
ceph-fuse[54915]: starting ceph client2020-01-01 21:48:13.265605 7f71b2d520c0 -1 init, newargv = 0x561617abe9c0 newargc=9
ceph-fuse[54915]: starting fuse
# df -h
...省略
文件系统 容量 已用 可用 已用% 挂载点
ceph-fuse 6.6G 0 6.6G 0% /cephfs
# stat -f /cephfs
文件:"/cephfs"
ID:0 文件名长度:255 类型:fuseblk
块大小:4194304 基本块大小:4194304
块:总计:1686 空闲:1686 可用:1686
Inodes: 总计:1 空闲:0
6、自动挂载
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
fusermount -u /cephfs
五、MDS主备与主主切换
5.1、配置主主模式
- 当cephfs的性能出现在MDS上时,就应该配置多个活动的MDS。通常是多个客户机应用程序并行的执行大量元数据操作,并且它们分别有自己单独的工作目录。这种情况下很适合使用多主MDS模式。
- 配置MDS多主模式
每个cephfs文件系统都有一个max_mds设置,可以理解为它将控制创建多少个主MDS。注意只有当实际的MDS个数大于或等于max_mds设置的值时,mdx_mds设置才会生效。例如,如果只有一个MDS守护进程在运行,并且max_mds被设置为两个,则不会创建第二个主MDS。
# ceph fs set <文件系统名> max_mds 2
##例如:
# ceph fs set cephfs max_mds 2
##查看状态:
# ceph -s
...省略
mds: cephfs-2/2/2 up {0=cephnode01=up:active,1=cephnode02=up:active}, 1 up:standby ##目前就是2主
1.3、配置备用MDS 即使有多个活动的MDS,如果其中一个MDS出现故障,仍然需要备用守护进程来接管。因此,对于高可用性系统,实际配置max_mds时,最好比系统中MDS的总数少一个。
但如果你确信你的MDS不会出现故障,可以通过以下设置来通知ceph不需要备用MDS,否则会出现insufficient standby daemons available告警信息:
# ceph fs set <fs> standby_count_wanted 0
5.2、还原单主MDS
2.1、设置max_mds
# ceph fs set <文件系统名> max_mds 1
ceph mds deactivate cephfs:2
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!