zoukankan      html  css  js  c++  java
  • ceph集群之cephFS文件存储

    一、cephFS简介

    每个CephFS文件系统至少需要一个MDS(metadata server),一般是三个。CephFS 是个与 POSIX 标准兼容的文件系统,文件目录和其他元数据存储在RADOS中,MDS缓存元信息和文件目录信息。

    cephfs的核心组件有:MDS、Clients、RADOS。

    参考:CephFS 介绍及使用经验分享

    各个组件之间的依赖关系如下:

    • client 《==》 MDS:元数据操作和capalities。
    • Client 《==》 OSD: 数据IO。
    • MDS 《==》 OSD:元数据IO。

    cephfs支持用户级别和内核级别的挂载使用,可扩展性高,并且可以共享文件系统,多个clients可以同时读写。MDS支持高可用性,默认采用的是主备模式(也可以通过配置改为多主),并且cephfs支持文件系统的配额限制。

    cephfs中MDS多主的优势及特点如下:

    • 当元数据默认的单个 MDS 成为瓶颈时,配置多个活跃的 MDS 守护进程,提升集群性能。
    • 多个活跃的 MDS 有利于性能提升。
    • 多个活跃的MDS 可以实现MDS负载均衡。
    • 多个活跃的MDS 可以实现多租户资源隔离。
    • 它能够将文件系统树分割成子树,每个子树可以交给特定的MDS进行权威管理,从而达到了随着元数据服务器数量的增加,集群性能线性地扩展。
    • 每个子树都是基于元数据在给定目录树中的热动态创建的。
    • 一旦创建了子树,它的元数据就被迁移到一个未加载的MDS。
    • 后续客户端对先前授权的MDS的请求被转发。

    没有特殊声明,在 ceph-node-11 节点上执行

    二、部署MDS

    为了高可用性,我们部署三个MDS。

    $ cd ~/ceph-deploy/    # 必须在这个目录下执行
    
    $ ceph-deploy mds create ceph-node-11 ceph-node-12 ceph-node-13
    # 安装mds
    
    $ ceph -s         # 查询集群状态
      cluster:
        id:     b5ae2882-7ec6-46cd-b28e-6d7527e5deb3
        health: HEALTH_OK
     
      services:
        mon: 3 daemons, quorum ceph-node-11,ceph-node-12,ceph-node-13 (age 42m)
        mgr: ceph-node-11(active, since 46m), standbys: ceph-node-12, ceph-node-13
        mds:  3 up:standby        # 因为当前还没有文件系统,所以三个都是standby状态
        osd: 3 osds: 3 up (since 44m), 3 in (since 44m)
        rgw: 1 daemon active (ceph-node-11)
     
      task status:
     
      data:
        pools:   6 pools, 192 pgs
        objects: 201 objects, 3.6 MiB
        usage:   3.0 GiB used, 297 GiB / 300 GiB avail
        pgs:     192 active+clean
    

    三、创建cephfs文件系统

    • 一个Ceph文件系统至少需要两个RADOS池,一个用于数据,另一个用于元数据。注意元数据池中的任何数据丢失都可能导致整个文件系统无法访问。
    • 对元数据池使用较低延迟的存储(例如SSD),因为这将直接影响在客户端上观察到的文件系统操作的延迟。

    3.1 创建pool

    $ ceph osd pool create cephfs_metadata 16 16
    $ ceph osd pool create cephfs_data 16 16
    
    $ ceph osd lspools
    1 .rgw.root
    2 default.rgw.control
    3 default.rgw.meta
    4 default.rgw.log
    5 default.rgw.buckets.index
    6 default.rgw.buckets.data
    7 cephfs_metadata
    8 cephfs_data
    # 确认pools已创建
    

    3.2 创建文件系统

    $ ceph fs new cephfs-demo cephfs_metadata cephfs_data
    # 创建文件系统,格式为:ceph fs new <fs_name> <metadata> <data>
    
    $ ceph fs ls   # 查看cephfs相关信息
    name: cephfs-demo, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
    

    3.3 确认mds进入active状态

    $ ceph -s
      cluster:
        id:     b5ae2882-7ec6-46cd-b28e-6d7527e5deb3
        health: HEALTH_OK
     
      services:
        mon: 3 daemons, quorum ceph-node-11,ceph-node-12,ceph-node-13 (age 60m)
        mgr: ceph-node-11(active, since 64m), standbys: ceph-node-12, ceph-node-13
        mds: cephfs-demo:1 {0=ceph-node-11=up:active} 2 up:standby
        # 当前活跃状态的是pod4-core-20-6,还有2个备用节点
        osd: 3 osds: 3 up (since 62m), 3 in (since 62m)
        rgw: 1 daemon active (ceph-node-11)
     
      task status:
        scrub status:
            mds.ceph-node-11: idle
     
      data:
        pools:   8 pools, 224 pgs
        objects: 223 objects, 3.6 MiB
        usage:   3.0 GiB used, 297 GiB / 300 GiB avail
        pgs:     224 active+clean
    

    3.4 cephfs内核级别挂载

    直接内核级别使用,性能最好。

    参考:官方文档

    $ mkdir /ceph_fs
    
    $ mount -t ceph 192.168.99.11:6789,192.168.99.12:6789,192.168.99.13:6789:/ /ceph_fs/ -o name=admin
    # 挂载需要指定ceph集群中monitor地址及用户名,monitor地址可以指定一个或多个(如果其中一个宕机不影响使用)
    

    挂载后,即可自行写入数据进行测试。

    3.5 用户空间挂载使用

    $ yum -y install ceph-fuse     # 安装客户端
    
    $ mkdir /ceph-fuse   # 创建挂载点并挂载使用
    
    $ ceph-fuse -n client.admin -m 192.168.99.11:6789,192.168.99.12:6789,192.168.99.13:6789 /ceph-fuse
    # monitor地址可以可以指定一个或多个(如果其中一个宕机不影响使用)
    
    $ df -hT /ceph-fuse       # 查看确认
    文件系统       类型            容量  已用  可用 已用% 挂载点
    ceph-fuse      fuse.ceph-fuse   94G     0   94G    0% /ceph-fuse
    

    3.6 不同用户挂载不同目录

    3.6.1 添加新的pool到cephfs
    # cephfs中增加新的pool
    $ ceph osd pool create cephfs_data1 64 64   # 创建pool
    $ ceph fs add_data_pool cephfs-demo cephfs_data1    #加到cephfs中
    
    3.6.2 创建bruce的用户,这个用户只能访问目录/bruce,数据存储在 pool cephfs_data1
    $ ceph auth get-or-create client.bruce mon 'allow r' 
      mds 'allow r, allow rw path=/bruce' osd 'allow rw pool=cephfs_data1'
      [client.bruce]
    	key = AQCtFc9g/CmyERAAzi7ORpEWIxlMiiFC1GK7nA==
    
    3.6.3 客户端挂载
    $ mkdir /data1
    $ mount -t ceph 192.168.99.11:6789,192.168.99.12:6789,192.168.99.13:6789:/ /data1/ 
      -o name=bruce,secret=AQCtFc9g/CmyERAAzi7ORpEWIxlMiiFC1GK7nA==
    

    四、cephfs权限与访问控制

    4.1 添加用户

    添加用户jerry,jerry只有对/jerry路径下的文件具有读写权限,对其他路径下的文件只有读的权限

    $ ceph auth get-or-create client.jerry mon 'allow r' 
    >   mds 'allow rw,allow rw path=/jerry' osd 'allow rw pool=cephfs_data2'
    [client.jerry]
    	key = AQCdFs9gcepnKRAActZ4OcFf0bg3HsDpVMhlMA==
    
    $ mount -t ceph 192.168.99.11:6789:/  /data   -o name=jerry,secret=AQCdFs9gcepnKRAActZ4OcFf0bg3HsDpVMhlMA==
    # 使用jerry用户挂载
    

    4.2 获取权限列表

    $ ceph auth list
    

    4.3 删除用户

    $ ceph auth del client.jerry
    

    4.4 获取某个用户的key

    $ ceph auth get-key client.bruce
    

    4.5 修改用户权限

    $ ceph auth caps client.jerry mon 'allow r' mds 'allow r, allow rw path=/jerry, allow rw path=/test' osd 'allow rw'
    

    4.6 注意事项

    • 当用java api操作cephfs时,api无法指定新建文件or目录的所属用户or所属组,这两个属性取决于运行java程序时的当前用户(uid)及其所属的用户组(gid)
    • 经过测试发现,cephfs文件or目录的权限是linux本身用户权限和cephfs用户权限的交集
    • 修改用户权限后,在本地需要重新挂载才可生效
    • 建目录,设置权限无需前后顺序
    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    quick-cocos2dx 3.5集成protobuf
    lua和luajit在cocos2dx mac模拟器的简单测试
    cocos2dx-lua手游客户端框架设计
    cocos2dx动画技术选型
    lua中的面向对象
    html 学习
    OC 与js 互相调用
    Carthage的安装和使用
    Bomb后端云使用
    FMDB简单使用
  • 原文地址:https://www.cnblogs.com/lvzhenjiang/p/14907610.html
Copyright © 2011-2022 走看看