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用户权限的交集
    • 修改用户权限后,在本地需要重新挂载才可生效
    • 建目录,设置权限无需前后顺序
    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    剑指offer——最小的K个数和数组中第K大的元素
    Leetcode刷题指南链接整理
    160. Intersection of Two Linked Lists
    100. Same Tree
    92. Reverse Linked List II
    94. Binary Tree Inorder Traversal
    79. Word Search
    78,90,Subsets,46,47,Permutations,39,40 DFS 大合集
    0x16 Tire之最大的异或对
    0x16 Tire
  • 原文地址:https://www.cnblogs.com/lvzhenjiang/p/14907610.html
Copyright © 2011-2022 走看看