CephFS 部署和使用

2024-08-15  本文已影响0人  河码匠

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

一、 关键组件

Ceph Metadata Server (MDS):

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

二、 概念

1. 元数据池(Metadata Pool)

作用和功能
元数据池的实现

2. 数据池(Data Pool)

作用和功能
数据池的实现

三、 CephX 认证机制

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

示例

ceph auth get-or-create client.a \
  mon 'allow r' \
  mds 'allow rw path=/A' \
  osd 'allow rw pool=<data_pool_name>'
ceph auth get client.a -o /etc/ceph/ceph.client.a.keyring

四、创建 cephfs

1. 部署 mds 服务

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

[mdss]
TEST-02
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
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 其他操作
ceph fs ls
ceph fs status 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
上一篇 下一篇

猜你喜欢

热点阅读