Ceph提供nfs服務

FuShudi發表於2024-06-18

目錄
  • 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

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也是可以的。

相關文章