CephFS 部署和使用

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355