NFS 日志损坏

NFS 日志损坏

我们有多个 WebSphere 应用服务器,记录到中央 NFS 安装。应用服务器和 NFS 服务器都在 VMWare 中运行,应用服务器是 RHEL 5,NFS 服务器是 Ubuntu 8.04。所有服务器至少都通过千兆以太网连接。我们遇到了日志的随机损坏,其中会有大量空白。我们过去直接安装到 NetApp 服务器,但迁移到此设置。NetApp 没有这个问题。

在 NFS 服务器上,我设置了以下 sysctl 命令:

sysctl -w net.ipv4.tcp_wmem="4096 87380 8388608"
sysctl -w net.ipv4.tcp_rmem="4096 87380 8388608"
sysctl -w net.ipv4.tcp_sack=0
sysctl -w net.ipv4.tcp_dsack=0
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
sysctl -w net.ipv4.tcp_synack_retries=3
sysctl -w net.ipv4.tcp_retries2=5

使用 /etc/exports 中的以下命令导出文件系统:

/srv/export/logs        192.168.0.0/255.255.255.0(rw,no_root_squash,no_all_squash,sync,no_subtree_check)

并使用此命令在应用服务器上安装:

mount -t nfs -o rsize=8192,wsize=8192 192.168.0.1:/srv/export/logs /webspherelogs/

答案1

我不确定是否有足够的信息来回答这个问题。您是否尝试过将大量数据从各个服务器写入 NFS 挂载,这些文件是否出现损坏?如果没有,这可能是 Websphere 特有的问题或 Websphere 和 NFS 之间的交互。也许是它将数据写入日志文件的方式出了问题……

无论如何,如果可能的话,我都不建议将日志记录到 NFS 挂载,使用集中式 syslog-ng 守护进程并通过本地 syslog 守护进程通过 tcp 进行日志记录会更好。一般来说,这将是一个更灵活的解决方案,允许更大的冗余度并消除 NFS 固有的大量复杂性。

如果这种架构上的改变不可能实现,那么在将 Websphere 纳入考虑范围之前,我会首先排除 NFS 服务器本身。

答案2

当两个应用程序将日志记录到同一个文件时,我们遇到了类似的行为。尤其是当一个应用程序滚动日志文件而另一个应用程序尝试写入日志文件时,它们可能会混淆文件中的位置。

因此,请确保每个文件只有一个进程写入。还要避免一个进程内的两个不同线程直接写入文件。如果两个应用程序写入同一个文件,那只会带来麻烦。

相关内容