網站首頁 編程語言 正文
1.CephFS文件存儲核心概念
1.1.CephFS文件存儲簡介
官方文檔:docs.ceph.com/en/pacific/…
傳統的文件存儲通常使用的是NAS存儲,通過NFS協議來實現,NFS類型的文件存儲可以同時共享給多個客戶端使用,傳輸協議簡單,只要有網絡就可以實現。
對于存儲而言,高可用性是必須具備的,一旦存儲宕機,就會影響應用程序的使用,而NAS存儲最典型的缺點就是單點故障。
在Ceph分布式存儲系統中有關于文件存儲的存儲類型,稱之為CephFS,CephFS是一個符合POSIX的文件系統,構建在Ceph對象存儲Rados之上,CephFS可以為各種應用程序提供最先進的、多用途、高可用性和高性能的文件存儲。
CephFS文件系統至少需要一個MDS(Metadata Server組件)來存儲文件系統的元數據信息,因此在使用CephFS文件存儲之前,首先要在集群中部署MDS組件,我們希望CephFS文件存儲具備高可用性,所以MDS組件一般都會在集群中部署多個,大多數情況下都是三個MDS組件。
CephFS支持用戶級別和內核級別的掛載使用,可擴展性極高,并且可以同時讓多個Client客戶端進行讀寫。
簡而言之:CephFS文件存儲就是提供類似NFS服務的共享存儲系統,相當于基于NFS的分布式文件存儲系統,多個客戶端可以同時去掛載這個文件存儲系統,并且還可以提供高可靠服務。
1.2.CephFS文件存儲架構
CephFS文件系統的核心組件有:
MDS:MDS組件主要用于保存文件的元數據信息,會單獨存放在一個Pool資源池中。
MDS支持高可用性,默認采用主備模式,也可以配置成多主模式。
Client:客戶端。
RADOS:CephFS也是基于RADOS來實現文件存儲的,CephFS文件存儲中的文件數據與文件的元數據都是單獨在不同的Pool資源池中存儲的。
Ceph集群如果想要實現CephFS文件存儲,首先需要在集群中準備MDS組件,MDS組件主要是來保存文件存儲中文件的元數據信息,一般會部署三個MDS組件,形成高可用模式,其中一個MDS的Active狀態提供服務,另外兩個都是Standby的狀態,當Active狀態的MDS掛掉后,Standby狀態的MDS之間會就進行選舉,選舉成功的MDS節點就會成為集群中的Active。
MDS組件會將文件的元數據信息寫在Journal日志中,最終Journal日志中的文件元數據信息會寫入到一個Metadata的Pool資源池中,所有的MDS節點都會連接這個Pool資源池,并且MDS各節點之間會交換元數據信息,當Active狀態的MDS組件掛掉了,選舉出來的MDS會從Metadata Pool資源池獲取整個集群中所有文件的元數據信息。
CephFS會將用戶寫入的文件數據與文件的元數據分開存放在不同的Pool資源池中,將數據與元數據分開存儲。
Client客戶端可以直接在存放數據的Pool資源池中寫入文件數據,寫入的文件依舊會被拆分成多個Object對象文件,這些Object對象文件寫入到PG中,最后通過CRUSH算法存儲在多個OSD中。
1.3.CephFS文件系統的應用場景與特性
應用場景:
- 為K8S集群Pod資源提供持久化存儲。
- 多個服務器同時掛載一個文件系統,同時進行讀寫。
CephFS文件系統多MDS的優勢及特點:
- 當元數據默認的單個MDS成為瓶頸時,配置多個活躍的MDS守護進程,提升集群性能。
- 多個活躍的MDS有利于性能提升。
- 多個活躍的MDS可以實現MDS負載均衡。
- 多個活躍的MDS可以實現多租戶資源隔離。
- 它能夠將文件系統樹分割成子樹,每個子樹可以交給特定的MDS進行權威管理,從而達到了隨著元數據服務器數量的增加,集群性能線性地擴展。
- 每個子樹都是基于元數據在給定目錄樹中的熱動態創建的。
- 一旦創建了子樹,它的元數據就被遷移到一個未加載的MDS。
- 后續客戶端對先前授權的MDS的請求被轉發。
2.在Ceph集群中部署MDS組件
1.在集群所有節點都安裝mds組件
yum -y install ceph-mds
2.將所有的ceph節點都部署mds組件形成高可用集群
[root@ceph-node-1 ~]# cd /data/ceph-deploy/
[root@ceph-node-1 ceph-deploy]# ceph-deploy mds create ceph-node-1 ceph-node-2 ceph-node-3
3.查看集群狀態
[root@ceph-node-1 ceph-deploy]# ceph -s
cluster:
id: a5ec192a-8d13-4624-b253-5b350a616041
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-node-1,ceph-node-2,ceph-node-3 (age 19h)
mgr: ceph-node-1(active, since 19h), standbys: ceph-node-2, ceph-node-3
mds: 3 up:standby
osd: 6 osds: 6 up (since 18h), 6 in (since 18h)
rgw: 1 daemon active (ceph-node-1)
task status:
data:
pools: 7 pools, 320 pgs
objects: 252 objects, 161 KiB
usage: 6.1 GiB used, 54 GiB / 60 GiB avail
pgs: 320 active+clean
可以看到集群中已經有3個MDS組件了,但是狀態都處于standby,那是因為集群中還沒有創建CephFS文件系統,導致MDS組件無法選舉。
3.在Ceph集群中創建一個CephFS文件存儲系統
一個Cephfs文件存儲系統至少需要兩個Rados資源池,一個資源池用于存放文件數據,另一個資源池用于存放文件的元數據信息,如果元數據資源池中的任何數據丟失,都有可能導致整個文件系統無法訪問。
對元數據資源池建議使用較低延遲的OSD,例如可以使用SSD硬盤的OSD,元數據資源池的延遲直接會影響在客戶端中文件系統操作的延遲。
3.1.為CephFS文件存儲系統創建Pool資源池
創建好這兩個Pool資源池后,只能為一個cephfs文件存儲系統使用,如果集群中需要創建多個cephfs文件系統,則需要創建多個元數據池和數據池,一個元數據資源池和數據資源池只能為一個Cephfs文件系統提供使用。
1.創建元數據資源池
[root@ceph-node-1 ~]# ceph osd pool create cephfs_metadata 16 16
pool 'cephfs_metadata' created
2.創建數據資源池
[root@ceph-node-1 ~]# ceph osd pool create cephfs_data 16 16
pool 'cephfs_data' created
3.查看創建的資源池
[root@ceph-node-1 ~]# ceph osd lspools
1 ceph-rbd-data
2 .rgw.root
3 default.rgw.control
4 default.rgw.meta
5 default.rgw.log
6 default.rgw.buckets.index
7 default.rgw.buckets.data
8 cephfs_metadata
9 cephfs_data
3.2.創建CephFS文件系統
命令格式:ceph fs new {cephfs_name} {metadata_pool} {data_pool}
1.創建cephfs文件存儲
[root@ceph-node-1 ~]# ceph fs new cephfs-storage cephfs_metadata cephfs_data
new fs with metadata pool 8 and data pool 9
2.查看創建的cephfs文件存儲
[root@ceph-node-1 ~]# ceph fs ls
name: cephfs-storage, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
[root@ceph-node-1 ~]# ceph fs volume ls
[
{
"name": "cephfs-storage"
}
]
3.3.再次觀察Ceph集群的狀態
[root@ceph-node-1 ~]# ceph -s
cluster:
id: a5ec192a-8d13-4624-b253-5b350a616041
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-node-1,ceph-node-2,ceph-node-3 (age 24h)
mgr: ceph-node-1(active, since 24h), standbys: ceph-node-2, ceph-node-3
mds: cephfs-storage:1 {0=ceph-node-1=up:active} 2 up:standby #當創建完cephfs文件系統后,mds組件自動選舉一個mds組件為active狀態,其余為standby狀態
osd: 6 osds: 6 up (since 23h), 6 in (since 23h)
rgw: 1 daemon active (ceph-node-1)
task status:
data:
pools: 9 pools, 352 pgs
objects: 274 objects, 164 KiB
usage: 6.1 GiB used, 54 GiB / 60 GiB avail
pgs: 352 active+clean
4.內核級別掛載CephFS文件系統
掛載的操作文檔:docs.ceph.com/en/pacific/…
4.1.無需認證的方式掛載CephFS文件系統
1)在客戶端中創建掛載目錄
[root@ceph-node-1 ~]# mkdir /cephfs_data
2)使用內核級別掛載Cephfs文件系統
CephFS系統可以理解為也是一個磁盤,類型是ceph的類型,直接可以通過mount命令進行掛載。
命令格式:mount -t ceph {monitor_addr}:/ /{path} -o name=admin
掛載時最好指定所有monitor組件的地址,否則當有一個monitor組件產生問題,就會影響掛載。
1.首先確認mount是否支持ceph類型的文件系統,如果不支持則去安裝ceph-common包
[root@ceph-node-1 ~]# which mount.ceph
/usr/sbin/mount.ceph
2.掛載cephfs文件系統
[root@ceph-node-1 ~]# mount -t ceph 192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ /cephfs_data/ -o name=admin
#這個admin用戶是ceph集群默認的用戶,不需要指定secret key
3.查看是否掛載成功
[root@ceph-node-1 ~]# df -hT /cephfs_data/
文件系統 類型 容量 已用 可用 已用% 掛載點
192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ ceph 17G 0 17G 0% /cephfs_data
4.此時就可以在掛載目錄中寫入數據了。
4.2.使用認證方式掛載CephFS文件系統
1.獲取admin用戶的Key
[root@ceph-node-1 ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQBIWUhiEmaFOBAA6Jr6itUeHiLVVOeYFVpRog==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
2.通過認證方式掛載CephFS文件系統
[root@ceph-node-1 ~]# mount -t ceph 192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ /cephfs_data/ -o name=admin,secret=AQBIWUhiEmaFOBAA6Jr6itUeHiLVVOeYFVpRog==
3.查看是否掛載成功
[root@ceph-node-1 ~]# df -hT /cephfs_data/
文件系統 類型 容量 已用 可用 已用% 掛載點
192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ ceph 17G 0 17G 0% /cephfs_data
4.設置開機自動掛載
[root@ceph-node-1 ~]# vim /etc/fstab
192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ /cephfs_data ceph name=admin,secret=AQBIWUhiEmaFOBAA6Jr6itUeHiLVVOeYFVpRog== 0 0
也可以將用戶的Key寫入到一個文件中,然后引用這個文件,如下所示:
1.將key寫入到一個文件中
[root@ceph-node-1 ~]# ceph-authtool -p /etc/ceph/ceph.client.admin.keyring > admin.key
[root@ceph-node-1 ~]# chmod 600 admin.key
2.掛載時引用這個Key文件
[root@ceph-node-1 ~]# mount -t ceph 192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ /cephfs_data/ -o name=admin,secretfile=/root/admin.key
3.開機自動掛載
192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ /cephfs_data ceph name=admin,secretfile=/root/admin.key 0 0
5.用戶空間掛載CephFS文件系統
1.安裝ceph-fuse客戶端
[root@ceph-node-1 ~]# yum -y install ceph-fuse
2.創建掛載點
[root@ceph-node-1 ~]# mkdir /cephfuse-data
3.使用fuse掛載
[root@ceph-node-1 ~]# ceph-fuse -n client.admin -m 192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789 /cephfuse-data/
2022-04-03 23:37:18.794 7f5574ca7f80 -1 init, newargv = 0x5615fadddb50 newargc=9ceph-fuse[31903]: starting ceph client
ceph-fuse[31903]: starting fuse
4.查看掛載的文件系統
ceph-fuse[31903]: starting fuse
[root@ceph-node-1 ~]# df -HT /cephfuse-data/
文件系統 類型 容量 已用 可用 已用% 掛載點
ceph-fuse fuse.ceph-fuse 19G 0 19G 0% /cephfuse-data
6.查看CephFS的狀態
[root@ceph-node-1 ~]# ceph fs status cephfs-storage
原文鏈接:https://juejin.cn/post/7155656346048659493
相關推薦
- 2022-11-04 asp.net?core?認證和授權實例詳解_實用技巧
- 2022-06-30 C語言從基礎到進階全面講解數組_C 語言
- 2022-10-23 C#實現觀察者模式(Observer?Pattern)的兩種方式_C#教程
- 2022-10-11 pytorch加載自己的數據集源碼分享_python
- 2022-05-16 Python中input()函數的用法實例小結_python
- 2022-03-20 詳解C語言的預處理效果_C 語言
- 2022-07-27 SQL解決未能刪除約束問題drop?constraint_MsSql
- 2022-12-09 Flutter?CustomPaint自定義繪畫示例詳解_IOS
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支