CentOS/RHEL CacheFS:加速网络文件系统(NFS)文件访问
在RHEL 6.x +下使用NFS v4服务器。
如何在Red Hat Enterprise Linux或CentOS下为NFS配置CacheFS,以加快文件访问速度并减少NFS服务器上的负载?
Linux随附由David Howells开发的CacheFS。
当前,Linux CacheFS设计为可在Andrew文件系统和网络文件系统上运行。
您需要安装一个名为cachefilesd的软件包,它是CacheFiles用户空间管理守护程序。
cachefilesd守护程序管理诸如AFS和NFS之类的网络文件系统用来对本地磁盘进行持久缓存的缓存文件和目录。
步骤1:安装cachefilesd
使用yum命令安装cachefilesd cacheFiles用户空间管理守护程序:
# yum -y install cachefilesd
输出示例:
Loaded plugins: product-id, protectbase, rhnplugin, subscription-manager Updating certificate-based repositories. 0 packages excluded due to repository protections Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package cachefilesd.x86_64 0:0.10.2-1.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ==================================================================================================== Package Arch Version Repository Size ==================================================================================================== Installing: cachefilesd x86_64 0.10.2-1.el6 rhel-x86_64-server-6 35 k Transaction Summary ==================================================================================================== Install 1 Package(s) Total download size: 35 k Installed size: 0 Downloading Packages: cachefilesd-0.10.2-1.el6.x86_64.rpm | 35 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : cachefilesd-0.10.2-1.el6.x86_64 1/1 Installed products updated. Installed: cachefilesd.x86_64 0:0.10.2-1.el6 Complete!
步骤2:配置cachefilesd
您需要编辑/etc/cachefilesd.conf,输入:
# vi /etc/cachefilesd.conf
示例配置文件:
dir /ssd/fscache tag mycache brun 10% bcull 7% bstop 3% frun 10% fcull 7% fstop 3% # Assuming you're using SELinux with the default security policy included in # this package secctx system_u:system_r:cachefiles_kernel_t:s0
其中:
- dir/ssd/fscache默认目录设置为/var/cache/fscache。该目录充当缓存的根。在此示例中,我的nfs客户端安装在RAID-1上,而缓存则在安装在/ssd /的单个ssd磁盘上。读取文件时缓存很好,但是我有太多小文件,这导致缓存相反。特别是在慢速硬盘上。所以我把缓存放到另一个硬盘上。如果您负担得起二手ssd磁盘。
- tag mycache该命令为FS-Cache指定一个标签,用于区分多个缓存。仅当要使用多个缓存时才需要。默认值为CacheFiles。
secctx system_u:system_r:cachefiles_kernel_t:s0
指定一个LSM安全上下文,内核将在该上下文中执行访问缓存的操作。缺省值为使用cachefilesds安全上下文。如果更改目录,则需要使用以下说明来设置新的LSM安全上下文。- " brun 10%,bcull 7%,bstop 3%,frun 10%,fcull 7%,fstop 3%"。缓存有时可能需要剔除以腾出空间。这涉及从缓存中丢弃使用时间最近的对象。筛选基于数据对象的访问时间。如果不使用空目录,则将其剔除。有关更多信息,请参见cachefilesd.conf手册页或此url。
步骤3:如何启动/停止/重新启动cachefilesd?
只需键入以下命令:
## start it ## /sbin/service cachefilesd start # or # /etc/init.d/cachefilesd start ## stop it ## /sbin/service cachefilesd stop ## restart it ## /sbin/service cachefilesd restart # or # /etc/init.d/cachefilesd restart ## get status ## /sbin/service cachefilesd status
步骤4:如何安装具有CacheFS支持的nfs客户端?
您需要传递fsc选项以挂载命令,如下所示:
mount -t nfs -o fsc,optio2 nas01:/export/dir1/ /destination/mnt/point
在此示例中,使用fsc(和其他选项)从nas042在本地/var/www/html上挂载/var/www/html,如下所示:
# mount -t nfs4 -o rsize=32768,wsize=32768,intr,hard,proto=tcp,sync,fsc nas042:/var/www/html /var/www/html
步骤5:如何验证nfs客户端正在使用CacheFS?
将CD复制到/ssd/fscache(或默认的/var/cache/fscache)目录,然后键入以下命令:
# cd /ssd/fscache # ls -Z
输出示例:
drwx------. root root system_u:object_r:cachefiles_var_t:s0 cache drwx------. root root system_u:object_r:cachefiles_var_t:s0 graveyard
正确设置缓存后,您将看到上面的两个目录。
您可以键入以下命令来列出文件和缓存大小:
# find # du -sh
输出示例:
142M
如何查看FS-Cache统计信息?
只需键入以下命令:
# cat /proc/fs/fscache/stats
输出示例:
FS-Cache statistics Cookies: idx=30 dat=7895 spc=0 Objects: alc=7164 nal=0 avl=7164 ded=4261 ChkAux : non=0 ok=3727 upd=0 obs=3 Pages : mrk=59000 unc=37195 Acquire: n=7925 nul=0 noc=0 ok=7925 nbf=0 oom=0 Lookups: n=7164 neg=3429 pos=3735 crt=3429 tmo=0 Updates: n=0 nul=0 run=0 Relinqs: n=5022 nul=0 wcr=0 rtr=22 AttrChg: n=0 ok=0 nbf=0 oom=0 run=0 Allocs : n=0 ok=0 wt=0 nbf=0 int=0 Allocs : ops=0 owt=0 abt=0 Retrvls: n=7307 ok=3324 wt=1540 nod=3243 nbf=740 int=0 oom=0 Retrvls: ops=6567 owt=1672 abt=0 Stores : n=32683 ok=32683 agn=0 nbf=0 oom=0 Stores : ops=5842 run=38525 pgs=32683 rxd=32683 olm=0 VmScan : nos=181 gon=0 bsy=0 can=0 Ops : pend=1695 run=12409 enq=38525 can=0 rej=0 Ops : dfr=21 rel=12409 gc=21 CacheOp: alo=0 luo=0 luc=0 gro=0 CacheOp: upo=0 dro=0 pto=0 atc=0 syn=0 CacheOp: rap=0 ras=0 alp=0 als=0 wrp=0 ucp=0 dsp=0
您可以看到可以通过其他/proc文件检查单个安装点的缓存状态。
# cat /proc/fs/nfsfs/servers
输出示例:
NV SERVER PORT USE HOSTNAME v4 0a0a1d44 801 1 nas042
# cat /proc/fs/nfsfs/volumes
输出示例:
NV SERVER PORT DEV FSID FSC v4 0a0a1d44 801 0:20 147f55ffe88547d2 yes
记下FSC列的输出。
当要求系统缓存特定的NFS时,它总是说是,而当它没有时,它总是说。
如何测试CacheFS?
将文件从NFS服务器复制到本地硬盘驱动器:
time cp /path/to/nfs/mnt/point/bigfile.gz /tmp #### this should speed up as bigfile.gz is in cache now ##### time cp /path/to/nfs/mnt/point/bigfile.gz /dev/null
在此示例中,将data.tar.bz2(78MB)从nfs复制到/tmp(初始缓存):
$ time cp data.tar.bz2 /tmp
输出示例:
real 0m7.023s user 0m0.000s sys 0m0.185s
再次将data.tar.bz2从NFS复制到/dev/null(即从缓存中获取):
$ time cp data.tar.bz2 /dev/null
输出示例:
real 0m0.027s user 0m0.000s sys 0m0.026s