我可以通过编程强制对文件所做的更改传播到所有 NFS 客户端吗?

发布于 2024-12-06 23:59:10 字数 423 浏览 0 评论 0原文

我有一个用 PHP 构建的 CMS,它在磁盘上的文件中存储页面列表、页面导航结构和页面内容。该应用程序托管在 haproxy 服务器后面的 Apache/php-fpm 服务器集群上。这些服务器通过 NFS 从中央文件服务器挂载 Apache DocumentRoot 目录,因此 CMS 所做的所有更改都会写入 NFS 共享上的文件。

我发现,除非我使用 noac 选项挂载 NFS 共享,否则所做的更改可能需要 5-10 秒才能传播到集群中的所有服务器;这意味着当快速连续进行多个更改时,最终的更改有时会覆盖早期的更改,因为最终的更改可能会发送到尚未收到早期更改的服务器。

然而,当使用 noac 挂载选项时,访问者端访问内容会出现 2-5 秒的延迟,这是完全不可接受的。

有没有办法以编程方式强制将 NFS 共享上的文件更改传播到所有客户端,或者导致所有客户端刷新该文件的缓存?

I have a CMS built in PHP which stores the list of pages, page navigation structure, and the content of pages in files on disk. This application is hosted on a cluster of Apache/php-fpm servers which are behind a haproxy server. These servers mount the Apache DocumentRoot directory via NFS from a central file server, so all the changes made from the CMS get written to files on the NFS share.

I have found that, unless I mount the NFS share with the noac option, changes made may take up to 5-10 seconds to propagate to all servers in the cluster; meaning when multiple changes are made in rapid succession, the final change sometimes overwrites the earlier changes because the final change may go to a server which has not received the earlier changes yet.

However, when using the noac mount option, there's a 2-5 second delay in accessing the content on the visitor side, which is completely unacceptable.

Is there a way to programmatically force changes to a file on an NFS share to propigate to all clients, or to cause all clients to flush their cache of that file?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

仅此而已 2024-12-13 23:59:10

我使用 NFS 参数 cto 结合 apache 指令 EnableMMAP OffEnableSendFile Off 解决了同样的问题。 noac 参数具有与您所写的相同的症状。

I solved the same issue with NFS parameter cto in combination with apache directives EnableMMAP Off and EnableSendFile Off. the noac parameter had the same symptoms you wrote about.

凉风有信 2024-12-13 23:59:10

我不知道有任何 NFS 级别的选项可以实现您想要的效果,但是如果访问这些文件的应用程序在您的控制之下,那么您可以使用 O_DIRECT 选项打开每个文件 - 这会绕过任何本地文件以这种方式打开的任何文件的 NFS 缓存...

备注:

您写道 noac 导致 2-5 秒的延迟..这似乎指向网络和/或存储级问题或“远到”一个目录中的许多文件/目录”...

I don't know of any NFS-level option to achieve what you want BUT if the applications accessing those files are under your control then you can make every file open use the O_DIRECT option - this bypasses any local NFS cache for any file opened this way...

A remark:

You write that noac leads to a delay of 2-5 seconds.. this seems to point to a network- and/or storage-level problem or to "far to many files/directories within one directory"...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文