212611834.jpg

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