ceph叢集之cephFS檔案儲存
阿新 • • 發佈:2021-06-20
目錄
3.6.2 建立bruce的使用者,這個使用者只能訪問目錄/bruce,資料儲存在
一、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 20 20 # 建立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使用者許可權的交集
- 修改使用者許可權後,在本地需要重新掛載才可生效
- 建目錄,設定許可權無需前後順序