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 訪問
目前實現的高可用程度:
時間原因,沒有查到資料。