Cachefiled
NFS不同共享客户端间的数据不同步
问题现象
当您用台ECS挂载同一个NFS文件系统,在ECS-A上append写文件,在ECS-B用tail -f观察文件内容的变化。在ECS-A写完之后,在ECS-B看到文件内容变化会有10-30秒的延时。然而相同的场景下,如果直接在ECS-B上打开文件(比如vi)却是立即可以看到更新的内容的。
原因
该现象与mount的选项以及tail -f实现相关。
用户使用的mount命令为:mount -t nfs4 /mnt/
对于在ECS-B上以这一方式NFS mount的文件系统,默认情况下kernel对文件和目录的属性维护了一份metadata缓存,文件和目录属性(包括许可权、大小、和时间戳记)缓存的目的是减少 NFSPROC_GETATTR 远程过程调用(RPC)的需求。
tail -f 的实现是sleep+fstat来观察文件属性(主要是文件大小)的变化,然后读入文件并输出。可见,tail -f是否能实时输出文件内容主要取决于fstat的结果,由于metadata cache的存在,fstat轮询到的并不是实时的文件属性。因此,即使在NFS服务器端文件已经更新了,但tail -f却没法知道文件已经改动了,于是输出就会出现延时。
解决方法
使用mount 的noac选项可以disable文件和目录属性的缓存。
mount -t nfs4 -o noac /mnt/
---------------------------------------------------------------------------------------------------------------
1.cachefiled介绍
FS-Cache 是指在文件系统和缓存之间的接口。 CacheFS 指的则是FS-cache的缓存后端。CacheFS做实际的数据存储和检索处理,并使用块设备的分区。
NFS,AFS等netfs因为受网络的影响,使得对数据访问和存储的实时性就有了一定的挑战,CacheFS(FS-cache缓存后端即客户端)可解决响应实效的问题 ,用于提供分布式文件系统的本地缓存.
cachefiled在2.6.30内核中,已作为内核的一部分。已支持NFS和AFS文件系统。
加载fscache模块:
modprobe -v fscache
确认nfs-utils的版本,cgslv4默认版本为1.2.2-7
[root@localhost ~]# rpm -qa |grep nfs-utils
nfs-utils-1.2.2-7.el6.x86_64
3.配置cachefiled
修改/etc/cachefilesd.conf文件
vi /etc/cachefilesd.conf
dir /var/cache/fscache
tag mycache
culltable 15
brun 20%
bcull 10%
bstop 5%
frun 20%
fcull 10%
fstop 5%
dir参数用于配置本地缓存目录。
tag参数用于指定一个FS-Cache的标签区分使用多个缓存
culltable参数用于设置缓存的等级,数字越大缓存的命中率越高,占有内存也越多。有效参数值在12-20之间。
brun,frun参数作用:如果剩余空间或缓存文件数量超过限制值,不会释放已使用缓存的空间
bcull,fcullp参数作用:如果剩余空间或缓存文件数量低于限制值,将停止写入缓存,并释放已经缓存的空间(释放最近比较少使用缓存对象。)
bstop,fstop3参数作用:如果剩余空间或文件数量低于限制值,将缓存停止,并释放至比brun,frun限制或更高才能重新工作。
必须满足:
0 <= bstop < bcull < brun < 100
0 <= fstop < fcull < frun < 100
配置文件完成后,执行/etc/init.d/cachefilesd start 启动cachefiled服务(建议关闭selinux,否则有可能导致cachefiled无法启动)
把cachefiled设置为开机启动:
chkconfig cachefiledsd on
4.测试缓存
nfs客户端挂载网络nfs共享盘符到本地,必须使用-o fsc参数,netfs挂载后,缓存并不会自动开始工作,只有发生了读或者写的操作后,缓存才会工作。cachefiled只支持小文件的缓存。
挂载命令:
mount -t nfs 172.16.100.127:/mnt /nfs -o fsc
可使用vi命令修改netfs中的文件,并检查/var/fscache/cache目录下是否生成@4a的类似文件,如存在表示缓存功能已经激活。
[root@localhost cache]# ls
@4a
如出现问题可查看分析/var/log/messages日志。
参考资料:https://www.cyberciti.biz/faq/centos-redhat-install-configure-cachefilesd-for-nfs/
Cachefiled的更多相关文章
- iOS-ASIHTTPRequest缓存机制
第三方网络请求库 * 我们在对网络请求的时候,可以使用系统为我们提供的NSURLRequest和NSURLConnection,它基本能实现我们的基本功能. * 但是有时我们使用第三方封装的库,可以轻 ...
随机推荐
- IPv6调用java后端接口报错:java.net.SocketException: Protocol family unavailable
目前需求是java后端的接口需要支持IPv6.先确认linux机器已经绑定了IPv6: CMREAD-SV43 apache-tomcat/bin> ifconfig eth0 Link enc ...
- 实际用户ID和有效用户ID (二)
看UNIX相关的书时经常能遇到这几个概念,但一直没有好好去理清这几个概念,以致对这几个概念一直一知半解.今天好好区分了一下这几个概念并总结如下.说白了这几个UID引出都是为了系统的权限管理. 下面分别 ...
- make dep
在配置好内核后就是编译内核了,在编译之前首先应该执行make dep命令建立好依赖关系,该命令将会修改linux中每个子目录下的.depend文件,该文件包含了该目录下每个目标文件所需要的头文件(绝对 ...
- WPF Demo1
<Window x:Class="Demo1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/ ...
- Gradle Build速度加快终极方法(android studio)
Android Studio用起来越来越顺手,但是却发现Build的速度实在不敢恭维,在google和度娘了几把(....)之后,大体就是分配更高的内存,步骤:Setting-->搜索gradl ...
- zclip复制到剪切板插件有个bug
今天发现zclip复制到剪切板插件有个bug,就是在遨游和360浏览器的兼容模式下,点击复制没响应,后来我看了页面代码,发现在这两个浏览器的兼容模式下,生成的是<object>,其他浏览器 ...
- OSPF里几个特殊区域(stub、Totally stubby、NSSA、Totally NSSA)总结
网友总结: 简单的说,就是 stub过滤4,5类lsa,ABR会产生缺省的3类lsa,区域内不能引入外部路由 total stub过滤3,4,5类lsa,ABR会产生缺省的3类lsa,区域内不能引入外 ...
- Web安全测试指南--会话管理
会话复杂度: 5.3.2.会话预测: 5.3.3.会话定置: 5.3.4.CSRF: 5.3.5.会话注销: 5.3.6.会话超时:
- REST 风格
- 图文并茂 RAID 技术全解 – RAID0、RAID1、RAID5、RAID100
RAID 技术相信大家都有接触过,尤其是服务器运维人员,RAID 概念很多,有时候会概念混淆.这篇文章为网络转载,写得相当不错,它对 RAID 技术的概念特征.基本原理.关键技术.各种等级和发展现状进 ...