ramdisk提升Apache性能实例(运维的必懂)
在阅读本篇文章之前,需要具备对/dev目录的设备文件和/proc目录下虚文件有一定基础知识的积累。所以,在此之前,整理几篇有关Linux设备管理方面的知识点,如下:
《了解proc目录文件》
《常用设备文件介绍》
《设备文件zero与null》
《mount设备挂载十例讲解》
《设备文件loop》
以上这些,将来亦会有不断更新。
同事疑惑,曰:为何要花去大半周时间写上述几篇文章?
回复:起因于上周代课时,一开始就讲ramdisk设备文件用途,中途发现大家很迷茫!原来缺少Linux设备方面知识点的基础铺垫。
一、ramdisk基本介绍
ramdisk一般指虚拟内存盘。
原理:
ramdisk就是通过软件将计算机的一部分内存(RAM)模拟为硬盘来使用的一种技术。linux系统可以使用其内核支持的机制来实现。
优点:
①ramdisk是系统RAM内存的一段,相对于直接的硬盘文件访问来说,这种技术可以极大的提高在其上进行的文件访问的速度(包括读和写)。
②ramdisk可以被当成是一个文件系统来操作(还可带有压缩的机制,如cramfs)。
缺点:
RAM的易失性也意味着当计算机重启或关机时会丢失数据,同时会减少系统可用的RAM,故需要控制一定的比例,否则,过多占用会导致系统运行缓慢。
常见用途:
①将ramdisk做为Web缓存的设备,这样可以提高加载页面的速度。
②在ramdisk上保存一个较大的数据集。如公司把crm系统的高频访问的这几张表与数据字典表建在ramdisk,加速数据查询。
③挂载loopback文件系统(例如,从软盘或CD运行)
Linux的2.4内核以上的版本均内建支持RamDisk,默认创建16个RamDisk,如下:
[[email protected] ~]# ls -l /dev/ram*
lrwxrwxrwx 1 root root 4 Dec 10 12:52 /dev/ram -> ram1
brw-r----- 1 root disk 1, 0 Dec 10 20:52 /dev/ram0
brw-r----- 1 root disk 1, 1 Dec 10 20:52 /dev/ram1
brw-r----- 1 root disk 1, 10 Dec 10 20:52/dev/ram10
brw-r----- 1 root disk 1, 11 Dec 10 20:52/dev/ram11
brw-r----- 1 root disk 1, 12 Dec 10 20:52/dev/ram12
brw-r----- 1 root disk 1, 13 Dec 10 20:52/dev/ram13
brw-r----- 1 root disk 1, 14 Dec 10 20:52/dev/ram14
brw-r----- 1 root disk 1, 15 Dec 10 20:52/dev/ram15
brw-r----- 1 root disk 1, 2 Dec 10 20:52 /dev/ram2
brw-r----- 1 root disk 1, 3 Dec 10 20:52 /dev/ram3
brw-r----- 1 root disk 1, 4 Dec 10 20:52 /dev/ram4
brw-r----- 1 root disk 1, 5 Dec 10 20:52 /dev/ram5
brw-r----- 1 root disk 1, 6 Dec 10 20:52 /dev/ram6
brw-r----- 1 root disk 1, 7 Dec 10 20:52 /dev/ram7
brw-r----- 1 root disk 1, 8 Dec 10 20:52 /dev/ram8
brw-r----- 1 root disk 1, 9 Dec 10 20:52 /dev/ram9
lrwxrwxrwx 1 root root 4 Dec 10 12:52 /dev/ramdisk -> ram0
二、综合实例:使用ramdisk提升Apache性能
简单搭建一个Apache服务环境,测试成功!
一般用RPM安装后的Apache配置文件具体位置:
/etc/httpd/ #Apache服务程序根目录
/etc/httpd/conf/httpd.conf #主配置文件
/var/www/html #网页文档默认根目录
/var/www/icons #默认图标
/var/log/httpd/error_log #错误日志文件
/var/log/httpd/access_log #访问日志文件
如下:
介绍在Apache服务器上使用3个ramdisk的方法。
①#首先把Apache下的目录文件备份,然后创建ramdisk挂载点。
为了提高网页的读取速度,先备份、再移动以下几个目录:
/etc/httpd/,/var/www/,/var/log/httpd/
[[email protected] ~]# tar -zcv -p -f/root/etc_httpd.tar.gz /etc/httpd
[[email protected] ~]# tar -zcv -p -f /root/var_www.tar.gz/var/www
[[email protected] ~]# tar -zcv -p -f/root/var_log_httpd.tar.gz /var/log/httpd
②停止httpd服务,再移除上述目录
[[email protected] html]# /etc/init.d/httpdstop
Stopping httpd: [ OK ]
[[email protected] html]# mkdir /root/apache_bak
[[email protected] var]# mv /etc/httpd /root/apache_bak/
[[email protected] var]# mv /var/www /root/apache_bak/
[[email protected] var]# mv /var/log/httpd /root/apache_bak/
③新建randisk的挂载点
[[email protected] var]# mkdir /etc/httpd
[[email protected] var]# mkdir /var/www
[[email protected] var]# mkdir /var/log/httpd
④创建3个ramdisk
[[email protected] var]# mkfs -t ext2/dev/ram0
[[email protected] var]# mkfs -t ext2 /dev/ram1
[[email protected] var]# mkfs -t ext2 /dev/ram2
⑤挂载ramdisk到步骤2创建的目录中
[[email protected] var]# mount /dev/ram0 /etc/httpd
[[email protected] var]# mount /dev/ram1 /var/www
[[email protected] var]# mount /dev/ram2 /var/log/httpd
#查看挂载情况
[[email protected] ~]# df -ah
⑥把Apche的原目录文件解压到ramdisk中
[[email protected]~]# tar -zxv -f etc_httpd.tar.gz -C /
[[email protected] ~]# tar -zxv -fvar_www.tar.gz -C /
[[email protected] ~]# tar -zxv -fvar_log_httpd.tar.gz -C /
#查看文件是否成功解压回复
#查看ramdisk,/dev/ram0大小总计约16M,使用情况如下。
[[email protected] ~]# df -h /dev/ram0
Filesystem Size Used Avail Use% Mounted on
/dev/ram0 16M 194K 15M 2% /etc/httpd
⑦重新启动Apache服务
[[email protected] ~]# /etc/init.d/httpd start
#启动成功,如下:
#访问测试
#重新启动系统,ramdisk中的目录与文件将全部丢失!
[[email protected]]# init 6
#再重新查看
Apache的原目录与文件将全部丢失!
接下来体会下,在内存文件系统的读写性能,如下:
#写入140M文件,456MB/s:
#读出140M文件,951M/s,更惊人!
##140M文件的读写同时进行,284M/s,太棒了!
现在,与在《设备文件zero与null》演示的硬盘读写性能进行对比,速度快了几十倍!Apache响应性能当然一下就提高很多。
同理,检查同一批服务器主要硬件配置的优异与差别,也需要借助ramdisk帮助!
三、脚本自动创建ramdisk
##自定义的脚本文件:/etc/httpd.init,#添加的命令如下:
[[email protected] ~]# vim /etc/httpd.init
#!/bin/bash
#新建挂载点
/bin/mkdir/etc/httpd
/bin/mkdir/var/www
/bin/mkdir/var/log/httpd
#格式文件系统
/sbin/mkfs-t ext2 /dev/ram0
/sbin/mkfs-t ext2 /dev/ram1
/sbin/mkfs-t ext2 /dev/ram2
#挂载
/bin/mount/dev/ram0 /etc/httpd
/bin/mount/dev/ram1 /var/www
/bin/mount/dev/ram2 /var/log/httpd
#解压Apache原文件到上述目录
/bin/tar-zxv -f etc_httpd.tar.gz -C /
/bin/tar-zxv -f var_www.tar.gz -C /
/bin/tar-zxv -f var_log_httpd.tar.gz -C /
#启动Apache服务
/etc/init.d/httpdstart
#添加后:wq保存
[[email protected] ~]# init 6 #备份关键的文件数据,重新启动系统
[[email protected]~]# /etc/httpd.init #运行脚本,再注意观察效果
四、Increase ramdisk size
在生产环境中,有时会发生在/var/mysql/data目录下单个数据表的文件需求超出16M,如有一张120M左右的表文件, 此时需要考虑把ramdisk容量新增160M。接下来介绍如何新增ramdisk容量。
##编辑/etc/grub.conf文件,内容如下:
[[email protected] ~]# vim /etc/grub.conf
kernel /vmlinuz-2.6.18-238.el5 ro root=LABEL=/ rhgbquiet ramdisk_size=160000
##保存文件,重启系统生效。
[[email protected] ramdisk0]# init 6
[[email protected] ~]# mkfs -t ext2 /dev/ram0
##基本到达我们160M的空间需求。
#当然,面对数据库的大容量单表文件,有更简单的方法,就是使用tmpfs文件系统来创建内存文件,在《mount设备挂载十例讲解》的示例8中有简单的演示,大家实战运维过程中可以参考使用。
注意事项:
1、一定要记住保存ramdisk中的目录与文件,否则,一旦系统重新启动,则ramdisk的文件会全部丢失!
2、可以用cron制定一个计划,每隔5或10分种扫描ramdisk中文件是否变化,如有,则拷贝到硬盘中进行数据备份。