是否有一条命令将强制Linux刷新NFS共享上一个文件的缓存?


14

StackOverflow上的这个问题有关,我想知道是否有一种方法可以刷新NFS缓存/强制Linux查看NFS共享上文件的最新副本。

我遇到一种情况,其中四台Apache服务器通过NFS挂载相同的目录,当一台服务器对文件进行更改时,其他服务器需要大约5到10秒才能看到该更改。如果在此窗口中对该文件进行了第二次更改,则它可能会覆盖第一个更改。

fstab文件系统的条目是:

172.16.1.15:/home               /media/home     nfs     vers=3,defaults,noauto,sync,acregmin=1          0       0

是否有一条命令将强制Linux刷新NFS共享上一个文件的缓存?


您使用哪种apache缓存机制?
2011年

@usermane:我没有使用Apache缓存机制。有问题的文件是PHP文件,当在一台主机上对其进行修改时,其他主机几秒钟都看不到更改。
乔什(Josh)

Answers:


12

检查以下项目,看是否有适合您的工作:

  1. 在客户端上,如果尚未使用NFS文件系统行cto的“ 选项”列中的选项/etc/fstab,请添加它。 cto告诉nfs客户端通过close-to-open打开文件,这使它们在打开文件时都会刷新文件。

  2. 在服务器上,确保使用sync选项而不是选项导出文件系统async。使用同步写入,关闭文件时客户端将刷新到磁盘。(或在进行commit()时使用nfs V3)。这样可能会对性能造成影响,但是如果您要对NFS文件系统进行写操作,则肯定要进行sync设置。

  3. 紧随该stackoverflow帖子之后,仅当内核使用CONFIG_NFS_DIRECTIO编译时,使用O_DIRECT打开文件才有效。

  4. 另外,请确保您在httpd.conf文件中具有以下设置:

    • EnableMMAP off
    • EnableSendfile off

    从apache性能调整文档中:

    • 如果对位于NFS挂载的文件系统上的文件进行内存映射,而另一台NFS客户端计算机上的进程删除或截断该文件,则下次尝试访问映射的文件内容时,进程可能会遇到总线错误。
    • 关闭EnableSendfile不会特别有助于NFS的同步/异步行为,但是如果您将apache与NFS一起使用,则需要将其关闭。

谢谢!这些都是很棒的建议。我不在cto客户端上使用,我会尝试的。我既sync没有async服务器也没有服务器;我刚刚补充syncO_DIRECT并没有帮助我,因为实际上是PHP正在读取这些文件,并且无法O_DIRECT以我能找到的任何方式打开它们。
乔什(Josh)

@Josh,它解决了您的问题吗?我们在同一问题上受阻!你能更新这个帖子吗?
rafa.ferreira 2014年

3

在给定的过程中,在文件的父目录上调用opendir和closedir会使NFS缓存无效。我在编写作业调度程序时使用了它。非常非常有帮助。尝试一下!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.