一、文件存儲系統介紹
Ceph文件系統提供了任何大小的符合posix標准的分布式文件系統,它使用Ceph RADOS存儲數據。要實現Ceph文件系統,您需要一個正在運行的Ceph存儲集群和至少一個Ceph元數據服務器(MDS)來管理其元數據並使其與數據分離,這有助於降低復雜性和提高可靠性。下圖描述了Ceph FS的架構視圖及其接口:
libcephfs庫在支持其多個客戶機實現方面發揮着重要作用。它具有本機Linux內核驅動程序支持,因此客戶機可以使用本機文件系統安裝,例如,使用mount命令。它與SAMBA緊密集成,支持CIFS和SMB。 Ceph FS使用cephfuse模塊擴展到用戶空間(FUSE)中的文件系統。它還允許使用libcephfs庫與RADOS集群進行直接的應用程序交互。作為Hadoop HDFS的替代品, Ceph FS越來越受歡迎。
只有Ceph FS才需要Ceph MDS;其他存儲方法的塊和基於對象的存儲不需要MDS服務。 Ceph MDS作為一個守護進程運行,它允許客戶機掛載任意大小的POSIX文件系統。 MDS不直接向客戶端提供任何數據;數據服務僅由OSD完成。MDS提供了一個帶有智能緩存層的共享連貫文件系統,因此大大減少了讀寫操作。它將其優勢擴展到動態子樹分區,並為單個元數據提供單個MDS。
MDS不存儲本地數據,這在某些情況下非常有用。如果MDS守護程序死亡,我們可以在任何具有群集訪問權限的系統上重新啟動它。Metadata Server的守護程序配置為主動或被動。主MDS節點變為活動狀態,其余節點將進入待機狀態。在主MDS發生故障的情況下,第二個節點負責並被提升為活動狀態。為了更快地恢復,您可以指定備用節點應該跟隨其中一個活動節點,這將在內存中保留相同的數據以預先填充緩存。
客戶端我們一般有兩種方式,一種是 Linux 內核提供的,一種是 FUSE 客戶端,內核客戶端性能會好一些,而 FUSE 客戶端功能會強大些,比如強制配額。
二、部署cephfs
2.1 在ceph01節點使用 ceph-deploy 部署 cephfs
必須至少部署一個元數據服務器守護程序才能使用CephFS。
[cephadmin@ceph01 ~]$ cd my-cluster/
[cephadmin@ceph01 my-cluster]$ ceph-deploy mds create ceph01 ceph02 ceph03
2.2 創建ceph存儲池
Ceph文件系統至少需要兩個RADOS池,一個用於數據,一個用於元數據。在配置這些池時,可以考慮:
- 為元數據池使用更高的復制級別,因為這個池中的任何數據丟失都可能使整個文件系統無法訪問。
- 為元數據池使用低延遲存儲(如ssd),因為這將直接影響客戶機上文件系統操作的觀察延遲。
[cephadmin@ceph01 my-cluster]$ ceph osd pool create cephfs_data 128 [cephadmin@ceph01 my-cluster]$ ceph osd pool create cephfs_metadata 128
# 啟用文件系統 [cephadmin@ceph01 my-cluster]$ ceph fs new cephfs cephfs_metadata cephfs_data
查看文件系統
[cephadmin@ceph01 my-cluster]$ ceph mds stat cephfs-1/1/1 up {0=ceph03=up:active}, 2 up:standby
[cephadmin@ceph01 my-cluster]$ ceph osd pool ls ………… cephfs_data cephfs_metadata
[cephadmin@ceph01 my-cluster]$ ceph fs ls name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
2.3 創建用戶(可選,因為部署時,已經生成,我們最好再創建一個普通用戶)
[cephadmin@ceph01 my-cluster]$ ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow r, allow rw path=/' osd 'allow rw pool=cephfs_data' -o ceph.client.cephfs.keyring
2.4 查看生成的key
[cephadmin@ceph01 my-cluster]$ cat ceph.client.cephfs.keyring [client.cephfs] key = AQBjVUZeJMQKBRAAh1Lp7p7A0YdBnw7VeZPJtQ== [cephadmin@ceph01 my-cluster]$ ceph auth get-key client.cephfs AQBjVUZeJMQKBRAAh1Lp7p7A0YdBnw7VeZPJtQ==
三、通過內核驅動掛載Ceph FS
在Linux內核2.6.34和以后的版本中添加了對Ceph的支持。
3.1 在客戶端創建掛載目錄
[root@192-168-5-70 ~]# mkdir /mnt/cephfs
3.2 在客戶端進行掛載(方法1):
# secret為上面生成的key
[root@192-168-5-70 ~]# mount -t ceph 192.168.5.91:/ /mnt/cephfs -o name=cephfs,secret=AQBjVUZeJMQKBRAAh1Lp7p7A0YdBnw7VeZPJtQ== [root@192-168-5-70 ~]# df -h /mnt/cephfs/ Filesystem Size Used Avail Use% Mounted on 192.168.5.91:/ 8.4G 0 8.4G 0% /mnt/cephfs [root@192-168-5-70 ~]# umount /mnt/cephfs
# 使用多個mon進行掛載 [root@192-168-5-70 ~]# mount -t ceph 192.168.5.91,192.168.5.92,192.168.5.93:/ /mnt/cephfs -o name=cephfs,secret=AQBjVUZeJMQKBRAAh1Lp7p7A0YdBnw7VeZPJtQ== [root@192-168-5-70 ~]# df -h /mnt/cephfs/ Filesystem Size Used Avail Use% Mounted on 192.168.5.91,192.168.5.92,192.168.5.93:/ 8.4G 0 8.4G 0% /mnt/cephfs
3.3 在客戶端不顯示key掛載(方法2):
[root@192-168-5-70 ~]# umount /mnt/cephfs [root@192-168-5-70 ~]# mkdir /etc/ceph [root@192-168-5-70 ~]# echo 'AQBjVUZeJMQKBRAAh1Lp7p7A0YdBnw7VeZPJtQ==' > /etc/ceph/cephfskey
# 把key使用文件的方式進行掛載,端口默認為6789可以省略不寫 [root@192-168-5-70 ~]# mount -t ceph 192.168.5.91:6789:/ /mnt/cephfs -o name=cephfs,secretfile=/etc/ceph/cephfskey [root@192-168-5-70 ~]# df -h /mnt/cephfs/ Filesystem Size Used Avail Use% Mounted on 192.168.5.91:6789:/ 8.4G 0 8.4G 0% /mnt/cephfs
3.4 設置開機自動進行掛載
[root@192-168-5-70 ~]# echo '192.168.5.91:6789:/ /mnt/cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfskey,_netdev,noatime 0 0' >> /etc/fstab # 測試寫入數據 [root@192-168-5-70 ~]# umount /mnt/cephfs [root@192-168-5-70 ~]# mount /mnt/cephfs [root@192-168-5-70 ~]# dd if=/dev/zero of=/mnt/cephfs/file1 bs=1M count=1024
四、通過 FUSE 掛載 Ceph FS
Ceph文件系統由LINUX內核本地支持;但是,如果您的主機在較低的內核版本上運行,或者您有任何應用程序依賴項,您總是可以使用FUSE客戶端讓Ceph掛載Ceph FS。
4.1 安裝ceph-fuse
[root@192-168-5-70 ~]# cat /etc/yum.repos.d/ceph.repo [ceph] name=ceph baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/x86_64/ gpgcheck=0 [ceph-noarch] name=cephnoarch baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ gpgcheck=0 [root@192-168-5-70 ~]# yum install ceph-fuse -y
4.2 把服務端生成的key文件拷貝到客戶端
[cephadmin@ceph01 ~]$ scp my-cluster/ceph.client.cephfs.keyring root@192.168.5.70:/etc/ceph/
4.3 ceph-fuse進行掛載
# 先取消之前的掛載 [root@192-168-5-70 ~]# umount /mnt/cephfs [root@192-168-5-70 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 50G 2.2G 48G 5% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 17M 3.9G 1% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/rbd0 4.0G 233M 3.8G 6% /mnt/ceph-disk1 /dev/rbd2 2.0G 33M 2.0G 2% /mnt/ceph-disk2 tmpfs 799M 0 799M 0% /run/user/0 # 進行掛載 [root@192-168-5-70 ~]# ceph-fuse --keyring /etc/ceph/ceph.client.cephfs.keyring --name client.cephfs -m 192.168.5.91:6789 /mnt/cephfs/ 2020-02-14 16:38:42.460 7f0bed64fc00 -1 init, newargv = 0x55a6a780bd40 newargc=7ceph-fuse[388766]: starting ceph client ceph-fuse[388766]: starting fuse [root@192-168-5-70 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 50G 2.2G 48G 5% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 17M 3.9G 1% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/rbd0 4.0G 233M 3.8G 6% /mnt/ceph-disk1 /dev/rbd2 2.0G 33M 2.0G 2% /mnt/ceph-disk2 tmpfs 799M 0 799M 0% /run/user/0 ceph-fuse 8.3G 1.0G 7.3G 13% /mnt/cephfs
4.4 設置開機自動掛載
[root@192-168-5-70 ~]# vim /etc/ceph/ceph.conf [global] mon_host = 192.168.5.91,192.168.5.92,192.168.5.93 [root@192-168-5-70 ~]# vim /etc/fstab none /mnt/cephfs fuse.ceph ceph.id=cephfs,_netdev,defaults 0 0
五、Ceph配額管理
CephFS允許在系統中的任何目錄上設置配額。配額可以限制 目錄層次結構中該點下面的字節數或文件數。
5.1 限制
- CephFS配額 依賴 於正在掛載文件系統的 客戶端 的合作,以在達到限制時停止寫入,不應依賴配額來防止在客戶端完全不受信任的環境中寫入。
- 配額是不精確的。寫入文件系統的進程將在達到配額限制后的短時間內停止。它們將不可避免地被允許在配置的限制上寫入一些數據。他們能夠走多遠的配額主要 取決於時間量 ,而不是數據量。一般來說,編寫者將在超過配置限制的十秒內停止 。
- 配額在 內核客戶端4.17 及更高版本中實現。 用戶空間客戶端(libcephfs,ceph-fuse)支持配額。Linux內核客戶端> = 4.17支持CephFS配額,但僅限於 mimic+ 集群 。內核客戶端(甚至是最新版本)將無法處理舊群集上的配額,即使它們可能能夠設置配額擴展屬性。
5.2 先拷貝管理員權限的key
[cephadmin@ceph01 ~]$ scp my-cluster/ceph.client.admin.keyring root@192.168.5.70:/etc/ceph/
5.3 重新進行客戶端掛載
[root@192-168-5-70 ~]# ceph-fuse --keyring /etc/ceph/ceph.client.admin.keyring --name client.admin -m 192.168.5.91:6789 /mnt/cephfs/
5.4 設置配額文件最大容量100MB,文件數量不大於3
[root@192-168-5-70 ~]# yum install attr -y [root@192-168-5-70 ~]# cd /mnt/cephfs/ [root@192-168-5-70 cephfs]# mkdir quotadir [root@192-168-5-70 cephfs]# setfattr -n ceph.quota.max_bytes -v 100000000 quotadir [root@192-168-5-70 cephfs]# setfattr -n ceph.quota.max_files -v 3 quotadir
5.5 顯示配額
[root@192-168-5-70 cephfs]# getfattr -n ceph.quota.max_bytes quotadir # file: quotadir ceph.quota.max_bytes="100000000" [root@192-168-5-70 cephfs]# getfattr -n ceph.quota.max_files quotadir # file: quotadir ceph.quota.max_files="3"