目錄
- Ceph提供nfs服務
- 1. 前期準備
- 1.1 檢查模組
- 1.2 檢查是否有nfs-ganesha叢集
- 2. 建立nfs服務
- 2.1 ceph提供的nfs的架構
- 3. nfs匯出
- 3.1 建立cephfs
- 3.2 匯出
- 3.3 客戶端嘗試掛載
- 3.4 驗證
- 4. 高可用nfs-ganesha
- 1. 前期準備
Ceph提供nfs服務
ceph除了可以提供cephfs之外,也是可以支援nfs的,因為如果直接對外提供cephfs的話,客戶端掛載比較繁瑣,而提供nfs的話就非常易用了
1. 前期準備
1.1 檢查模組
[root@ceph01 ~]# ceph mgr module ls |grep nfs
"nfs",
預設基本都是啟動的,如果沒有啟用可以執行
[root@ceph01 ~]# ceph mgr module enable nfs
1.2 檢查是否有nfs-ganesha叢集
[root@ceph01 ~]# ceph nfs cluster ls
[root@ceph01 ~]#
2. 建立nfs服務
透過自動建立的方式
[root@ceph01 ~]# ceph nfs cluster create 1 "ceph01 ceph02"
NFS Cluster Created Successfully
[root@ceph01 ~]# ceph nfs cluster ls
1
- create 後面的1指的是叢集的id,可以改為其他的
- 引號裡面的ceph01,ceph02指的是在哪些節點上啟動程序
建立完之後再去檢視叢集就會有一個了,並且顯示為1,這個1不是指叢集的數量,而是你剛剛給他的ID,如果你的ID指定的是其他的,那麼他這裡就會顯示你自己指定的ID
2.1 ceph提供的nfs的架構
ceph的nfs是有一個元件叫做nfs-ganesha,然而cephfs的是由mds元件提供的
你客戶端透過nfs的方式去掛載ceph的話,就相當於nfs-ganesha是一個翻譯器,將你的nfs連線請求轉換成cephfs,在你看來你掛載的是nfs,其實底層給你提供的儲存的還是cephfs
他的連線就是這樣的:客戶端儲存請求---> nfs-ganesha--->mds
當然也可以儲存到rgw,不過這一塊的適配做的不是很好,有很多功能用不了
這樣nfs服務就建立好了,但是還沒有配置後端的儲存
3. nfs匯出
nfs匯出也就是給他配置後端儲存
3.1 建立cephfs
# 建立一個cephfs,如果有的話可以不做
[root@ceph01 ~]# ceph fs volume create cephfs
[root@ceph01 ~]# ceph osd pool ls
device_health_metrics
.nfs
cephfs.cephfs.meta
cephfs.cephfs.data
3.2 匯出
[root@ceph01 ~]# ceph nfs export create cephfs --cluster-id 1 --pseudo-path /cephfs --fsname cephfs --path=/
{
"bind": "/cephfs",
"fs": "cephfs",
"path": "/",
"cluster": "1",
"mode": "RW"
}
- 這裡的意思就是從cephfs中建立一個nfs,cluster-id就是之前指定的id,匯出的nfs路徑為/cephfs
- --fsname:這個意思是使用哪個cephfs,我的cephfs的名字就叫cephfs
- --path: 指的是cephfs的路徑
3.3 客戶端嘗試掛載
[root@master ~]# mount -t nfs 172.16.1.20:/cephfs /mnt
[root@master ~]# df |grep mnt
172.16.1.20:/cephfs 59736064 0 59736064 0% /mnt
掛載的ip寫你自己的nfs的ip,我是用的公有云建立的ceph叢集,所以這是一個公網IP
這種掛載方式就比直接掛載cephfs要方便的多了,因為如果要掛載cephfs的話我們還需要建立cephfs使用者,還得授權,這種方式就不需要
3.4 驗證
我們之前說這個nfs的資料也是存到cephfs裡面了,我們來掛載cephfs看看
# 使用比較簡單的授權方式,這種方式是後來更新的,較早的ceph版本可能沒有這個命令
[root@ceph01 ~]# ceph fs authorize cephfs client.cephfs / rw -o ceph.client.cephfs.keyring
修改ceph.client.cephfs.keyring檔案內容
# 只保留金鑰部分
[root@ceph01 ~]# cat ceph.client.cephfs.keyring
AQBTNHFmDhxSABAAqB69R7Y3Rb89LA06R0pfmw==
# 掛載
[root@ceph01 ~]# mount -t ceph 172.16.1.20:6789:/ /mnt -o name=cephfs,secretfile=./ceph.client.cephfs.keyring
cephfs寫入資料
[root@ceph01 mnt]# echo hello > cephfs
nfs檢視資料
[root@master mnt]# ls
cephfs
[root@master mnt]# cat cephfs
hello
可以看到,資料寫入到cephfs之後nfs端也是可以看見的
4. 高可用nfs-ganesha
ceph 內部是可以對nfs-ganesha,是透過haproxy+keepalived來做的
service_type: ingress
service_id: nfs.1 # 這裡寫的是nfs的id
placement:
hosts:
- ceph01
- ceph02
count_per_host: 1 # 每個節點部署幾個nfs程序
spec:
backend_service: nfs.1 # 後端使用哪個
frontend_port: 20490 # nfs的埠號
monitor_port: 9000 # placement
virtual_ip: 172.16.1.100/24
- frontend_port: 20490 這裡預設是2049,改成20490的原因是我們在部署這個之前已經部署過了nfs,這個埠被nfs佔用了,所以得換一個
不僅僅是nfs可以部署高可用,rgw也是可以的。