我们将多个 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/
我不确定是否有足够的信息来回答这个问题。您是否尝试过将大量数据从各种服务器写入 NFS 挂载,这些文件是否显示损坏?如果不是,这可能是 websphere 特定问题或 websphere 和 NFS 之间的交互。可能是它将数据写入日志文件的方式......
无论哪种方式,如果可能的话,我都不建议登录到 NFS 挂载,使用集中式 syslog-ng 守护程序通过本地 syslog 守护程序登录 tcp 会更好。一般来说,这将是一个更灵活的解决方案,将允许更大的冗余并消除 NFS 中固有的许多复杂性。
如果这种架构更改是不可能的,那么我将首先排除 NFS 服务器本身,然后再将 Websphere 纳入等式。
当两个应用程序登录到同一个文件时,我们有类似的行为。特别是如果一个应用程序滚动日志文件,而另一个应用程序尝试写入日志文件,则可能会发生它们在文件中的位置混淆。
因此,请确保只有一个进程写入每个文件。还要避免一个进程中的两个不同线程直接写入文件。如果两个应用程序写入同一个文件,它只会带来麻烦。