1. 程式人生 > >openstack+ceph:使用雲主機對外提供nas服務

openstack+ceph:使用雲主機對外提供nas服務

0 背景介紹

openstack+ceph,openstack中的雲主機使用ceph rbd作為雲硬碟

1 需求

1)支援對外提供檔案儲存服務

2)支援內部雲主機訪問儲存服務

3)支援萬兆訪問,單客戶端讀速度不小於400MB/s,聚合讀寫速度不小於800MB/s

2 概要設計

使用openstack中的一臺雲主機作為NAS-server,掛載雲硬碟提供儲存空間,使用samba軟體對外提供nas服務。

網路拓撲見下圖:

【對部署的要求】

① 為了滿足效能指標,要求external-net部署在萬兆網路上

② 雲主機的映象中有samba和samba-client相關安裝包(備註:CentOS-7.4-x86_64-Full中直接安裝了所需的所有包,推薦直接使用該映象安裝虛擬機器)

3 手動搭建服務

首先建立一個雲主機作為NAS-Server,安裝samba服務,然後掛載雲硬碟,建立共享資料夾。

【關於磁碟掛載方式】

目前,關於NAS-server雲主機掛載雲硬碟的方式有兩種

方式一:掛載單塊大容量雲硬碟

   格式化掛載盤: 

          # mkfs.xfs /dev/vdb

   建立掛載點 

          # mkdir /mnt/nas

   將磁碟掛載到掛載點

         # mount /dev/vdb /mnt/nas

   設定許可權

        # chmod +777  /mnt/nas

   /mnt/nas就是nas服務共享的資料夾

方式二:同時掛載多塊雲硬碟,做成lvm邏輯卷的方式提供儲存空間

    (調研中後續補充)

考慮單塊大容量盤的克隆、快照操作都比較耗時,建議使用方式二

【配置檔案】

配置檔案路勁在: /etc/samba/smb.conf,配置檔案例項如下(僅列出較為重要的幾項),配置完之後可以使用 # testparm 檢查配置的合法性:

[homes]

         comment = %s                # 描述資訊

         path = %s                        # 用來指定共享目錄的路徑

         public = yes/no               # 用來指定該共享是否允許guest賬戶訪問

         read only = yes/no          # 是否只允許讀

         valid users = %s              # 允許訪問該共享的使用者

         write list = %s                 # 允許寫入該共享的使用者

samba服務提供了兩種檔案共享訪問方式:① 使用賬號密碼登陸 ② 匿名登陸。分別的配置方式如下:

需要預先在samba server中建立系統使用者以及設定使用者密碼

# useradd titan                      // 新增系統使用者

# smbpasswd -a titan            // 設定samba訪問的使用者名稱密碼

samba還支援使用者組的概念

# groupadd group1             // 新增系統使用者組group1

# useradd -G group1 alice   // 新增系統使用者alice,且alice屬於group1

# smbpasswd -a alice           // 設定samba訪問的使用者名稱密碼

# useradd -G group1 bob    // 新增系統使用者bob,且bob屬於group1

# smbpasswd -a bob            // 設定samba訪問的使用者名稱密碼

# 只有使用者user1和組group1中所有的使用者(即alice和bob)可以訪問該資料夾,但是隻有user1可以寫該資料夾

[Test-A]

    public = no # 使用者訪問sambaserver需要提供使用者名稱密碼    comment = Test Directory

    path = /mnt/nas-A #共享的資料夾

    read only = No

    valid users = user1,@group1

    write list = user1

【關於匿名(免密)登陸】

我們建議使用免密登陸的方式給使用者提供服務,因為方式① ,這種方式使用起來不方便。

匿名登陸的配置:

   首先,在[global]預設的配置項中加入map to guest = bad user,表示將匿名使用者對映成nobody,

然後在共享盤的配置中填寫

valid users =  nobody, write list = nobody

[Test-B]

    public = share # 使用者訪問sambaserver需要提供使用者名稱密碼    comment = Test Directory

    path = /mnt/nas-B #共享的資料夾

    browseable = yes

    read only = No

    valid users = nobody

    write list = nobody

4 需求實現

4.1 對外提供檔案儲存服務

即使用者從外網向一體機中匯入匯出資料,我們對客戶端系統是windows和linux倆種情況進行討論。

4.1.1 外網系統是linux

在Linux的中, 可以通過Samba客戶端直接訪問共享檔案系統,也可以把server中的共享資料夾掛載在本地機上使用.

(1)Samba客戶端訪問

使用smbclient,smbclient是samba的客戶端,可以通過smbclient的put/get上傳下載檔案。

