5

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

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

但是,在使用noac挂载选项时,访问者端访问内容会有2-5秒的延迟,这是完全不能接受的。

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

4

2 回答 2

2

我使用 NFS 参数cto结合 apache 指令EnableMMAP OffEnableSendFile Off. 该noac参数的症状与您所写的相同。

于 2012-05-19T14:16:00.940 回答
2

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

备注:

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

于 2011-09-27T20:27:54.280 回答