安装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