我正在使用 NFS 客户端连接到 NFS 集群。我注意到,当服务器不可用时,默认行为是重试来自同一源 TCP 端口的 TCP 连接,我已通过 tcpdump 确认了这一点(许多 SYN 数据包,不同的序列号,但相同的源端口)。默认情况下,NFS 使用特权端口 (<1024),在我的示例中为端口 940。
由于某种原因,这会导致 Azure 负载均衡器(我的其他负载均衡器)出现问题问题)。但是,当我使用选项挂载共享noresvport
(并使用 导出insecure
)时,NFS 客户端使用端口 >1024,现在每次重新连接尝试都将来自不同的 TCP 端口。
NFS 客户端是 SLES12 SP4,Oracle Linux 7.7 上也有相同的行为。
NFS服务器是基于SLES12 SP4的HAE集群。
这种行为是否记录在某处?为什么默认情况下每次都使用相同的端口,但使用时却不使用noresvport
?
答案1
我们遇到过这种情况,中间有一个 L4(f5、防火墙、安全设备)设备,没有断开连接,并且当 SYN 来自同一源端口时,它仍然存在于连接表中。客户端永远不会随机化源端口并保持连接表条目处于活动状态。
通常发生在 NFS 服务器崩溃并且没有 RST 发送到主机时。我们的人使用硬链接作为 rooteq 来处理所有事情,并想知道为什么他们总是遇到问题。