當前位置: 妍妍網 > 碼農

Ceph 提供 NFS 服務:高效儲存解決方案的終極指南!

2024-06-27碼農

戳下方名片 ,關註並 星標

回復「 1024 」獲取 2TB 學習資源!


👉 體系化學習:

特色專欄

/ /

/ /

/ /

/ /

/ /

大家好,我是民工哥!

今天給大家介紹下:Ceph 提供NFS服務:高效儲存解決方案!

Ceph提供nfs服務

ceph除了可以提供cephfs之外,也是可以支持nfs的,因為如果直接對外提供cephfs的話,客戶端掛載比較繁瑣,而提供nfs的話就非常易用了。

前期準備

檢查模組

[root@ceph01 ~]# ceph mgr module ls |grep nfs
"nfs",

預設基本都是啟動的,如果沒有啟用可以執行。

[root@ceph01 ~]# ceph mgr module enable nfs

檢查是否有nfs-ganesha集群

[root@ceph01 ~]# ceph nfs cluster ls
[root@ceph01 ~]#

建立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。

    ceph提供的nfs的架構

    ceph的nfs是有一個元件叫做nfs-ganesha,然而cephfs的是由mds元件提供的。

    你客戶端透過nfs的方式去掛載ceph的話,就相當於nfs-ganesha是一個轉譯器,將你的nfs連線請求轉換成cephfs,在你看來你掛載的是nfs,其實底層給你提供的儲存的還是cephfs。

    他的連線就是這樣的: 客戶端儲存請求 ---> nfs - ganesha ---> mds

    當然也可以儲存到rgw,不過這一塊的適配做的不是很好,有很多功能用不了。

    這樣nfs服務就建立好了,但是還沒有配置後端的儲存。

    nfs匯出

    nfs匯出也就是給他配置後端儲存。

    建立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

    匯出

    [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的路徑

    客戶端嘗試掛載

    [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使用者,還得授權,這種方式就不需要。

    驗證

    我們之前說這個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端也是可以看見的

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

    連結:https://cnblogs.com/fsdstudy/p/18254504

    👍 如果你喜歡這篇文章,請點贊並分享給你的朋友!

    公眾號讀者專屬技術群

    構建高品質的技術交流社群,歡迎從事後端開發、運維技術進群( 備註崗位,已在技術交流群的請勿重復添加微信好友 )。主要以技術交流、內推、行業探討為主,請文明發言。 廣告人士勿入,切勿輕信私聊,防止被騙。

    掃碼加我好友,拉你進群

    PS:因為公眾號平台更改了推播規則,如果不想錯過內容,記得讀完點一下 在看 ,加個 星標 ,這樣每次新文章推播才會第一時間出現在你的訂閱列表裏。 在看 支持我們吧!