從PowerVM,KVM到Docker:儲存池的配置與調優---第一篇(第1子篇)
作者說明:
針對虛擬化中儲存池的配置,筆者將書寫一個系列作品,介紹從PowerVM到KVM再到Docker中儲存池的配置與調優。似乎看起來三種技術沒有什麼關聯性,但IT技術本質上實現原理一致的地方很多。理解了PowerVM,理解X86虛擬化不存在障礙,理解了Wpar,去理解docker的原理也不會太困難。
具體而言, 第一篇引用我在2013年的作品,介紹PowerVM中儲存池的配置和調優,由於公眾號字數限制,將分為三個子篇闡述。第二篇將講述在KVM中,儲存池的配置和調優。第三篇將講述在Docker中,儲存持久化層的配置和調優。
前言
在 PowerVM 的發展史上,Shared Storage Pool 並不是一個全新的概念。但是由於之前版本的 PowerVM 中 SSP 的功能不是十分強大,所以用的不是很多。相比之下,Storage Pool 使用的非常廣泛,常見於各類配置手冊中,由於命名類似,不少工程師將 Storage Pool 與 Shared Storage Pool 混淆。為了徹底解釋清楚這兩個技術的區別以及配置方法,本文在前面將會介紹 Storage Pool 的概念、配置方法以及 Storage Pool 和 Shared Storage Pool 的區別。
Storage Pool 的概念和管理
在介紹 Shard Storage Pool 之前,需要先講一下 Storage Pool 的概念。
Storage Pool 是一個儲存池的概念,它有兩種實現方式,基於檔案和基於卷組。Storage Pool 可以由 VIOS 上的本地 SAS 盤或者儲存對映過來的儲存 LUN 進行建立。在儲存池中,通過建立虛擬盤(有瘦體和胖體兩種,相關概念本文後續會有詳細介紹),通過 VIOS 和 VIOC 之間建立的 VSCSI 通路,將虛擬盤對映給 VIOC,向 VIOC 提供系統盤或者資料盤。一個 Storage Pool 只能由一個 VIOS 管理,不能被多個 VIOS 管理。而不能被多個 VIOS 管理,這點是 Storage Pool 和 Shared Storage Pool 最大的區別之一。
基於卷組方式的 Storage Pool 實際上是建立一個卷組,然後在卷組中建立邏輯卷並且對映給 VIOC。在 VIOS 系統裝完以後,rootvg 就是一個預設的儲存池。
$lssp
Pool Size(mb) Free(mb) Alloc Size(mb) BDs Type
rootvg 139776 114688 256 0 LVPOOL
$lspv |grep -i rootvg hdisk11 00f6b486cfe494d1 rootvg active
我們可以在這個儲存池中建立虛擬盤,通過 VSCSI 的方式將其對映給 VIOC,作為 VIOC 的系統盤,有關具體的配置方法,本文後續會有詳細說明。
常見的 VSCSI 高可用方案
在目前現有的 VSCSI 高可用方案中,通常有兩種。一種是將一個儲存的 LUN 對映給兩個(多個)VIOS,然後兩個(多個)VIOS 以 PV 的方式,將這個 LUN 對映給一個 VIOC,VIOC 則通過 MPIO,實現磁碟的路徑聚合,從而實現 VSCSI 高可用。這種高可用的實現方式可以參照下示意圖:
圖 1.VSCSI 高可用方案 1
在上圖的配置方式中,在 VIOC 上用 lspath 進行檢視,可以看到一個磁碟對應多個 VSCSI 通路,例如:
# lspath |grep -i hdisk0
Enabled hdisk0 vscsi0
Enabled hdisk0 vscsi1
預設情況下,磁碟 I/O 優先從 Vscsi 優先順序高的 VSCSI 通路走(預設情況下兩條路徑優先順序相同,都是 1)當一個 VIOS 出現問題,所有的磁碟 I/O 將會切換到第二個 VIOS 的 VSCSI 上,從而實現 VSCSI 的高可用。
如果打算用 Storage Pool 實現高可用,那麼在兩個 VIOS 上分別建立兩個 Storage Pool(可以是 VIOS 本地盤或者儲存磁碟),然後建立一個虛擬盤(可以基於 lv 或者檔案,通常是基於 lv 的方式),對映給 VIOC,VIOC 通過映象的方式,將兩個 VIOS 影對映過來的兩個虛擬盤做成映象,以實現 VSCSI 高可用。)這種高可用的實現方式可以參照下面示意圖:
圖 2.VSCSI 高可用方案 2
在上圖中,任意一個 VIOS 出現宕機,都只會是 VIOC 上的一個磁碟出現問題,由於 VIOC 端 hdisk 磁碟做了映象,因此不會引起業務中斷和資料丟失。
基於卷組的 Storage Pool
建立基於卷組的 Storage Pool 和在 VIOS 上直接建立一個 vg 達到的效果是相同的,命令列使用下面兩者之一即可:
mkvg -vg weixinyuvgpool hdisk10
或者
mksp -f weixinyuvgpool hdisk10
$mksp -f weixinyuvgpool hdisk10
weixinyuvgpool
通過上面的命令,名為 weixinyu 的 storage pool 就建立成功了,裡面有一塊磁碟,hdisk10。
檢視 storage pool,已經建立成功:
$lssp
Pool Size(mb) Free(mb) Alloc Size(mb) BDs Type
rootvg 139776 88832 256 4 LVPOOL
weixinyuvgpool 139904 139904 128 0 LVPOOL
filestoragepool 1016 985 256 1 FBPOOL
weixinyu 244 243 256 0 FBPOOL
$lspv |grep -i weixinyuvgpool
hdisk10 00f6b486cfe49436 weixinyuvgpool active
在預設的 rootvg storage pool 中建立一個 lv:
$mklv -lv lvtest1 rootvg 10G
lvtest1
確認被對映 VIOC 的 VSCSI 裝置:
$lsdev -vpd|grep vhost
vhost0 U8233.E8B.06B486P-V6-C11
Virtual SCSI Server Adapter
然後新建立將 lv 對映給 VIOC:
$mkvdev -vdev lvtest1 -vadapter vhost0 -devStoragePoolTestStoragePoolTestAvailable
在 VIOC 上用 cfgmgr 掃描後,可以識別到新增加的磁碟。
# bootinfo -s hdisk4
10240
基於檔案的 Storage Pool
基於檔案的 Storage Pool 必須建立在基於一個卷組的父儲存池之上。
建立基於檔案的 storage pool 命令如下:
mksp -fb weixinyufilebase -sp rootvg -size 1000M
也可用通過 VIOS 上的 cfgassist 命令進行建立:
進行確認,名為 file base storage 的 storage pool 已經建立成功: $lssp Pool Size(mb) Free(mb) Alloc Size(mb) BDs Type rootvg 139776 100352 256 3 LVPOOL filestoragepool 1016 1015 256 0 FBPOOL 然後檢視 rootvg 中的 lv 裝置: $lsvg -lv rootvg |grep -i file filestoragepool jfs2 4 4 1 open/syncd /var/vio/storagepools/filestoragepool # df -g |grep -i filestoragepool /dev/filestoragepool 1.00 0.99 1% 4 1% /var/vio/storagepools/filestoragepool 可以看到,基於檔案的儲存池實際上是 rootvg 的一個檔案系統。 下面,我們在基於檔案的儲存池中建立一個基於檔案的虛擬盤,並且對映給 VIOC: $mkbdsp -sp filestoragepool 30m -bd weixinyufile1 -vadapter vhost0 Creating file "weixinyufile1" in storage pool "filestoragepool". Assigning file "weixinyufile1" as a backing device. vtscsi5 Available weixinyufile1 在 VIOS 上檢視 VSCSI 對映關係: $lsmap -all |grep -i weixinyufile1 Backing device /var/vio/storagepools/filestoragepool/weixinyufile1 新建立的基於檔案的虛擬盤,就是基於檔案的 storage pool 中的一個檔案: # cd /var/vio/storagepools/filestoragepool # ls -al total 61448 drwxr-xr-x 3 root system 256 Jan 14 19:24 . drwxr-xr-x 4 root staff 256 Jan 14 18:49 .. -rw-r--r-- 1 root staff 176 Jan 14 19:24 .weixinyufile1 drwxr-xr-x 2 root system 256 Jan 14 18:49 lost+found -rw-r--r-- 1 root staff 31457280 Jan 14 19:24weixinyufile1
Storage Pool 簡單的管理方法
Storage Pool 和虛擬盤的配置除了使用命令列的方式 , 還有比較簡單的維護方法。如果僅僅是建立、檢視、擴容、減小容量的話,可以使用 VIOS 中的 cfgassist 工具或者使用 HMC 管理。
我們先看一下 cfgassist 工具管理:
在 VIOS 上執行 cfgassist-Storage Pool。
在介面中,我們可以檢視 Storage Pool 中的內容、建立 Storage Pool、修改 Storage Pool(增加或者減小 Storage Pool 的空間)。但需要注意的是,通過 cfgassist 工具,只能建立 Storage Pool,而不能建立“虛擬盤”。 第二個方法是,通過 HMC,對 Storage Pool 進行建立和配置。使用這個方法的好處是除了可以建立和維護 Storage Pool,還可以建立和對映虛擬盤: 首先登陸 HMC,選擇一臺裝有 VIOS 的 Power 伺服器,點選“虛擬資源”中的“虛擬儲存器管理”
圖 3.HMC 上的虛擬資源管理
在接下來的介面中,選擇要建立 Storage Pool 的 VIOS(此處也說明一個 storage pool 只能基於一個 VIOS),點選“查詢”:
圖 4. 點選“查詢”
我們可以看到已有的儲存池,即 VIOS 上的 rootvg:
圖 5. 檢視儲存池
接下來,點選“建立虛擬盤”,並且對映給 VIOC:
圖 6.HMC 上建立虛擬盤
我們可以看到,建立虛擬盤的時候,我們除了可以看到預設的 Storage Pool,還可以看到 Shared Storage Pool(也就是說,在 SSP cluster 建立以後,後續的 SSP 的管理也可以由 HMC 介面進行管理)
圖 7. 建立虛擬盤
我們選擇 rootvg Storage Pool 中的空間,對映給 weixinyuvioc。點選“確認”
圖 8. 建立虛擬盤
虛擬盤已經識別到,並且對映給了 weixinyuvioc1 分割槽:
圖 9. 虛擬盤建立並且對映成功
從上圖中可以看到,虛擬盤已經建立成功,並且對映給了指定的 VIOC。
在 VIOC 上執行 cfgmgr,可以掃描出現新建立的磁碟裝置。