1. 程式人生 > 其它 >從PowerVM,KVM到Docker:儲存池的配置與調優---第一篇(第1子篇)

從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,可以掃描出現新建立的磁碟裝置。