CentOS/RHEL CacheFS:加速网络文件系统(NFS)文件访问

时间:2020-01-09 10:34:14  来源:igfitidea点击:

在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