美文网首页
CephFS 部署和使用

CephFS 部署和使用

作者: 河码匠 | 来源:发表于2024-08-15 08:53 被阅读0次

CephFS (Ceph Filesystem) 是 Ceph 分布式存储系统的文件系统层,提供了一个高可用、可扩展、并且具有强大容错能力的 POSIX 兼容的分布式文件系统。它允许用户像使用本地文件系统一样,通过挂载点直接访问分布在 Ceph 集群中的数据。

一、 关键组件

Ceph Metadata Server (MDS):

CephFS 的关键组件,管理文件系统的元数据。元数据包括文件和目录的名称、路径、权限等信息。MDS 的存在使得 CephFS 可以高效地支持 POSIX 文件系统操作。多个 MDS 可以协同工作以分担元数据管理的负载。

二、 概念

1. 元数据池(Metadata Pool)

作用和功能
  • 元数据存储:元数据池用于存储 CephFS 文件系统的元数据。元数据包括文件和目录的名称、层次结构、权限、所有者、时间戳等信息,而不是文件的实际内容。

  • 目录结构管理:元数据池保存了文件系统中的目录树结构,帮助 CephFS 高效地管理和查询文件及目录。例如,当用户查询或修改文件路径时,元数据池中的信息会被频繁访问。

  • 快速检索:因为元数据操作(如文件打开、关闭、重命名等)频繁且对性能要求高,因此 CephFS 通常将元数据存储在专门的高性能池中,往往是使用 SSD 这样的高速存储设备。

元数据池的实现
  • 使用专门的池:在 CephFS 中,元数据池通常使用独立的存储池(如 SSD 池)来提高性能。用户可以在创建 CephFS 文件系统时指定哪个存储池用于存储元数据。

  • Metadata Server (MDS):元数据池由 Ceph 的 Metadata Server (MDS) 负责管理。MDS 从元数据池中读取和写入数据,并处理所有与文件系统元数据相关的操作。

2. 数据池(Data Pool)

作用和功能
  • 数据存储:数据池用于存储 CephFS 文件系统中的实际数据内容。文件的实际数据块存储在数据池中,与元数据池中的元数据相对应。

  • 分布式存储:CephFS 将文件数据分块存储,每个块被称为对象(Object),这些对象分布在整个 Ceph 集群的多个 OSD(Object Storage Daemon)上,以实现高可用性和容错能力。

  • 副本和容错:数据池支持配置副本策略(如 3 副本),以确保数据的持久性和容错能力。当一个 OSD 失效时,数据可以从其他副本中恢复。

数据池的实现
  • 多数据池支持:CephFS 支持多个数据池,可以根据不同的使用场景和性能需求,创建多个数据池,并将不同类型的数据存储在不同的池中。例如,热数据可以存储在性能较高的 SSD 池中,而冷数据则存储在大容量的 HDD 池中。

  • 文件布局:通过调整 CephFS 的文件布局属性,可以将特定文件或目录的数据存储在指定的数据池中。这种灵活性允许用户优化存储策略,最大限度地提高性能。

三、 CephX 认证机制

CephX 是 Ceph 集群的认证和授权机制,负责控制客户端对 Ceph 集群的访问。通过 CephX,您可以为不同的客户端用户创建密钥,并根据需要授予不同的访问权限。

示例

  • 为用户 a 创建 CephX 用户 client.a
ceph auth get-or-create client.a \
  mon 'allow r' \
  mds 'allow rw path=/A' \
  osd 'allow rw pool=<data_pool_name>'
  • 说明
    mon 'allow r':允许只读访问 Monitor。
    mds 'allow rw path=/A':允许对 /A 目录的读写访问。
    osd 'allow rw pool=<data_pool_name>':允许对指定数据池的读写访问。请将 <data_pool_name> 替换为实际的数据池名称。

  • 获取密钥

ceph auth get client.a -o /etc/ceph/ceph.client.a.keyring

四、创建 cephfs

1. 部署 mds 服务

部署完整 ceph 集群查看 ansible 部署 ceph

  • 修改 /etc/ansible/hosts 添加 [mdss] 其他内容不变
