这里先简要介绍一下这个rapiddisk。
rapiddisk是一个可以用来创建RAMDISK(内存盘)的工具,和我前两天介绍的直接用Linux内核自带的brd模块创建RAMDISK一样。但rapiddisk有一个更高级的功能叫:“cache-map”。简单点说就是我们可以利用rapiddisk创建的内存盘给普通HDD硬盘做缓存加速。
像目前市面上有很多给HDD硬盘做缓存加速的方案,比如bcache,又比如facebook开发的flashcache,但这些方案都是需要SSD做支持才行的。那如果我们的服务器上面没有SSD,只有普通的HDD,有没办法做缓存加速呢?答案就是今天的这个:rapiddisk。
这篇文章我将在ikoula的一台垃圾独立服务器上部署rapiddisk并启用cache-map。
因为ikoula的独立服务器没有IPMI/VNC/KVM/等等一切可以用来远程管理的平台,并且ikoula后台重装的系统默认是把硬盘的全部空间分配给根目录,而我们要做cache-map就必须得umount一个文件系统才行,根目录又不能umount,所以我想到了先把根目录缩小(缩小根目录真不是一件容易事),再利用LVM的机制去创建一个新的挂载点。
首先我们来缩小根目录,这里需要用到一个脚本,我们先更新一下源和安装一个git:
apt update apt install git
然后拉取这个脚本:
git clone https://github.com/szepeviktor/debian-server-tools.git cd debian-server-tools
编辑这个脚本:
nano debian-resizefs.sh
修改如图位置为你想要的根目录新大小:
然后执行脚本,等待机器重启完成:
./debian-resizefs.sh
接着使用LVM将根目录的大小缩减至100G:
lvresize -L 100G VolGroup00/root
我这台机器是2X2T的硬盘做的RAID0,我更改了根目录大小为100G,那么我把剩下的全部硬盘空间划分给/home,所以这里创建一个新的LV:
lvcreate -L 3.53T -n home VolGroup00
接着格式化为ext4:
mkfs.ext4 /dev/VolGroup00/home
创建一个挂载目录:
mkdir -p /home
挂载上去:
mount /dev/VolGroup00/home /home
设置fstab:
echo "/dev/VolGroup00/home /home ext4 defaults 0 0" >> /etc/fstab
这样我们就成功的把根目录缩小了,并且创建了一个新的挂载点。
现在安装一些编译安装rapiddisk所需的依赖:
apt install zlib1g-dev libcryptsetup-dev libjansson-dev dkms
如果是CentOS7:
yum -y groupinstall "Development Tools" yum -y install zlib-devel cryptsetup-devel jansson-devel dkms
拉取项目编译并安装:
cd git clone https://github.com/pkoutoupis/rapiddisk.git cd rapiddisk make make install make dkms make tools-install
使用如下命令查看模块加载信息:
modinfo rapiddisk modinfo rapiddisk-cache
加载模块到内核:
modprobe dm_crypt modprobe rapiddisk modprobe rapiddisk-cache
现在我们创建一个大小为4GB的内存盘:
rapiddisk --attach 4096
格式化为ext4:
mkfs.ext4 /dev/rd0
创建一个新的挂载目录:
mkdir -p /ramdisk
取消之前/home目录的挂载:
umount /dev/mapper/VolGroup00-home
创建cache-map,并指定为我们之前的/home:
rapiddisk --cache-map rd0 /dev/mapper/VolGroup00-home
查看创建之后的新文件系统信息:
rapiddisk --list
最后我们把新的文件系统挂载到/ramdisk:
mount /dev/mapper/rc-wt_VolGroup00-home /ramdisk
这样一个经过RAMDISK缓存加速的HDD硬盘就创建完成了:
设置开机自动加载rapiddisk模块:
echo "dm_crypt" >> /etc/modules echo "rapiddisk" >> /etc/modules echo "rapiddisk-cache" >> /etc/modules
如果不想使用了,使用下面的命令关闭rapiddisk模块:
modprobe -r rapiddisk modprobe -r rapiddisk-cache
删除内存盘:
rapiddisk --detach rd0
使用帮助手册:
man rapiddisk
下面我使用hdpram对普通的HDD硬盘和经过RAM缓存加速过的HDD硬盘进行简单的测试,请注意我们测试只需要测试读取性能即可,因为rapiddisk只对读取有缓存,写入是没有任何缓存机制的。
普通的HDD硬盘读取速度稳定在230MB/s左右:
而经过RAM缓存的HDD硬盘读取速度一次比一次快,一共7次测试,最后一次的速度已经在600MB/s往上了: