每天5分鐘複習OpenStack(十三)儲存快取技術Bcache

ALEX_li88發表於2024-04-24

Ceph作為一個分散式儲存,在專案中常見的形態有兩者,一種是採用 SSD 或NVME 磁碟做Ceph的日誌盤,使用SATA磁碟來做資料盤。這樣的好處是比較經濟實惠。另一種則是全部採用 SSD 或NVME磁碟,其效能更好,但是其價格比較昂貴。在第一種形態中,我們能像中介軟體那樣加上一層快取層,從而實現給資料盤加速的功能嗎?Bcache就是這樣一種快取技術。

1. bcache 是什麼

  • Bcache是Linux核心塊裝置層Cache,支援將一個或多個速度較快的磁碟裝置(如SSD)作為讀寫速度相對較慢的磁碟裝置的Cache.它使得固態硬碟作為硬碟驅動器的快取,既解決了固態硬碟容量太⼩的問題,又解決了硬碟驅動器執行速度太慢的問題。

2. 三種快取策略

bcache從3.10版本開始被整合進核心,⽀持3種快取策略,分別是 WritebackWritethroughWritearoud , 預設使⽤Writethrough,快取策略可被動態修改。

  • Writethrough (直寫策略): 資料寫入時, 必須SSD和HDD盤都寫入成功, 寫入請求才算完成, 寫入請求才返回. 因此對於寫入, 該策略並未有效能提升. 適用於讀多寫少的場景, 可以保證資料的強一致性

  • Writeback (回寫策略): 資料寫入時, 只要SSD中寫入成功, 寫入請求就立即返回. SSD中的髒資料會由後臺執行緒定時刷寫到HDD盤中. 因此對於寫入, 該策略會有明顯的效能提升(除非到了SSD的效能瓶頸). 但是可能會造成資料丟失, 比較適用於底層有獨立供電的RAID卡的伺服器或者對資料一致性要求不是很高的場景

  • Writearound (繞寫策略): 資料寫入時, 繞過SSD, 直接寫入到HDD盤中. 可以防止SSD因寫I/O而填滿, 導致以後不可重新讀取. 缺點是: 當資料第一次讀取, 由於寫入時繞過了SSD, 因此會有SSD從HDD載入資料的操作

3. 兩種角色

Cache device: (前端)快取盤, 一般為SSD高速磁碟裝置,對應的命令就是 make-bcache -C xxx

Backing device: 後端(資料)盤, 一般為HDD低速磁碟裝置,對應的命令是 make-bcache -B xxx

4. 實戰

(Bcache從Linux-3.10開始正式併入核心主線,預設centos的核心在3.10版本上bug比較多,建議升級到4.x核心,此環境中我們直接將核心本升級到4.14的版本。然後編譯安裝bcache)

4.1 檢查是否能正常載入bcache模組

lsmod | grep bcache
modprobe bcache

此時如果出現 modprobe: FATAL: Module bcache not found.
不要慌,在3.10版本之前的核心中大機率會出現,因為此時核心沒有包含該bcache模組。

請參照4.2.1編譯安裝新版核心。如果能正常載入則請跳過 4.2

4.2 編譯核心

4.2.1 下載核心原始碼

mkdir -pv /root/kernel
cd /root/kernel 
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.9.102.tar.xz .
#該路徑下有所有Linux核心原始碼哦 
https://mirrors.edge.kernel.org/pub/linux/kernel/

4.2.2 安裝依賴包

安裝依賴關係
yum -y install rpm-build m4 gcc xmlto asciidoc openssl-devel hmaccalc python-devel newt-devel perl-ExtUtils-Embed elfutils-devel zlib-devel binutils-devel bison audit-libs-devel java-devel numactl-devel pciutils-devel ncurses-devel createrepo genisoimage net-tools git bc

4.2.3 解壓包

xz -d linux-4.9.102.tar.xz
tar -xvf linux-4.9.102.tar

4.2.4 配置模組

cp /boot/config-3.10.0-1160.71.1.el7.x86_64  /root/kernel/linux-4.9.102/.config
make menuconfig

修改Device Driver->Mutiple device driver support讓Linux編譯時生成bcache模組

4.2.5 編譯 (筆記本效能一般的建議晚上放後臺執行,本人筆記本編譯耗時7小時才編譯完成。)

make -j 4 # cpu 個數 

4.2.6 生成預設的核心配置

make -j 4 moduels
make -j 4 modules_install
make install
cat /boot/grub2/grub.cfg 
grub2-set-default 'CentOS Linux (4.9.103) 7 (Core)'
reboot 
#重啟就可以看見新核心的選項 ,當然你也可以編輯grub2.cfg 檔案刪除之前的舊的核心選單。

每次都需要編譯很麻煩,有沒有不編譯的方法呢?

yum 一鍵無腦安裝

#預設最新版本的kernel都可以直接yum install 安裝,
http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/

#1 下載
wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.274-1.el7.elrepo.x86_64.rpm

#2 安裝
yum install kernel-lt-5.4.274-1.el7.elrepo.x86_64.rpm

無腦安裝是挺好的,可是隻有最新的核心才能yum安裝,有沒有可能我們自己製作一個核心的rpm包來安裝。
核心原始碼直接就是支援編譯成rpm包的,只需要兩步既可

cd linux-4.9.102
make rpm && make rpm-pkg

編譯完成之後顯示如下圖所示(注意此時的編譯過程也是依賴編譯環境的效能的,如果效能不好,將會十分耗時)

4.3 編譯安裝bcche

#1 克隆原始碼
git clone https://evilpiepirate.org/git/bcache-tools.git

#2 安裝依賴包
cd bcache-tools/
yum install libblkid-deve

#3 編譯成二進位制檔案
make && make install

編譯完成後生成二進位制檔案如下

生成命令快捷捷

cp make-bcache /usr/sbin/
cp bcache-super-show /usr/bin/

4.4 載入bcache 模組

modprobe bcache
lsmod |grep bcache

#開機自動載入bcache 模組
echo bcache >  /etc/modules-load.d/bcache.conf

5 寫在最後

最近有小夥伴私信我,建議我控制下篇幅的長度,因為要保障讀者在5分鐘左右讀完的篇幅,因此接下來的文章中,本人將盡量控制文章的字數。但是對於Bcache 這種實踐比較多的文章,強烈建議讀者還是自己親自實踐,有些知識看上去以為自己明白了,實際實操時會有一些額外的心得和收穫。

下一章我們將Ceph和Bcache 結合,看下生產環境中是怎麼使用的?

相關文章