SSD作緩存方案之LVM cache
1. 前言
最近因為工作的需要,接觸了一些SSD作緩存相關的知識。所謂SSD作緩存就是使用fast device(例如SSD),給slow device(例如機械硬盤)做緩存,以提高計算機整體的I/O存儲性能。
目前在個人計算機中,使用的比較多的是機械硬盤和固態硬盤(SSD)。機械硬盤具有容量大,價格便宜,容錯性好,壽命較長等優點;缺點是讀寫性能相對機械硬盤有比較大的差距。固態硬盤的優點是讀寫性能較好,特別是隨機讀寫性能;缺點是價格比較昂貴,容量小,寫入壽命有限,一旦損壞數據難以恢復等。
因此,有些情況下我們希望結合兩者優點,於是SSD緩存技術方案應運而生。
2. 需求
假設:
- 有一個容量比較小的fast device(例如SSD);
- 有一個以及以上的大容量機械硬盤;
- 有比較大的數據需要存儲;
- 對數據讀寫性能有一定的要求。
那么這個時候,我們就可以考慮把SSD作緩存來使用。
3. 常見方案
就從緩存方案來說,常見的有DM-cache、bcache、LVM cache、flashCache、EnhanceIO等,本文主要介紹LVM cache。
4. LVM cache
在RHEL6.7之后,LVM提供對LVM緩存邏輯卷的支持,它是基於dm-cache,LVM緩存邏輯卷使用快速設備(例如SSD驅動器)組成的小型邏輯卷,來提高容量更大但更慢邏輯卷的性能。下面在虛擬機上演示如何創建及使用。
注意:因為是在個人主機安裝的虛擬機上演示,無法體現性能,僅僅演示創建過程,若需要測試其性能,請在實體機上使用真實的存儲設備測試
4.1 創建
如圖所示,因為是測試,所以用虛擬機上的/dev/sdb和/dev/sdd分別作為fast device和slow device來演示創建過程。
4.1.1 分區
(以創建sdb分區為例)
fdisk /dev/sdb
回車進入分區操作, 輸入n表示創建分區,然后回車選擇默認選項,選項選擇完畢后,輸入w表示保存退出。
fdisk之后選項常用參數有:
- m:幫助信息
- p:顯示分區表
- d:刪除一個分區表
- l:列出已知的分區類型
- n:新建一個分區表
- q:退出不保存
- w:保存並退出
- t:修改分區表系統id
分區結果如下圖所示:
4.1.2 創建物理卷
pvcreate /dev/sdb1 /dev/sdd1
4.1.3 創建卷組vg
vgcreate vg /dev/sdb1 /dev/sdd1
4.1.4 創建邏輯卷
- 創建data邏輯卷
lvcreate -n data -L 6G vg /dev/sdd1
創建存儲數據的邏輯卷data,划分/dev/sdd1物理卷的空間。
- 創建cache邏輯卷
lvcreate -n cache -L 6G vg /dev/sdb1
創建緩存數據的邏輯卷cache,划分/dev/sdb1物理卷的空間。
- 創建meta邏輯卷
lvcreate -n meta -L 64M vg /dev/sdb1
創建緩存數據的邏輯卷meta,划分/dev/sdb1物理卷的空間。
結果如下:
lvm cache總共包括三部分:data、cache、meta,其中meta的size需要大於千分之一的cache;data是存儲數據,cache和meta共同構成緩存
4.1.5 創建緩存池
(注意cache和meta的順序不能顛倒)
lvconvert --type cache-pool --poolmetadata vg/meta vg/cache
4.1.6 將存儲卷加入緩存池
lvconvert --type cache --cachepool vg/cache --cachemode writeback vg/data
注意:cachemode有writeback和writethrough兩種模式,默認為writethrough,此處測試設置為writeback。writeback的讀寫性能會好一些,但是在某些極端情況下會丟失數據
4.1.7 格式化與掛載
mkfs.ext3 /dev/vg/data
mkdir data
mount /dev/vg/data ./data/
最后,就可以在./data/目錄下存儲數據了。在該目錄讀寫數據時,實際上有fast device的緩存作用,加速了磁盤的讀寫性能。