在Linux上安装和使用FS-Cache缓存NFS共享数据

本文让您了解如何在Debian、Ubuntu、CentOS、Fedora、RedHat Linux系统上使用FS-Cache缓存NFS共享数据。缓存NFS共享数据有助于提高文件访问性能,FS-Cache是在将通过网络检索到的数据缓存到本地磁盘中发挥重要作用的工具之一,这有助于在通过网络访问文件时最小化网络流量。

在Linux上安装和配置FS-Cache

1、在Linux上安装FS-Cache

FS-Cache在几个Linux发行版的默认存储库中可用。可以使用以下命令安装:

##在Debian/Ubuntu上

sudo apt update

sudo apt install cachefilesd

##在CentOS/Fedora/RedHat/Rocky Linux/AlmaLinux上

sudo yum install cachefilesd

安装后,启动并启用服务:

sudo systemctl enable --now cachefilesd

检查服务是否正在运行:

$ systemctl status cachefilesd

2、在Linux上配置FS-Cache

安装后,您需要配置FS-Cache并将后端目录设置为缓存。

打开配置文件进行编辑:

sudo vim /etc/cachefilesd.conf

在文件中,添加后端目录:

dir /var/cache/fscache

/var/cache/fscache是默认路径,但是,您可以使用另一个所需路径,并使用以下命令在基于Rhel的系统上配置SELinux:

sudo semanage fcontext -a -e /var/cache/fscache /path/to/cache

sudo restorecon -Rv /path/to/cache

将/path/to/cache替换为新的缓存后端目录。如果上述命令无效,还可以使用:

sudo semanage permissive -a cachefilesd_t

sudo semanage permissive -a cachefiles_kernel_t

您还可以装载并使用磁盘分区进行缓存。但是您需要使用以下命令为ext3文件系统启用用户定义的扩展属性:

sudo tune2fs -o user_xattr /dev/device

将/dev/device替换为磁盘路径。或者,您可以在装载期间启用扩展属性:

sudo mount /dev/device /path/to/cache -o user_xattr

以下将配置Cache culling。

FS-Cache守护程序使用指定的后端文件/磁盘来存储共享的远程数据。这会堆积并消耗磁盘上的所有可用空间,并导致问题,尤其是在使用同一磁盘进行引导时。

cachefilesd试图通过放弃缓存的旧对象来保持磁盘上的可用空间量。此特性称为Cache culling。此配置可以在/etc/cachefilesd.conf中使用六个控制限制来完成:

brun N% (percentage of blocks) & frun N% (percentage of files):这描述了可用空间的数量和可用文件的数量。如果这些值缓存高于设置的百分比,则将禁用culling。

bcull N% (percentage of blocks) & fcull N% (percentage of files):描述可用空间的数量或文件的数量,如果这些值低于设置的限制,则开始culling。

bstop N% (percentage of blocks) & fstop N% (percentage of files):

这可以通过如下指定N值在配置文件中设置:这里,如果缓存中的可用空间量或可用文件数低于这些限制中的任何一个,则磁盘空间的分配将停止,直到这些限制提高到设置的百分比以上。

这可以通过如下指定N值在配置文件中设置:

tag mycache

brun 10%

bcull 7%

bstop 3%

frun 10%

fcull 7%

fstop 3%

tag mycache变量用于指定具有多个缓存时要使用的FS-Cache。

可以使用以下命令获取更多配置信息:

man cachefilesd.conf

完成所需配置后,重新启动服务:

sudo systemctl restart cachefilesd

从FS-Cache检索统计信息及使用FS-Cache缓存NFS共享数据

1、从FS-Cache检索统计信息

FS-Cache跟踪一般系统统计信息。可以使用以下命令在基于Rhel的系统上检索此信息:

cat /proc/fs/fscache/stats

样本输出:

在Linux上安装和使用FS-Cache缓存NFS共享数据

2、使用FS-Cache缓存NFS共享数据

除非得到指示,否则NFS无法使用FS-Cache。以下步骤用于将NFS共享配置为使用FS-Cache。

我假设您已经有了一个NFS服务器并可以访问。请自行安装和配置NFS服务器才可用以下技术。然后使用具有以下语法的命令继续并在此客户端上装载NFS共享:

# mount -t nfs <nfs-share:/ > </mount/point> -o fsc

适当地替换nfs-share:/和/mount/point。例如,将共享/home路径装载到装载点/mnt/home:

sudo mkdir /mnt/home

sudo mount -t nfs nfs.computingforgeeks.com:/home /mnt/home -o fsc

上述命令执行临时装载,系统重新启动后设置将无法继续运行。要使这些设置持久,您需要通过编辑/etc/fstab文件进行永久装载:

$ sudo vim /etc/fstab

nfs.computingforgeeks.com:/home               /mnt/home      nfs fsc,auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

装载后,使用以下命令验证:

cd /var/cache/fscache

ls -Z

样本输出:

system_u:object_r:cachefiles_var_t:s0 cache

system_u:object_r:cachefiles_var_t:s0 graveyard

检查各个NFS共享的状态:

$ cat /proc/fs/nfsfs/servers

在Linux上安装和使用FS-Cache缓存NFS共享数据

检查NFS共享卷的状态:

$ cat /proc/fs/nfsfs/volumes

在Linux上安装和使用FS-Cache缓存NFS共享数据

测试FS-Cache设置

为了测试FS-Cache是否正常工作,我们将尝试将文件从共享复制到本地驱动器。使用FS-Cache配置,我们将运行复制命令两次,并检查所花费的时间:

##第一次

time cp /path/to/nfs/mnt/point/bigfile.gz /tmp

##这应该会加快,因为bigfile.gz现在在缓存中

time cp /path/to/nfs/mnt/point/bigfile.gz /dev/null

例如:

time cp /mnt/home/admin/Downloads/docker-desktop-4.9.1-amd64.deb  /tmp

重复将文件复制到另一个位置,并检查这次所花费的时间:

time cp /mnt/home/admin/Downloads/docker-desktop-4.9.1-amd64.deb /dev/null

样本输出:

在Linux上安装和使用FS-Cache缓存NFS共享数据

从上面的输出中,我们可以一致认为,自从文件缓存发生以来,复制命令第二次运行得更快。这标志着本文关于如何在Linux上使用FS-Cache缓存NFS共享数据的结束。

栏目相关文章