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用戶權限的交集
  • 修改用戶權限后,在本地需要重新掛載才可生效
  • 建目錄,設置權限無需前后順序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM