我目前有 2 个 Web 服务器(CentOS 5.5),并且都在使用 GlusterFS 作为客户端/服务器,并使用自动文件复制。
对于两个网络服务器:
GlusterFS 挂载点是:
/mnt/glusterfs/site1
本地 GlusterFS 块是
/export/sdb1/glusterfs/site1
我正在使用绑定挂载指向 Apache 中的 GlusterFS 挂载:
/var/www/site -> /mnt/glusterfs/site1
动态页面(缓存页面本身不是一种选择)需要在呈现页面之前读取许多小文件,使用 GlusterFS 的性能至少比使用本地文件系统慢 5 倍,即本地 GlusterFS 块。
请注意,我正在使用该option read-subvolume
选项,以便从本地 GlusterFS 块读取文件,但我知道元数据是通过网络在另一块块上进行检查的,我认为这会减慢速度。
不幸的是,我无法让 Apache 使用本地 GlusterFS 块,因为 Apache 本身会进行一些写入。
由于/mnt/glusterfs/site1
和/export/sdb1/glusterfs/site1
实际上是相同的文件系统,Apache 有没有办法直接从本地块读取但写入 GlusterFS 挂载?
这将显著提高性能。
我知道 NFS、OCFS、GFS2、Lustre 和 DRBD,但如果可以做到上述操作,这将是最简单的解决方案。
也许是 Apache 指令、Apache 模块(甚至是自定义模块)甚至是系统级别的?
我将非常感激任何建议/评论/指导。
答案1
如果您直接写入,则不会通过 glusterfs 进行复制。如果您直接读取,则如果驱动器发生故障,则存在修复无法正常工作的风险。当您读取文件时,它会检查元数据,如果文件在本地不存在,则在驱动器联机时复制该文件,而不是复制文件系统。
如果这些文件是定期创建的,您可以将它们写入非分布式挂载并将其用于文件吗?
您可以做您想做的事情,但是,它可能会以一些非常奇怪的方式中断。一种情况是,如果您在一个节点上修改文件,另一个节点不知道元数据已更改,并且会读取旧文件。您可以访问 GlusterFS 邮件列表,它们非常有帮助。