[mdss]
TEST-02
  • 修改 group_vars/all.yml 可以不修改直接默认
ceph_conf_overrides:
  global:
    # 定义要使用的 msgr 协议版本。默认两个都是 true
    ms_bind_msgr2: true
    ms_bind_msgr1: true
  • 执行安装
ansible-playbook site.yml
2. 创建 cephfs_datacephfs_metadata

pg 值 32 根据 osd 确定。查看 ceph pg 状态和数量的计算方法

ceph osd pool create cephfs_data 32 32
ceph osd pool create cephfs_metadata 32 32
3. 创建 cephfs
  • 创建
ceph fs new cephfs cephfs_metadata cephfs_data
4. 使用 ceph-fuse 挂在 cephfs
  • 安装 Ceph 客户端工具
apt-get install ceph-fuse
  • 挂载
ceph-fuse -n client.admin /mnt/cephfs --keyring=/etc/ceph/ceph.client.admin.keyring
  • 查看
mount -l

ceph-fuse on /mnt/cephfs type fuse.ceph-fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
  • 卸载
fusermount -u /mnt/cephfs
5. 内核 mount 命令挂载

\color{red}{注意}:这的 ip 是 mon 服务的
\color{red}{注意}:name 用户名 admin 不是 client.admin

mount -t ceph 192.168.100.6:6789:/ /mnt/cephfs -o name=admin,secretfile=/etc/ceph/ceph.client.admin.key

mount -l

然后报错

mount error 13 = Permission denied

查看权限

# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
    key = AQAXE4ZmGlMtARAAOCojkBf1wGiLBA3+oHcjFQ==
    caps mds = "allow *"
    caps mgr = "allow *"
    caps mon = "allow *"
    caps osd = "allow *"

查看 mon 日志

2024-08-15T15:48:46.014+0800 7f0d48cf3700  0 --1- [v2:192.168.100.6:3300/0,v1:192.168.100.6:6789/0] >>  conn(0x558398d70400 0x558398b46000 :6789 s=ACCEPTING pgs=0 cs=0 l=0).handle_client_banner accept peer addr is really - (socket is v1:192.168.100.6:40414/0)
2024-08-15T15:48:46.014+0800 7f0d44ceb700  0 cephx server client.client.admin: couldn't find entity name: client.client.admin

擦 - - 发现用户名错了 client.client.admin

6. cephfs 其他操作
  • 查看 cephfs 使用的池
ceph fs ls
  • cephfs 状态
ceph fs status cephfs
  • 删除 cephfs
ceph fs rm cephfs --yes-i-really-mean-it
  • 查看详细配置
ceph fs dump

五、一些关键配置

参数说明

