Cachefiled
NFS不同共享客戶端間的數(shù)據(jù)不同步
問(wèn)題現(xiàn)象
當(dāng)您用臺(tái)ECS掛載同一個(gè)NFS文件系統(tǒng),在ECS-A上append寫文件,在ECS-B用tail -f觀察文件內(nèi)容的變化。在ECS-A寫完之后,在ECS-B看到文件內(nèi)容變化會(huì)有10-30秒的延時(shí)。然而相同的場(chǎng)景下,如果直接在ECS-B上打開文件(比如vi)卻是立即可以看到更新的內(nèi)容的。
原因
該現(xiàn)象與mount的選項(xiàng)以及tail -f實(shí)現(xiàn)相關(guān)。
用戶使用的mount命令為:mount -t nfs4 /mnt/
對(duì)于在ECS-B上以這一方式NFS mount的文件系統(tǒng),默認(rèn)情況下kernel對(duì)文件和目錄的屬性維護(hù)了一份metadata緩存,文件和目錄屬性(包括許可權(quán)、大小、和時(shí)間戳記)緩存的目的是減少 NFSPROC_GETATTR 遠(yuǎn)程過(guò)程調(diào)用(RPC)的需求。
tail -f 的實(shí)現(xiàn)是sleep+fstat來(lái)觀察文件屬性(主要是文件大小)的變化,然后讀入文件并輸出。可見,tail -f是否能實(shí)時(shí)輸出文件內(nèi)容主要取決于fstat的結(jié)果,由于metadata cache的存在,fstat輪詢到的并不是實(shí)時(shí)的文件屬性。因此,即使在NFS服務(wù)器端文件已經(jīng)更新了,但tail -f卻沒法知道文件已經(jīng)改動(dòng)了,于是輸出就會(huì)出現(xiàn)延時(shí)。
解決方法
使用mount 的noac選項(xiàng)可以disable文件和目錄屬性的緩存。
mount -t nfs4 -o noac /mnt/
---------------------------------------------------------------------------------------------------------------
1.cachefiled介紹
?? FS-Cache?是指在文件系統(tǒng)和緩存之間的接口。??CacheFS?指的則是FS-cache的緩存后端。CacheFS做實(shí)際的數(shù)據(jù)存儲(chǔ)和檢索處理,并使用塊設(shè)備的分區(qū)。
?? NFS,AFS等netfs因?yàn)槭芫W(wǎng)絡(luò)的影響,使得對(duì)數(shù)據(jù)訪問(wèn)和存儲(chǔ)的實(shí)時(shí)性就有了一定的挑戰(zhàn),CacheFS(FS-cache緩存后端即客戶端)可解決響應(yīng)實(shí)效的問(wèn)題?,用于提供分布式文件系統(tǒng)的本地緩存.
? ?cachefiled在2.6.30內(nèi)核中,已作為內(nèi)核的一部分。已支持NFS和AFS文件系統(tǒng)。
?
加載fscache模塊:
modprobe -v fscache
?
確認(rèn)nfs-utils的版本,cgslv4默認(rèn)版本為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參數(shù)用于配置本地緩存目錄。
tag參數(shù)用于指定一個(gè)FS-Cache的標(biāo)簽區(qū)分使用多個(gè)緩存
culltable參數(shù)用于設(shè)置緩存的等級(jí),數(shù)字越大緩存的命中率越高,占有內(nèi)存也越多。有效參數(shù)值在12-20之間。
?
brun,frun參數(shù)作用:如果剩余空間或緩存文件數(shù)量超過(guò)限制值,不會(huì)釋放已使用緩存的空間
bcull,fcullp參數(shù)作用:如果剩余空間或緩存文件數(shù)量低于限制值,將停止寫入緩存,并釋放已經(jīng)緩存的空間(釋放最近比較少使用緩存對(duì)象。)
bstop,fstop3參數(shù)作用:如果剩余空間或文件數(shù)量低于限制值,將緩存停止,并釋放至比brun,frun限制或更高才能重新工作。
必須滿足:
0 <= bstop < bcull < brun < 100
0 <= fstop < fcull < frun < 100
?
配置文件完成后,執(zhí)行/etc/init.d/cachefilesd start?啟動(dòng)cachefiled服務(wù)(建議關(guān)閉selinux,否則有可能導(dǎo)致cachefiled無(wú)法啟動(dòng))
?
把cachefiled設(shè)置為開機(jī)啟動(dòng):
chkconfig cachefiledsd on
4.測(cè)試緩存
nfs客戶端掛載網(wǎng)絡(luò)nfs共享盤符到本地,必須使用-o fsc參數(shù),netfs掛載后,緩存并不會(huì)自動(dòng)開始工作,只有發(fā)生了讀或者寫的操作后,緩存才會(huì)工作。cachefiled只支持小文件的緩存。
掛載命令:
mount -t nfs 172.16.100.127:/mnt /nfs -o fsc
?
可使用vi命令修改netfs中的文件,并檢查/var/fscache/cache目錄下是否生成@4a的類似文件,如存在表示緩存功能已經(jīng)激活。
[root@localhost cache]# ls
@4a
?
如出現(xiàn)問(wèn)題可查看分析/var/log/messages日志。
?
參考資料:https://www.cyberciti.biz/faq/centos-redhat-install-configure-cachefilesd-for-nfs/?
?
轉(zhuǎn)載于:https://www.cnblogs.com/wjoyxt/p/4563080.html
總結(jié)
以上是生活随笔為你收集整理的Cachefiled的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 教育管理系统——android家长客户端
- 下一篇: 表单-登陆框