# smbclient //10.10.17.8/Test-A -U user1    使用user1賬號登陸Test-A

# smbclient //10.10.17.8/Test-B    匿名登陸Test-B,遇到輸入密碼直接回車

常見錯誤:session setup failed: NT_STATUS_LOGON_FAILURE。登陸錯誤,建議重新看一下【配置檔案】中的兩種登陸方式、使用者建立等內容。

(2)掛載到本地方式訪問

直接將nas-server中的目錄掛載到本地,提供服務。具體方法:

① 第一步,在本地建立一個掛載點 mkdir /mnt/local-nas

② 第二步,掛載到本地

# mount -t cifs -o username=user1,password=user1  //10.10.17.8/Test-A /mnt/local-A    使用賬號密碼登陸

# mount -t cifs -o username=guest,password=  //10.10.17.8/Test-B /mnt/local-B    匿名登陸

4.1.2 外網系統是windows

(1)ftp

    直接使用ftp向nas盤傳輸資料。這種方式依賴於windows中已經裝了ftp軟體,不推薦使用。

(2)對映網路資料夾方式

    在Windows網路中,可以直接就可以把共享資料夾當做本地硬碟來使用。

具體步驟:

計算機->網路->對映網路驅動器->輸入 \\server\share->完成

4.2 內部虛擬機器訪問儲存服務

也分成雲主機系統是window和linux兩種情況討論。和3.5中方式完全一樣,故不作複述。

總之,只要網路是通的,就可以使用nas服務

4.3 效能測試

測試方法,以單客戶端為例:

(1) linuxs:首先在linux客戶端端掛載一塊雲硬碟(記作 volume-client)作為本地儲存,使用smbclient 的get/put命令下載/上傳檔案,smbclient自帶測速度的功能。

(2) windows:首先在windows客戶端掛載一塊雲硬碟,使用對映網路資料夾方式把共享資料夾當做本地硬碟來使用。通過拖拽檔案檢視詳細資訊中的檔案傳輸速度來統計效能。

以上兩種情況,均可以通過更改雲硬碟(volume-client 和 nas-server所用的硬碟 volume-server)被分配的儲存池的副本數來控制儲存效能。

【注意】

為什麼要在測試中的客戶端也單獨建立一塊雲硬碟?

原因:nas儲存效能和 ① 客戶端儲存效能 ② nas-server端儲存效能 ③ 網路效能 3者密不可分。我們在客戶端也建立一塊雲硬碟是為了控制客戶端儲存效能(通過更改副本數的方式)

測試結果:1副本的情況多客戶端可以達到800M以上,但是我忘記記錄,之後再補充

nas-server儲存方式

單客戶端 

上傳檔案

單客戶端 

下載檔案

多客戶端 上傳檔案

多客戶端 下載檔案

1副本

450M

420M

2副本

300M左右

300M 左右

3個客戶端分別:330 279 296

3副本

5 存在問題

該方案在高可靠性方面存在風險:由於我們的nas服務是通過雲主機+rbd盤方式提供,如果雲主機遷移過程中(大概一分鐘),服務會中端,如果恰好在檔案傳輸過程中,檔案傳輸會失敗,需要使用者重新傳輸檔案。

6 其他調研

以下調研,本人均沒有進行實驗驗證,也許後續會補充相關文件

(1) 伺服器層 CephFS+nfsd/samba+consul

nfsd(是linux自帶的守護程序)使用nfs協議向linux提供服務,samba使用cifs協議向windows提供服務

目前實現的高可用程度:

nfsd 可以支援高可用,切換節點(大概1分鐘),服務重新連線上後,檔案可以繼續傳輸。注意:僅nfsd的v3版本支援無狀態無連線的傳輸方式,故服務切換後可以繼續傳輸,v4版本是無連線有狀態的,不能支援高可用。目前雲端儲存cifs協議不支援高可用。

(2) 在CephFS + Manila 

Manila專案全稱是File Share Service,檔案共享即服務。是OpenStack大帳篷模式下的子專案之一,用來提供雲上的檔案共享,支援CIFS協議和NFS協議。

些關於Ceph對接Manila的驅動:

1. Default Driver: 使用 RBD 作為 Manila Service VM 的後端,在 VM 上啟動 NFS 例項提供服務

2. Ganesha Driver: 使用 Ganesha 將 CephFS 重新 Reexport 出去

3. Native CephFS Driver: 在 Guest VM 上直接使用原生 CephFS Module 訪問

4. VirtFS Driver: 將 CephFS 掛載在 Host 端,VM 通過 VirtFS 訪問

目前實現的高可用程度:

    時間原因,沒有查到資料。