参数 默认值 说明 配置建议
mds_cache_mid 0.7 设置缓存中的新项插入在缓存 LRU(最近最少使用)的哪个位置。调整这个值可以影响缓存命中的概率。 通过控制插入点,可以调优缓存管理策略,但通常这个参数无需频繁调整,除非你在做特定的性能调优。
mds_dir_max_commit_size 10 控制目录更新的最大事务大小(以 MB 为单位),超过此大小时将拆分为更小的事务。 较大的目录更新事务会减少提交的频率,提高写入效率,但也可能增加事务处理的延迟。根据目录操作的频率和规模调整此值以优化性能。
mds_dir_max_entries 0(不限制) 目录最大条目数,超过这个限制将拒绝新条目并返回 ENOSPC 错误。 对于大规模目录,适当的限制可以防止性能下降,但需要根据具体应用需求设定。
mds_cache_memory_limit 一般自动配置 限制 MDS 守护进程可以使用的最大内存量。 这是控制 MDS 性能的关键参数。设置较高的内存限制可以使 MDS 缓存更多的元数据,从而减少磁盘 I/O,提高访问速度。但设置过高可能会导致内存不足问题。
mds_decay_halflife 5.0 目录温度计数器衰减速率,用于负载均衡。 影响目录负载平衡的动态性。较短的半衰期使温度衰减更快,有助于更快的负载平衡调整,但可能增加系统波动性。
mds_beacon_interval 和 mds_beacon_grace 4.0 秒(间隔),15.0 秒(最大等待时间) 控制 MDS 向 MON 发送心跳信号的间隔和最大等待时间。 这些参数控制 MDS 守护进程的失效检测速度。较短的间隔和较小的最大等待时间可以加快故障检测和恢复,但可能增加网络开销。
mds_reconnect_timeout 45.0 秒 MDS 在恢复过程中等待客户端重连的超时时间。 较短的超时设置可以加快 MDS 恢复过程,但可能导致某些客户端连接失败。适当的设置可以平衡恢复速度和客户端稳定性。
mds_log_max_events 和 mds_log_max_segments -1(事件数,不限制),128(最大段数) 控制 MDS 日志中最大事件数量和最大段数。超过这个数量时,日志将被修剪。 较大的日志容量可以减少频繁修剪操作,从而提高写入性能,但可能会占用更多存储空间和内存。
mds_bal_split_size 10000 目录达到此大小时,MDS 会将目录片段拆分为更小的部分。 大型目录的拆分可以平衡负载,提高并行处理能力,但可能增加元数据操作的复杂性。根据目录规模和访问模式调整此值。
mds_bal_fragment_interval 5 秒 目录片段达到拆分或合并条件后,实际执行该操作的延迟。 较短的延迟可以加快负载调整,但可能会引起频繁的片段操作,影响系统稳定性。
mds_bal_mode 0(混合模式) 计算 MDS 负载的方法(混合模式、请求率和延迟、CPU 负载)。 不同的负载计算模式会影响 MDS 间的负载均衡策略。根据集群的具体负载类型选择合适的模式,可以优化整体性能。

修改方法

1. 修改单个 MDS 守护进程的配置

对于大多数场景,使用 ceph config set 是修改配置参数的最佳方法,它可以动态地、即时地应用更改,而无需重启守护进程

ceph config set mds.<mds_name> <parameter> <value>

示例:
ceph config set mds.TEST-02 mds_cache_mid 0.9
2. 修改所有 MDS
ceph config set mds mds_cache_mid 0.9
3. 编辑 ceph.conf 配置文件

在 MDS 节点上修改 /etc/ceph/ceph.conf

[mds]
mds_cache_size = 0.9

重启服务

systemctl restart ceph-mds@<mds_name>.service
4. 临时修改
ceph tell mds.<mds_name> injectargs --<parameter>=<value>

示例:
ceph tell mds.mds-1 injectargs --mds_cache_mid =0.9

相关文章

  • Ceph FileSystem - Create & Mount

    Metadata Server 使用 CephFS 至少需要部署一个 Metadata Server。 添加 Me...

  • 正确删除mds服务

    title: 正确删除mds服务 1、前言 原始需求是在使用cephfs的时候,部署完mds服务之后,比如部署了3...

  • kubernetes 使用ceph

    下载external storage项目 kubernetes 使用 cephfs 进入cephfs所在的目录 此...

  • 如何恢复cephfs数据

    title: 如何恢复cephfs数据 1、前言 这里实验在使用cephfs时,如果cephfs的元数据损坏或丢失...

  • CephFS 使用

    之前介绍了 RBD 的使用方法,有了 RBD,远程磁盘挂载的问题就解决了,但 RBD 的问题是不能多个主机共享一个...

  • CephFS搭建与部署

    0. 前提 已搭建好的ceph cluster,详细步骤可参见Ceph 部署(Centos7 + Luminous...

  • 使用file layouts来提升cephfs的读性能

    前言 这里想介绍下,如何使用cephfs的FILE LAYOUTS功能来提升cephfs的读性能。 我们都知道ce...

  • cephfs介绍和功能测试

    cephfs简介 cephfs是ceph提供的兼容POSIX协议的文件系统,对比rbd和rgw功能,这个是ceph...

  • openshift 使用 NFS StorageClass

    原来一直使用ceph 的 storageclass,但是openshift 不支持cephfs的 storagec...

  • CephFS自动化部署脚本

    前提 主机为CentOS 7.2及以上 预装ceph版本为ceph-luminous 12.2.5 主节点可无密访...

网友评论

      本文标题:CephFS 部署和使用

      本文链接:https://www.haomeiwen.com/subject/opilkjtx.html