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/?
?
轉載于:https://www.cnblogs.com/wjoyxt/p/4563080.html
總結
以上是生活随笔為你收集整理的Cachefiled的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教育管理系统——android家长客户端
- 下一篇: 表单-登陆框