Ceph作為一個分散式儲存,在專案中常見的形態有兩者,一種是採用 SSD 或NVME 磁碟做Ceph的日誌盤,使用SATA磁碟來做資料盤。這樣的好處是比較經濟實惠。另一種則是全部採用 SSD 或NVME磁碟,其效能更好,但是其價格比較昂貴。在第一種形態中,我們能像中介軟體那樣加上一層快取層,從而實現給資料盤加速的功能嗎?Bcache就是這樣一種快取技術。
1. bcache 是什麼
- Bcache是Linux核心塊裝置層Cache,支援將一個或多個速度較快的磁碟裝置(如SSD)作為讀寫速度相對較慢的磁碟裝置的Cache.它使得固態硬碟作為硬碟驅動器的快取,既解決了固態硬碟容量太⼩的問題,又解決了硬碟驅動器執行速度太慢的問題。
2. 三種快取策略
bcache從3.10版本開始被整合進核心,⽀持3種快取策略,分別是 Writeback 、Writethrough 、 Writearoud , 預設使⽤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 結合,看下生產環境中是怎麼使用的?