我有两个 VPS - 一个运行 2008 Server R2,另一个安装的是 Ubuntu 12.04。我使用 Windows VPS 进行 Quickbooks 和其他几个应用程序的 RD 会话,并使用 Ubuntu VPS 作为 NFS 文件存储和 OpenVPN 端点。问题是通过 VPN 的 NFS 性能非常糟糕,我的意思是它经常无法连接并且经常超时。
如果我在隧道外设置 NFS,性能还可以...不是很好但可以管理,所以我知道它是 VPN 隧道。
有没有什么针对 openvpn 或 NFS 的调整可以让我尝试一下以提高性能?
答案1
我曾在 ADSL 连接上使用 openvpn 尝试过 NFS 配置,也尝试过不同的 NFS 挂载选项,您可以在此处找到完整的帖子: 通过 ADSL(或慢速连接)上的 OpenVPN 实现 NFS
我在这里引用有趣的部分:我读过很多帖子,也尝试过建议的解决方案的合理子集,这是最好的技巧的总结:
- 使用小于 MTU 大小的 NFS 数据包大小(默认值为 8Kbytes,新值应小于 1500bytes,很少有人建议使用 1024bytes)
- 使用 NFS TCP 连接类型;不要在 ADSL/WAN 上使用 UDP
- 使用 NFS 异步选项
- 不要设置非常小的超时时间,保留默认的 60 秒(timeo=600)或.. 我也尝试过成功设置 10 秒(timeo=100)
- 有了硬挂载选项,让我们添加 intr 选项
对于 Linux 用户,这里有一个软挂载的小型 fstab 配置示例:
servername:/shared/ /mnt/foldername/ nfs rw,suid,dev,soft,exec,nouser,async,noauto,timeo=100,user,rsize=1024,wsize=1024,tcp 0 0
下面是硬安装:
rw,suid,dev,intr,exec,nouser,async,noauto,timeo=100,user,rsize=1024,wsize=1024,tcp 0 0
通过 vpn+adsl 的 NFS 仍然非常慢(目前我以大约 150 KB/秒的速度传输文件,这比没有提议的更改要好得多)。请考虑一下我的 7Mbit ADSL 的下载带宽为 800KB/秒。
PS:我稍后也会检查 openvpn 碎片,谢谢分享。希望我的发现也能有用。
PS2:这些技巧在我的环境中非常有效,并且我从不同的人那里得到了两个积极的反馈。
答案2
我做了所有调整以通过 ipsec 链接获得最佳 NFS 性能,“ls /mnt/remote1/etc”仍然需要 12.5 秒。(我距离 280 毫秒,13Mbps/2Mbps 是我最慢的链接)
经过一番搜索,我不断发现 WebDAV 可以作为替代方案。我在客户端上使用带有 webdav 和 davfs2 的 Apache 来挂载共享。使用此设置,ls 从 12.5 秒缩短到 1.5 秒,并且我获得了 10Mbps 的下载速度。现在非常实用。
如果您想要 root 访问权限,则需要使用“CFLAGS=-DBIG_SECURITY_HOLE”构建 apache。这对我来说没问题,因为所有用户都具有 root 访问权限,而且我也只通过 ipsec 隧道为 webdav 提供服务。
答案3
可以尝试以下几件事:
查看 OpenVPN 中的以下选项:fragment、mssfix、link-mtu。基本上,所有与数据包大小和碎片化有关的选项。太小的 VPN 数据包可能会通过分割 NFS 数据包而降低性能。另一方面,太大的 VPN 数据包可能会降低性能,因为某些路由器无法很好地处理它们。在这里很难得出一个简单的一般规则。
尝试在 OpenVPN 上启用/禁用压缩并观察这对性能有何影响。
确保您的 VPN 服务器使用 UDP 进行传输,而不是 TCP。
在 NFS 客户端,查看选项:retrans、rsize、wsize - 或与数据包大小和错误处理相关的任何其他选项。根据您的情况,较小的数据包大小实际上可能会提高性能(在 LAN 上,情况通常相反)。
对于此类问题,没有万无一失的答案,但问题很可能出在上述领域。
答案4
Fabiano Tarlao 给出的这些建议非常有用: https://thegoodcodeinn.blogspot.be/2015/06/nfs-over-openvpn-over-adslor-slow.html?showComment=1488621905080#c2984550821264645538
我在 Casper Netboot 上通过 OpenVPN 站点到站点隧道使用了这个内核参数:
NFSOPTS=tcp,intr,timeo=100,rsize=1024,wsize=1024