安裝flashcache
wget https://github.com/facebook/flashcache/archive/master.zip
tar xf flashcache-master.tar
cd flashcache-master
uname -a
Linux xiaomi 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64 x86_64 x86_64 GNU/Linux
#make KERNEL_TREE=/home/supu/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/
make install
#第一次創建混合硬盤,/dev/sdb(ssd),/dev/sdc(機械硬盤)
(ssd)PCI-E高速flash卡:/dev/sdb
(sas)機械硬盤 :/dev/sdc
flashcache_create -p back cachedev /dev/sdb /dev/sdc
創建flashcache:flashcache_create -b 4k cachedev /dev/sdc /dev/sdb
指定flashcache的block大小與Percona的page大小相同。
#參數說明
flashcache_create [-s cache_size] [-b block_size] cachedevname ssd_devname disk_devname
[-s cache_size]: 緩存大小,可選項。如果沒有指定ssd整個磁盤用作緩存。
[-b block_size]: 塊大小 ,可選項。默認是4KB,必須是2的倍數。
-f:強制創建,略過檢查
-p:
#可以在/dev/mapper目錄下看到新的虛擬設備/dev/mapper/cachedev(這個也就是ssd+sas的混合盤)
ls /dev/mapper | grep cachedev
#(非第一次創建)重啓服務器後加載混合硬盤,可以寫在rc.local中,啓動mysql之前。
flashcache_load /dev/sdb cachedev
#掛載硬盤
mount -o noatime,nodiratime,barrier=0 /dev/mapper/cachedev /data
#監控、管理混合盤狀態
1.cache中預加載文件
flashcache_cacheit filename
2.cache中刪除文件
flashcache_trim filename
3.添加進程名單
flashcache_addpids <device_name> w|b pid1 # 將此進程操作的數據寫入到flashcache中
4.刪除進程名單
flashcache_delpids <device_name> w|b pid1 # 不將此進程操作的數據寫入到flashcache中
5.查看狀態
dmsetup status cachedev
dmsetup table cachedev
dmsetup info cachedev
6.刪除flashcache卷
umount cachedev
dmsetup remove cachedev # 刪除所有的髒cacheblock到磁盤
7.銷燬flashcache卷
flashcache_destory /dev/sdb(ssd磁盤的名字) # 銷燬存在於/dev/sdb上的緩存,所有數據丟失,但是/dev/sdc上的數據還存在
#使用
1.裸盤使用
2.安裝文件系統
mkfs.ext3 /dev/mapper/cachedev
#fio隨機讀寫測試
fio -filename=/data/a.txt -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=1G -numjobs=10 -runtime=120 -group_reporting -name=mytest
fio -filename=/data/a.txt -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=1G -numjobs=10 -runtime=120 -group_reporting -name=mytest
# 微調參數
shell> vim /etc/sysctl.conf
dev.flashcache.dirty_thresh_pct = 90 # flashcache上每個hash set上的髒塊閥值
dev.flashcache.cache_all = 1 # cache所有內容,可以用黑名單過濾,所有經過混合盤的數據都緩存。如果等於0,需要設置'flashcache_addpids <device_name> w|b pid1',緩存需要(的進程對混合盤操作)的數據
dev.flashcache.fast_remove = 1 # 打開fast remove特性,關閉機器時,(優點)無需將cache中的髒塊寫入sas盤中,直接落存在ssd盤中,這樣啓動的時候就不用預加載文件了'flashcache_cacheit filename',因爲數據已經存在在ssd中,無需再從sas中加載進來。
# 但是等於1的前提時,(前提)ssd做了raid10或者raid5,壞一個盤不影響數據丟失,可以換盤補修數據,(缺點)但是這樣就沒法用pci-e了(也就是無法直接跟cpu通訊了,需要經過南北橋了)
# 等於0的時,(優點)可以使用pci-e(可以直接跟cpu通訊了,提高速度),(缺點)一旦ssd(因爲是單盤)損壞,數據將丟失。
dev.flashcache.reclaim_policy = 1 # 髒塊刷出策略,0:FIFO,1:LRU
dev.flashecache.write_merge = 1 # 打開寫入合併,提升寫磁盤的性能(暫不用)
# 查看flashcache錯誤信息
cat /proc/flashcache_errors