1、CephFs介紹
2、CephFS架構
3、配置CephFS MDS
一、建立一個Ceph文件系統
1.一、以kernel client 形式掛載CephFS
1.二、以FUSE client 形式掛載CephFS
4、MDS主備與主主切換
一、配置主主模式
二、還原單主MDSnode
Ceph File System (CephFS) 是與 POSIX 標準兼容的文件系統, 可以提供對 Ceph 存儲集羣上的文件訪問. Jewel 版本 (10.2.0) 是第一個包含穩定 CephFS 的 Ceph 版本. CephFS 須要至少一個元數據服務器 (Metadata Server - MDS) daemon (ceph-mds) 運行, MDS daemon 管理着與存儲在 CephFS 上的文件相關的元數據, 而且協調着對 Ceph 存儲系統的訪問。 安全
說在前面的話,cephfs實際上是爲用戶提供的一個文件系統,把ceph這個軟件把裏面的空間,模擬一個文件系統的格式來提供服務,它有posix標準的文件系統的接口可以爲ceph集羣存儲文件,可以提供訪問,目前在大多數公司用cephfs也是比較少的,也是因爲性能緣由,可是也有一些場景也會用到。服務器
對象存儲的成本比起普通的文件存儲仍是較高,須要購買專門的對象存儲軟件以及大容量硬盤。若是對數據量要求不是海量,只是爲了作文件共享的時候,直接用文件存儲的形式好了,性價比高。架構
底層是核心集羣所依賴的, 包括:
OSDs (ceph-osd): CephFS 的數據和元數據就存儲在 OSDs 上
MDS (ceph-mds): Metadata Servers, 管理着 CephFS 的元數據
Mons (ceph-mon): Monitors 管理着集羣 Map 的主副本負載均衡
由於這個map裏面維護着不少數據的信息索引,全部的數據都要從mons中map裏獲取去osd裏找這個數據,其實獲取這個數據的流程大概都是同樣的,只不過它存在的是不一樣的庫,不一樣的mapide
Ceph 存儲集羣的協議層是 Ceph 原生的 librados 庫, 與核心集羣交互.
CephFS 庫層包括 CephFS 庫 libcephfs, 工做在 librados 的頂層, 表明着 Ceph文件系統.最上層是可以訪問 Ceph文件系統的兩類客戶端,因爲有這個libcephfs這個庫,cephfs才能對外提供服務,由於底層是不能提供服務的,都得經過它這個第三方的lib庫才能去提供訪問,工具
元數據:文件的名字和屬性信息叫元數據,和數據是隔離開的性能
CephFs的數據是怎麼訪問的?
首先客戶端經過RPC協議到達MDS,從MDS獲取到元數據的信息,客戶端與RADOS獲取文件的一個IO操做,那麼有了這兩份信息,用戶就能獲得了想要的那份文件,MDS和RADOS之間經過journal metadate,這個Journal是記錄文件寫入日誌的,這個也是存放到OSD當中的,MDS和rados之間也是由交互的,由於全部最終的數據都會存到rados當中3d
!日誌
要使用 CephFS, 至少就須要一個 metadata server 進程。能夠手動建立一個 MDS, 也可使用 ceph-deploy 或者 ceph-ansible 來部署 MDS。
登陸到ceph-deploy工做目錄執行
hostname指定ceph集羣的主機名
#ceph-deploy mds create $hostname
部署一個 CephFS, 步驟以下:
在一個 Mon 節點上建立 Ceph文件系統.
若使用 CephX 認證,須要建立一個訪問 CephFS 的客戶端
掛載 CephFS 到一個專用的節點.
以 kernel client 形式掛載 CephFS
以 FUSE client 形式掛載 CephFS
一、建立一個 Ceph 文件系統
一、首先要建立兩個pool,一個是cephfs-data,一個是cephfs-metadate,分別存儲文件數據和文件元數據,這個pg也能夠設置小一點,這個根據OSD去配置
#ceph osd pool create cephfs-data 256 256 #ceph osd pool create cephfs-metadata 64 64
查看已經建立成功
[root@cephnode01 my-cluster]# ceph osd lspools 1 .rgw.root 2 default.rgw.control 3 default.rgw.meta 4 default.rgw.log 5 rbd 6 cephfs-data 7 cephfs-metadata
關於ceph的日誌,能夠在/var/log/ceph下能夠查看到相關信息
[root@cephnode01 my-cluster]# tail -f /var/log/ceph/ceph ceph.audit.log ceph.log ceph-mgr.cephnode01.log ceph-osd.0.log ceph-client.rgw.cephnode01.log ceph-mds.cephnode01.log ceph-mon.cephnode01.log ceph-volume.log
注:通常 metadata pool 能夠從相對較少的 PGs 啓動, 以後能夠根據須要增長 PGs. 由於 metadata pool 存儲着 CephFS文件的元數據, 爲了保證安全, 最好有較多的副本數. 爲了能有較低的延遲, 能夠考慮將 metadata 存儲在 SSDs 上.
二、建立一個 CephFS, 名字爲 cephfs:須要指定兩個建立的pool的名字
#ceph fs new cephfs cephfs-metadata cephfs-data new fs with metadata pool 7 and data pool 6
三、驗證至少有一個 MDS 已經進入 Active 狀態,也就是活躍
另外能夠看到兩個備用的是cephnode01,和cephnode03
#ceph fs status cephfs cephfs - 0 clients +------+--------+------------+---------------+-------+-------+ | Rank | State | MDS | Activity | dns | inos | +------+--------+------------+---------------+-------+-------+ | 0 | active | cephnode02 | Reqs: 0 /s | 10 | 13 | +------+--------+------------+---------------+-------+-------+ +-----------------+----------+-------+-------+ | Pool | type | used | avail | +-----------------+----------+-------+-------+ | cephfs-metadata | metadata | 1536k | 17.0G | | cephfs-data | data | 0 | 17.0G | +-----------------+----------+-------+-------+ +-------------+ | Standby MDS | +-------------+ | cephnode01 | | cephnode03 | +-------------+ MDS version: ceph version 14.2.7 (3d58626ebeec02d8385a4cefb92c6cbc3a45bfe8) nautilus (stable)
四、在 Monitor 上, 建立一個叫client.cephfs的用戶,用於訪問CephFs
#ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow rw' osd 'allow rw pool=cephfs-data, allow rw pool=cephfs-metadata' 這裏會生成一個key,用戶須要拿這個key去訪問 [client.cephfs] key = AQA5IV5eNCwMGRAAy4dIZ8+ISfBcwZegFTYD6Q==
查看權限列表,有哪些用戶建立了權限
[root@cephnode01 my-cluster]# ceph auth list client.cephfs key: AQA5IV5eNCwMGRAAy4dIZ8+ISfBcwZegFTYD6Q== caps: [mds] allow rw caps: [mon] allow r caps: [osd] allow rw pool=cephfs-data, allow rw pool=cephfs-metadata client.rgw.cephnode01 key: AQBOAl5eGVL/HBAAYH93c4wPiBlD7YhuPY0u7Q== caps: [mon] allow rw caps: [osd] allow r
五、驗證key是否生效
#ceph auth get client.cephfs 能夠看到這個用戶是擁有訪問cephfs的讀寫權限的 exported keyring for client.cephfs [client.cephfs] key = AQA5IV5eNCwMGRAAy4dIZ8+ISfBcwZegFTYD6Q== caps mds = "allow rw" caps mon = "allow r" caps osd = "allow rw pool=cephfs-data, allow rw pool=cephfs-metadata"
六、檢查CephFs和mds狀態
#ceph -s 查看集羣已經增長mds配置 cluster: id: 75aade75-8a3a-47d5-ae44-ec3a84394033 health: HEALTH_OK services: mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 2h) mgr: cephnode01(active, since 2h), standbys: cephnode02, cephnode03 mds: cephfs:1 {0=cephnode02=up:active} 2 up:standby osd: 3 osds: 3 up (since 2h), 3 in (since 2h) rgw: 1 daemon active (cephnode01) data: pools: 7 pools, 96 pgs objects: 263 objects, 29 MiB usage: 3.1 GiB used, 54 GiB / 57 GiB avail pgs: 96 active+clean #ceph mds stat 這裏顯示1個是active狀態,2個備用狀態 cephfs:1 {0=cephnode02=up:active} 2 up:standby #ceph fs ls 這裏有兩個pool name: cephfs, metadata pool: cephfs-metadata, data pools: [cephfs-data ] #ceph fs status
這裏使用其餘的機器進行掛載,這裏是是以prometheus主機掛載,不過這個在哪掛載均可以,kernel主要聯繫系統內核,和系統內核進行作相互,用這種方式進行掛載文件系統
一、建立掛載目錄 cephfs#mkdir /cephfs
二、掛載目錄,這裏寫集羣ceph節點的地址,後面跟建立用戶訪問集羣的key
#mount -t ceph 192.168.1.10:6789,192.168.1.11:6789,192.168.1.12:6789:/ /cephfs/ -o name=cephfs,secret=AQDHjeddHlktJhAAxDClZh9mvBxRea5EI2xD9w==
三、自動掛載#echo "mon1:6789,mon2:6789,mon3:6789:/ /cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfs.key,_netdev,noatime 0 0" | sudo tee -a /etc/fstab
四、驗證是否掛載成功
#stat -f /cephfs 文件:"/cephfs" ID:4f32eedbe607030e 文件名長度:255 類型:ceph 塊大小:4194304 基本塊大小:4194304 塊:總計:4357 空閒:4357 可用:4357 Inodes: 總計:0 空閒:-1
一、安裝ceph-common,安裝好可使用rbd,ceph相關命令
這裏仍是使用咱們的內網yum源來安裝這些依賴包
yum -y install epel-release yum install -y ceph-common
二、安裝ceph-fuse,ceph的客戶端工具,也就是用ceph的方式把這個文件系統掛上yum install -y ceph-fuse
三、將集羣的ceph.conf拷貝到客戶端
scp root@192.168.1.10:/etc/ceph/ceph.conf /etc/ceph/ chmod 644 /etc/ceph/ceph.conf
四、使用 ceph-fuse 掛載 CephFS
若是是在其餘主機掛載的話,須要這個使用cephfs的key,這個是剛纔咱們建立好的
直接拿這臺服務器上用就能夠
[root@prometheus ~]# more /etc/ceph/ceph.client.cephfs.keyring exported keyring for client.cephfs [client.cephfs] key = AQA5IV5eNCwMGRAAy4dIZ8+ISfBcwZegFTYD6Q== caps mds = "allow rw" caps mon = "allow r" caps osd = "allow rw pool=cephfs-data, allow rw pool=cephfs-metadata" #ceph-fuse --keyring /etc/ceph/ceph.client.cephfs.keyring --name client.cephfs -m 192.168.1.10:6789,192.168.1.11:6789,192.168.1.12:6789 /cephfs/
五、驗證 CephFS 已經成功掛載
#df -h ceph-fuse 18G 0 18G 0% /cephfs #stat -f /cephfs 文件:"/cephfs/" ID:0 文件名長度:255 類型:fuseblk 塊大小:4194304 基本塊大小:4194304 塊:總計:4357 空閒:4357 可用:4357 Inodes: 總計:1 空閒:0
六、自動掛載
#echo "none /cephfs fuse.ceph ceph.id=cephfs[,ceph.conf=/etc/ceph/ceph.conf],_netdev,defaults 0 0"| sudo tee -a /etc/fstab 或 #echo "id=cephfs,conf=/etc/ceph/ceph.conf /mnt/ceph2 fuse.ceph _netdev,defaults 0 0"| sudo tee -a /etc/fstab
七、卸載#fusermount -u /cephfs
一、配置主主模式
當cephfs的性能出如今MDS上時,就應該配置多個活動的MDS。一般是多個客戶機應用程序並行的執行大量元數據操做,而且它們分別有本身單獨的工做目錄。這種狀況下很適合使用多主MDS模式。
配置MDS多主模式
每一個cephfs文件系統都有一個max_mds設置,能夠理解爲它將控制建立多少個主MDS。注意只有當實際的MDS個數大於或等於max_mds設置的值時,mdx_mds設置纔會生效。例如,若是隻有一個MDS守護進程在運行,而且max_mds被設置爲兩個,則不會建立第二個主MDS。
添加設置max_mds 2,也就是成2個activity,1個standby,稱爲主主備模式
#ceph fs set cephfs max_mds 2 [root@cephnode01 ceph]# ceph fs status cephfs - 1 clients +------+--------+------------+---------------+-------+-------+ | Rank | State | MDS | Activity | dns | inos | +------+--------+------------+---------------+-------+-------+ | 0 | active | cephnode02 | Reqs: 0 /s | 11 | 14 | | 1 | active | cephnode01 | Reqs: 0 /s | 10 | 13 | +------+--------+------------+---------------+-------+-------+ +-----------------+----------+-------+-------+ | Pool | type | used | avail | +-----------------+----------+-------+-------+ | cephfs-metadata | metadata | 2688k | 16.8G | | cephfs-data | data | 521M | 16.8G | +-----------------+----------+-------+-------+ +-------------+ | Standby MDS | +-------------+ | cephnode03 | +-------------+
也就是當你cephfs用的多的話,數據量大的話,就會出現性能的問題,也就是當配置多個avtive的mds的時候會遇到系統瓶頸,這個時候就須要配置主主模式,把這個數據作一個相似的負載均衡,多主的話也就是這些主會同時提供服務
# 1.三、配置備用MDS
即便有多個活動的MDS,若是其中一個MDS出現故障,仍然須要備用守護進程來接管。所以,對於高可用性系統,實際配置max_mds時,最比如系統中MDS的總數少一個。
但若是你確信你的MDS不會出現故障,能夠經過如下設置來通知ceph不須要備用MDS,不然會出現insufficient standby daemons available告警信息:
#ceph fs set <fs> standby_count_wanted 0
2.一、設置max_mds
要是還原的話,直接設置爲max_mds 1也就是一個activity兩個standby
#ceph fs set max_mds 1 [root@cephnode01 ceph]# ceph fs status cephfs - 1 clients ====== +------+--------+------------+---------------+-------+-------+ | Rank | State | MDS | Activity | dns | inos | +------+--------+------------+---------------+-------+-------+ | 0 | active | cephnode02 | Reqs: 0 /s | 11 | 14 | +------+--------+------------+---------------+-------+-------+ +-----------------+----------+-------+-------+ | Pool | type | used | avail | +-----------------+----------+-------+-------+ | cephfs-metadata | metadata | 2688k | 16.8G | | cephfs-data | data | 521M | 16.8G | +-----------------+----------+-------+-------+ +-------------+ | Standby MDS | +-------------+ | cephnode03 | | cephnode01 | +-------------+
若是想在客戶端去執行相關的ceph命令的話,須要安裝ceph-common以及ceph-fuse客戶端工具將這個ceph.client.admin.keyring以及ceph.conf文件拷到相應的客戶端也能夠執行ceph命令了
[root@cephnode01 ceph]# scp ceph.client.admin.keyring root@192.168.1.14:/etc/ceph root@192.168.1.14's password: ceph.client.admin.keyring [root@prometheus ceph]# ceph -s cluster: id: 75aade75-8a3a-47d5-ae44-ec3a84394033 health: HEALTH_OK services: mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 4h) mgr: cephnode01(active, since 4h), standbys: cephnode02, cephnode03 mds: cephfs:2 {0=cephnode02=up:active,1=cephnode03=up:active} 1 up:standby osd: 3 osds: 3 up (since 4h), 3 in (since 4h) rgw: 1 daemon active (cephnode01) data: pools: 7 pools, 96 pgs objects: 345 objects, 203 MiB usage: 3.6 GiB used, 53 GiB / 57 GiB avail pgs: 96 active+clean