centos6.4安装flashcache
FlashCache呢是Facebook技术团队的又一力作,最初是为加速MySQL设计的。
Flashcache是在Linux层面的,所以任何受磁盘IO困绕的软件或应用都可以方便的使用。
为什么是用于加速MySqL呢,这个就涉及到数据库的专业知识了,传统磁盘的随机写随机读效率都相当低下,需要进行机械化的寻道读取,尽管很多学术论文对数据库优化中都曾经在这些方面大做文章。那么SSD的存在似乎很好的解决了随机读写的问题,因为SSD是固态存储器,即不存在机械寻道和磁化问题,而是通过电位标注01,随机读写效率都相当优秀。
但是SSD有个先天性缺陷,那就是写入数据之前必须先进行擦除,这是为什么呢,这和SSd的原理有关,电位的转化问题,就是先都空间全部置位,在进行加电变化每个cell的正确电位,那么势必会影响SSd的寿命,相当于一次写转化为了两次写。如果SSD的使用没有进过良好的优化,那么会SSD的使用寿命将会受限,因此损耗均衡算法也是SSD研究关注的重点,貌似现在应都有了成熟的解决方案。
尽管SSd设备都具备了良好的损耗均衡,但是使用者都是熟知SSD的缺陷,所以不得不小心应对,因此SSD在存储中的位置,通常作为读缓存,用于提高系统的IO性能。FlashCache便是以此为目的的使用SSd设备。
FlashCache是Linux的一个模块,可以动态地加载在Linux中。
Flashcache通过在文件系统(VFS)和设备驱动之间新增了一次缓存层,来实现对热点数据的缓存。用SSD作为缓存,通过将传统硬盘上的热门数据缓存到SSD上,然后利用SSD优秀的读性能,来加速系统。这个方法较之内存缓存,没有内存快,但是空间可以比内存大很多。(SSd的价格高于磁盘,低于内存)
图示:
/dev/sdb是SSD设备,/dev/sda是传统的磁盘设备,加载了Flashcache之后呢,会将这两个设备虚拟化为一个带有缓存的块设备/dev/mapper/cachedev
好了,废话说完,我们开始实际操作。
1、环境准备和安装所需软件包
# cat /etc/issue
CentOS release 6.4 (Final)
Kernel \r on an \m
yum -y update
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum -y install dkms gcc make yum-utils kernel kernel-devel git make gcc-c++ device-mapper
yum -y install unifdef.x86_64
同时,flashcache需要整个源码树,查看一下
[root@localhost ~]# ll /usr/src/kernels/2.6.-431.29..el6.x86_64/
总用量
drwxr-xr-x. root root 10月 : arch
drwxr-xr-x. root root 10月 : block
drwxr-xr-x. root root 10月 : crypto
drwxr-xr-x. root root 10月 : drivers
drwxr-xr-x. root root 10月 : firmware
drwxr-xr-x. root root 10月 : fs
drwxr-xr-x. root root 10月 : include
drwxr-xr-x. root root 10月 : init
drwxr-xr-x. root root 10月 : ipc
drwxr-xr-x. root root 10月 : kernel
drwxr-xr-x. root root 10月 : lib
-rw-r--r--. root root 9月 : Makefile
-rw-r--r--. root root 9月 : Makefile.common
drwxr-xr-x. root root 10月 : mm
-rw-r--r--. root root 9月 : Module.symvers
drwxr-xr-x. root root 10月 : net
drwxr-xr-x. root root 10月 : samples
drwxr-xr-x. root root 10月 : scripts
drwxr-xr-x. root root 10月 : security
drwxr-xr-x. root root 10月 : sound
-rw-r--r--. root root 9月 : System.map
drwxr-xr-x. root root 10月 : tools
drwxr-xr-x. root root 10月 : usr
drwxr-xr-x. root root 10月 : virt
如果没有的话下载放到指定位置
wget http://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/kernel-2.6.32-358.el6.src.rpm
进入flashcache目录编译
# cd flashcache
# make KERNEL_TREE=/usr/src/kernels/2.6.32-431.29.2.el6.x86_64/
没有报错的话继续
make install
出现错误:
[root@localhost flashcache]# make install
make -C src KERNEL_TREE=/lib/modules/2.6.-.el6.x86_64/build PWD=/root/flashcache/src install
make[]: Entering directory `/root/flashcache/src'
make -C /lib/modules/2.6.-.el6.x86_64/build M=/root/flashcache/src modules V=
make: Entering an unknown directory
make: *** /lib/modules/2.6.-.el6.x86_64/build: 没有那个文件或目录。 停止。
make: Leaving an unknown directory
make[]: *** [modules] 错误
make[]: Leaving directory `/root/flashcache/src'
make: *** [install] 错误
build 是一个链接文件,并且指向的地址不存在。
我发现/usr/src/kernels/目录下面是开始是没有内容的,对于centos来说,内核源码是放在 /usr/src/kernels 目录中;如果通过在线升级内核,也是放在这个目录中;如果您的系统中的 /usr/src/kernels/ 中没有内容,说明没有安装内核的源码包 kernel-devel 软件包;
通过在线安装的内核源码包 ,比如通过 apt+synaptic 或者yum 安装的,内核源码会被放到/usr/src/kernel 下的目录中,您要进入相对应的目录进行编译; 在这里我是通过yum安装的。
yum -y install kernel
yum -y install kernel-devel
因为我已经安装了源码包,所有出现:
[root@localhost ~]# yum -y install kernel-devel
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: mirrors.hustunique.com
* epel: mirrors.hustunique.com
* extras: mirrors.hustunique.com
* updates: mirrors.hustunique.com
Setting up Install Process
Package kernel-devel-2.6.-431.29..el6.x86_64 already installed and latest version
Nothing to do
[root@localhost ~]# cd /lib/modules/2.6.-.el6.x86_64/
[root@localhost 2.6.-.el6.x86_64]# ln -s /usr/src/kernels/2.6.-431.29..el6.x86_64/ build
ln: 创建符号链接 "build": 文件已存在
使build指向刚/usr/src/kernels中刚安装的源码包,出现错误
必须要先删除才能添加新的链接
# rm -rf /lib/modules/2.6.32-358.el6.x86_64/build
重新建立符号链接:
[root@localhost 2.6.-.el6.x86_64]# ln -s /usr/src/kernels/2.6.-431.29..el6.x86_64/ /lib/modules/2.6.-.el6.x86_64/build
之后就可以进入flashcache目录
[root@localhost flashcache]# make install
[root@localhost flashcache]# make install
make -C src KERNEL_TREE=/lib/modules/2.6.-.el6.x86_64/build PWD=/root/flashcache/src install
make[]: Entering directory `/root/lashcache/src'
make -C /lib/modules/2.6.-.el6.x86_64/build M=/root/flashcache/src modules V=
make[]: Entering directory `/usr/src/kernels/2.6.-431.29..el6.x86_64'
CC [M] /root/flashcache/src/flashcache_conf.o
CC [M] /root/flashcache/src/flashcache_main.o
CC [M] /root/flashcache/src/flashcache_subr.o
CC [M] /root/flashcache/src/flashcache_ioctl.o
CC [M] /root/flashcache/src/flashcache_procfs.o
CC [M] /root/flashcache/src/flashcache_reclaim.o
CC [M] /root/flashcache/src/flashcache_kcopy.o
LD [M] /root/flashcache/src/flashcache.o
Building modules, stage .
MODPOST modules
CC /root/flashcache/src/flashcache.mod.o
LD [M] /root/flashcache/src/flashcache.ko.unsigned
NO SIGN [M] /root/flashcache/src/flashcache.ko
make[]: Leaving directory `/usr/src/kernels/2.6.-431.29..el6.x86_64'
install -o root -g root -m -d /lib/modules/2.6.-.el6.x86_64/extra/flashcache/
install -o root -g root -m flashcache.ko /lib/modules/2.6.-.el6.x86_64/extra/flashcache/
depmod -a 2.6.-.el6.x86_64
make -C utils all
make[]: Entering directory `/root/flashcache/src/utils'
make[]: Nothing to be done for `all'.
make[]: Leaving directory `/root/flashcache/src/utils'
make -C utils install
make[]: Entering directory `/root/flashcache/src/utils'
install -d -m /sbin/
install -m flashcache_create flashcache_destroy flashcache_load flashcache_setioctl get_agsize /sbin/
make[]: Leaving directory `/root/flashcache/src/utils'
make -C ocf install
make[]: Entering directory `/root/flashcache/src/ocf'
install -d -m /usr/lib/ocf/resource.d/flashcache
install -m flashcache /usr/lib/ocf/resource.d/flashcache
make[]: Leaving directory `/root/flashcache/src/ocf'
make[]: Leaving directory `/rootflashcache/src'
加载模块
modprobe flashcache
内核一直显示报错:
Oct :: localhost kernel: flashcache: disagrees about version of symbol dm_kcopyd_client_create
Oct :: localhost kernel: flashcache: Unknown symbol dm_kcopyd_client_create
Oct :: localhost kernel: flashcache: disagrees about version of symbol dm_kcopyd_copy
Oct :: localhost kernel: flashcache: Unknown symbol dm_kcopyd_copy
Oct :: localhost kernel: flashcache: disagrees about version of symbol dm_kcopyd_client_destroy
Oct :: localhost kernel: flashcache: Unknown symbol dm_kcopyd_client_destroy
Oct :: localhost kernel: flashcache: disagrees about version of symbol dm_kcopyd_client_create
Oct :: localhost kernel: flashcache: Unknown symbol dm_kcopyd_client_create
Oct :: localhost kernel: flashcache: disagrees about version of symbol dm_kcopyd_copy
Oct :: localhost kernel: flashcache: Unknown symbol dm_kcopyd_copy
Oct :: localhost kernel: flashcache: disagrees about version of symbol dm_kcopyd_client_destroy
Oct :: localhost kernel: flashcache: Unknown symbol dm_kcopyd_client_destroy
最后没解决,重新编译了内核源码linux-2.6.32,重新编译flashcache源码
[root@localhost flashcache]# make KERNEL_TREE=/usr/src/linux-2.6./
[root@localhost flashcache]# make install
[root@localhost flashcache]# modprobe flashcache
[root@localhost flashcache]# dmesg | tail
说明成功加载模块
好了,现在我们可以开始做磁盘加速了,哈哈
例如我的ssd硬盘是/dev/sdb1,要对/dev/md127加速,/dev/sdb1是SSD。
注意:flashcache挂载不能写到fstab,不然启动的时候会报错
创建raid5:
[root@localhost flashcache]# mdadm -C /dev/md127 -l5 -n3 /dev/sdc1 /dev/sdd1 /dev/sde1
flashcache配置
1.首次创建Flashcach设备
请注意,设备上的文件将会被清空
首先确保hdd的分区没有被挂载,如果挂载了,卸载之 [root@localhost flashcache]# flashcache_create -p back cachedev /dev/sdd1 /dev/md127
cachedev cachedev, ssd_devname /dev/sdd1, disk_devname /dev/md127 cache mode WRITE_BACK
block_size , md_block_size , cache_size
Flashcache metadata will use 549MB of your 15901MB main memory
使用fdisk -l
Disk /dev/mapper/cachedev: 107.4 GB, bytes
heads, sectors/track, cylinders
Units = cylinders of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disk identifier: 0x00000000
2.使用该设备
[root@localhost flashcache]# mkfs.ext2 /dev/mapper/cachedev
[root@localhost flashcache]# mount /dev/mapper/cachedev /root/test
3.如何重建flashcache
[root@localhost flashcache]# umount /root/test
[root@localhost flashcache]# dmsetup remove cachedev
[root@localhost flashcache]# flashcache_destroy /dev/sdd1
4.开机自动加载
开机加载flashcache模块,把下述脚本放到/etc/sysconfig/modules/目录中并赋可执行权限
flashcache.modules
#!/bin/sh
MODULES="flashcache"
for i in $MODULES ; do
modprobe $ >/dev/null >&
done 开机加载flashcache盘
在rc.local里添加
flashcache_load /dev/md127
mount /dev/mapper/cachedev /root/test
5.查询状态
dmsetup status cachedev
dmsetup table cachedev
dmsetup info cachedev
flashcache测试
使用fio进行测试:
centos6.4安装flashcache的更多相关文章
- vmware Centos6.6安装64位
Centos6.6安装64位 必须开启BIOS中的虚拟化技术 首先开机进入BIOS,一般机器是按F2,我的T420是按F1,然后进入Security,Virtualization,选择Enable即可 ...
- Gitlab完美安装【CentOS6.5安装gitlab-6.9.2】
摘要: 拆腾了几天,终于在今天找到了快速安装Gitlab的方法.CentOS6.5安装gitlab-6.9.2 参考网址:https://gitlab.com/gitlab-org/omnibus-g ...
- CentOS6.5安装Tomcat
安装说明 安装环境:CentOS-6.4 安装方式:源码安装 软件:apache-tomcat-7.0.56.tar.gz 下载地址:http://tomcat.apache.org/download ...
- Centos6 yum安装openldap+phpldapadmin+TLS+双主配置
原文地址:http://54im.com/openldap/centos-6-yum-install-openldap-phpldapadmin-tls-%E5%8F%8C%E4%B8%BB%E9%8 ...
- centos6.5安装oracle11g_2
centos7安装oracle数据库不成功,换成centos6.5安装,可以安装成功,记录一下 安装系统时,主机名如果不是用localhost,安装成功后,要用主机名和ip做映射,修改/etc/hos ...
- CentOS6.6安装vmware workstation报错
本人系统用的是centos6.6,安装了vmware workstation,启动后一直如下图报错,相关内核已经安装了的,哪位前辈如果解决过这样的问题,麻烦指点指点,小弟在此先谢过了.
- CentOS6.6安装virtualbox4.1.44
本人用的是centos6.6,安装了virtualbox 4.1.44,启动后一直如上图报错,哪位前辈如果解决过这样的问题,麻烦指点指点,小弟在此先谢过了.
- [转]CentOS-6.3安装配置cmake
CentOS-6.3安装配置cmake zhoulf 2013-02-03 原创 安装说明 安装环境:CentOS-6.3安装方式:源码编译安装 软件:cmake-2.8.10.2.tar.gz下 ...
- 实战CENTOS6.5安装docker并创建asp.net mvc 5 镜像,运行MVC 网站
Docker,容器,让研发.测试.生产同一环境,可在linux平台上混合使用JAVA与net 程序 Centos6.5安装docker 参考http://my.oschina.net/kcw/blog ...
随机推荐
- #Leet Code# LRU Cache
语言:C++ 描述:使用单链表实现,HeadNode是key=-1,value=-1,next=NULL的结点.距离HeadNode近的结点是使用频度最小的Node. struct Node { in ...
- Linux Curses编程实现贪吃蛇
curses库 简单而言,提供UNIX中多种终端 操作光标和显示字符 的接口.我们常见的vi就是使用curses实现的.现在一般都用ncurses库. Linux下curses函数库 Linux ...
- 移除Sourcesafe与VC6的绑定
整理日: 2015年2月16日 HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Source Control\Disabled
- initWithCoder: 与initWithFrame:
之前一直用代码来编写画面,现在着手使用storyboard和xib来构筑画面,遇到initWithCoder方法, 故查了下,initWithCoder方法的调用,看了篇博客,链接如下: http:/ ...
- hadoop 学习笔记 (十) mapreduce2.0
MapReduce的特色---不擅长的方面 >实时计算 像mysql一样,在毫秒级或者秒级内返回结果 >流式计算 Mapreduce的输入数据时静态的,不能动态变化 MapReduce自身 ...
- 应用安全技术趋势之 Top 5
而今,大多数应用都依赖于像入侵防护系统(Instrusion Prevention System)和 Web 应用防火墙(Web Application Firewall,以下全文简称 WAF)这样的 ...
- Hashtable,HashMap实现原理
http://blog.csdn.net/czh0766/article/details/5260360 昨天看了算法导论对散列表的介绍,今天看了一下Hashtable, HashMap这两个类的源代 ...
- 【POJ1021】Intervals (最短路解差分约束)
题目: Sample Input 5 3 7 3 8 10 3 6 8 1 1 3 1 10 11 1 Sample Output 6 题意: 我们选数,每个数只能选一次.给定n个条件[ai,bi]和 ...
- [spring-framework]Spring定时器的配置和使用
开发中我们常常会做一些定时任务,这些任务有开始时间,并会按一定的周期或规则执行.如此我们在Java程序开发中使用定时器来处理定时任务. <!-- MessageRequestTask类中包含了m ...
- 三大框架SSH(struts2+spring+hibernate)整合时相关配置文件的模板
最近在学SSH三大框架的整合,在此对他们整合时相关配置文件做一简单的模板总结,方便以后复用! 首先是web.xml配置文件,这里面就配置一些简单的监听器.过滤器,包括spring核心配置文件appli ...