

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 对 I/O 错误和 NFS 锁回收失败进行故障排除
<a name="nfs-failover-issues"></a>

本节介绍了 ONTAP 文件系统的故障转移事件期间与 I/O 错误和 NFS 锁回收失败有关的问题，以及每个问题的解决方案。 FSx 

## 在故障转移事件期间您遇到了 I/O 错误
<a name="io-errors-during-failover"></a>

在 FSx ONTAP 单可用区文件系统的故障转移开启期间，NFS 客户端可能会遇到暂时错误或长时间暂 I/O 停。对于 NFSv4 \+ 客户端，您可能会看到内核日志消息，例如：

```
NFS: __nfs4_reclaim_open_state: Lock reclaim failed!
```

这些消息表明，在故障转移窗口期间，客户端无法成功收回 NFS 锁。

**减少故障转移事件期间的 I/O 错误**  
在 Linux 上，您可以在客户端上配置网络设置，将故障转移检测时间从 55-60 秒缩短到 15-20 秒。

**重要**  
务必先在非生产环境中测试这些配置。这些设置会增加地址解析协议 (ARP) 流量，该协议用于将 IP 地址映射到本地网络上的物理 (MAC) 地址，可能不适合网络受限的环境。

**为 NFS 客户端配置优化的网络设置**

1. 在每个 NFS 客户端上创建一个 sysctl 配置文件。以下示例用于`default`将设置应用于所有网络接口。如果您的实例有多个网络接口，则可以`default`替换为用于连接您的 for ONTAP 单可用区文件系统的特定接口名称（例如`eth0`或`ens5`）： FSx 

   ```
   $ sudo tee /etc/sysctl.d/99-fsx-failover.conf > /dev/null << 'EOF'
   # NFS client optimizations for faster failover detection
   # Replace 'default' with your interface name (e.g., eth0, ens5) to target a specific interface
   net.ipv4.neigh.default.base_reachable_time_ms=5000
   net.ipv4.neigh.default.delay_first_probe_time=1
   net.ipv4.neigh.default.ucast_solicit=0
   net.ipv4.tcp_syn_retries=3
   EOF
   ```

1. 立即应用设置：

   ```
   $ sudo sysctl -p /etc/sysctl.d/99-fsx-failover.conf
   ```

1. 验证配置是否处于活动状态。如果您使用了`default`，则可以使用以下命令进行验证。如果您指定了特定的接口，请`default`用您的接口名称替换（例如，`eth0`或`ens5`）：

   ```
   $ sysctl net.ipv4.neigh.default.base_reachable_time_ms
   $ sysctl net.ipv4.neigh.default.delay_first_probe_time
   $ sysctl net.ipv4.neigh.default.ucast_solicit
   $ sysctl net.ipv4.tcp_syn_retries
   ```

确保在同一可用区内连接到您 FSx 的 for ONTAP 文件系统的所有 NFS 客户端上一致地应用这些设置。使用这些网络优化时，请记住以下几点：
+ **base\_reachable\_time\_ms=5000** — 将 ARP 缓存条目的有效期从 30 秒缩短到 5 秒，使客户端能够在故障转移事件期间更快地检测 IP 所有权的变化。
+ **delay\_first\_probe\_time=1** — 将探测陈旧网络条目之前的延迟从 5 秒缩短到 1 秒。
+ **ucast\_solicit=0** — 跳过单播邻居探测器并立即发出广播 ARP 请求，从而加快对活动文件服务器的重新发现。
+ **tcp\_syn\_retries=3** — 将 TCP 连接重试持续时间从 127 秒缩短到 15 秒。

网络设置完成后，您应监控环境以验证更改。您可以通过修改文件系统的吞吐容量来测试故障转移事件。有关更多信息，请参阅 [在文件系统上测试失效转移](high-availability-AZ.md#testing-failover)。

**应用更改后监控您的环境**  

+ **监控系统日志中是否有 NFS 错误**，以查看 NFS 相关的内核日志消息。

  ```
  $ sudo journalctl -f | grep -i nfs
  ```

  确认出现的消息次数是否较少，例如。`Lock reclaim failed`
+ **监控应用程序日志**，以确认在故障转移事件期间减少 I/O 超时、连接错误和重试相关故障。
+ **验证网络影响**，确保增加的 ARP 流量不会对环境中的网络性能产生不利影响。

## NFSv4 环境的替代方法
<a name="nfsv4-alternative-approaches"></a>

在无法修改客户端配置的 NFSv4 环境中，请考虑以下替代方案：
+ **延长 NFSv4 租赁超时时间。**请与您的存储管理员合作，延长 NFSv4 租赁超时时间。延长这些超时时间可以让客户端有更多时间在故障转移事件期间回收锁定。有关更多信息，请参阅NetApp ONTAP文档[中的指定 NFSv4 锁定宽限期](https://docs.netapp.com/us-en/ontap/nfs-admin/specify-nfsv4-locking-grace-period-task.html)。