MySQL缓存优化模块 Flashcache

下载地址:https://github.com/facebook/flashcache/archives/master

Facebook发布了通过将数据缓存在SSD硬盘加速MySQL的内核模块Flashcache。代码已经放到Github上,目前只测试了Linux kernel版本2.6.18和2.6.20。

Facebook称,Flashcache是其内部开发用于帮助扩展InnoDB/MySQL数据库,但同时Flashcache也是作为一个通用的缓存模块设计的,因此能用在任何搭建在块设备之上的应用程序。对于InnoDB,当工作集不与InnoDB缓冲池一致,由于更多的工作集缓存在快速的媒介如固态硬盘上,将能显著的改进读取延迟。

原文:http://www.orczhou.com/index.php/2010/10/how-to-setup-flashcace/

Flashcache的安装在其README和README-CentOS5.4已经有一个很详细的说明了,但是实际操作并不是很顺利,而且有些同事表示在编译过程中仍遇到了一些问题,这里详细的记录一下自己的编译、安装过程。

1. 环境说明
使用的是RHEL5.4的系统:

$cat /etc/issue
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
$uname -a
Linux myhost 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
2. 需要的RPM包
安装基本工具包:rpm-build redhat-rpm-config unifdef。一般情况这三个包都是安装过的,检查一下即可。

$sudo yum install rpm-build
Package rpm-build-4.4.2.3-18.el5.x86_64 already installed and latest version
$sudo yum install redhat-rpm-config
Package redhat-rpm-config-8.0.45-32.el5.noarch already installed and latest version
$sudo yum install unifdef
Package unifdef-1.171-5.fc6.x86_64 already installed and latest version
3. 下载并安装源码包
现在的RHEL发行版中,已经不再带源码包,所以需要单独下载,供Flashcache编译使用。

3.1 准备目录
[supu@host]$ cd
[supu@host]$ mkdir -p rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
[supu@host]$ echo '%_topdir %(echo $HOME)/rpmbuild' > .rpmmacros
3.2 下载源码包
可以在ftp://ftp.redhat.com/下载到对应的源码包。这里的内核版本号是:

$uname -r
2.6.18-164.el5
所以需要下载的是kernel-2.6.18-164.el5.src.rpm,完整的URL是:

ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/kernel-2.6.18-164.el5.src.rpm
注:最好选择合适的镜像下载,速度会差很多的。

3.3 安装源码包
有了前面的目录准备,现在可以安装源码包了

sudo rpm -i kernel-2.6.18-164.el5.src.rpm
cd ~/rpmbuild/SPECS
rpmbuild -bp --target=`uname -m` kernel-2.6.spec 2> prep-err.log | tee prep-out.log
OK,这时候源码包就安装到了如下目录:/home/supu/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.x86_64

3.4 准备模块编译
在源码目录执行如下命令,主备Flashcache模块编译

cd ~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.x86_64
make oldconfig
make prepare
make modules_prepare
4. 编译Flashcache
可以在github上下载Flashcache的源代码,和Linux源码一起编译,编译完成后会生成三个可执行程序和一个可动态加载的内核模块:

flashcache_create
flashcache_load
flashcache_destroy
flashcache.ko
4.1 下载并准备编译
在在github上可以下载到Flashcache最新的源码。这里下载的是flashcache-1.0.11,解压后,有如下目录:

[supu@host facebook-flashcache-15adea8]$ ls
doc flashcache-wt LICENSE Makefile README README-CentOS5.4 README-DKMS src
其中src包含了普通的Flashcache(这里的普通指的是Write-back版本的Flashcache),flashcache-wt包 含了Write-Through版本的源码;文件README-CentOS5.4中包含了在RHEL5.4下编译的注意事项,本文主要参考该文件。

按照README-CentOS5.4中的说明,修改文件src/Makefile,将行EXTRA_CFLAGS(第一行),用如下内容替换:

 
 

 
  EXTRA_CFLAGS=-I$(KERNEL_TREE)/drivers/md -I$(KERNEL_TREE)/include/linux  -I./
 
 

注意:这里没有换行。
4.2 编译之
make KERNEL_TREE=/home/supu/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/
4.3 动态加载模块
最后需要将模块flashcache.ko加载到内核,这里可以将flashcache.ko拷贝到相应目录:

sudo cp flashcache.ko /lib/modules/2.6.18-164.el5/kernel/drivers/block
或者使用insmod命令,动态加载之:

sudo insmod flashcache.ko
Job Done! Enjoy!

接下来看看如何配置吧:

Flashcache的配置。

假设现在你已经编译好了Flashcache,已经装好了ssd盘(假设是/dev/sdb)和sas盘(假设需要使用的是分区/dev/sda12,这可能是一个RAID组)。接下来,看看如何使用Flashcache将上面两个设备虚拟成一个带缓存的块设备。

1. 首次创建Flashcach设备
注:请备份你的数据先!!!特别是/dev/sdb,这个设备上的数据将会被清空;理论上/dev/sda12上的数据不会有任何丢失。

首先确保sda12没有被挂载,如果挂载了,使用umount卸载之,然后使用flashcache_create创建设备:

./flashcache_create cachedev /dev/sdb /dev/sda12
如果是sudo帐号可能会遇到如下的报错:

sh: dmsetup: command not found

可以设置PATH变量的办法,来避免:

sudo PATH=/sbin ./flashcache_create cachedev /dev/sdb /dev/sda12
这样Linux就虚拟除了一个带缓存的块设备:

$ls -lah /dev/mapper/cachedev
brw-rw---- 1 root disk 253, 0 Oct 8 15:46 /dev/mapper/cachedev
2. 使用该设备
这样就可以像使用一般的块设备一样,来使用该设备了。如果原来分区/dev/sda12上已经有文件系统,mount后还可以正常使用;如果没有文件系统,也可以和一般的设备一样做先做文件系统,然后mount并使用之。

mount /dev/mapper/cachedev /u01
很简单吧:)

3. 如何重做Flashcache
首先需要umount相应分区,然后如果需要重新做Flashcache:

umount /u01
dmsetup remove cachedev
./flashcache_destroy /dev/sdb
如果需要重建,再安装上面的flashcache_create重建就可以了。

 

原文:http://www.oschina.net/question/12_23316

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值