欢迎 on it road

解决方案

当两个或者多个以太网接口连接到同一子网或者 iSCSI 连接配置为使用任何特定接口时,可能会出现此问题。
在这种情况下,当数据包被传送到错误的接口时,操作系统会认为它被发送到关闭的端口或者错误的目的地并超时。
为了解决此问题,我们需要配置为在收到此错误消息的 iSCSI 客户端的两个接口上接受非对称路由的数据包:

  1. 设置sysctl的net.ipv4.conf.all.arp_ignore为1,强制每个接口只响应自己地址的ARP请求。
    或者,对于作为 iscsi 存储路径的每个接口,将 net.ipv4.conf.[INTERFACE].arp_ignore 设置为 1.

例如,在 /etc/sysctl.conf 中:

# vi /etc/sysctl.conf
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

或者,只为相关接口设置它(假设它们是 eth0 和 eth1):

# vi /etc/sysctl.conf
net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce=2
net.ipv4.conf.eth1.rp_filter=0
net.ipv4.conf.eth1.arp_ignore = 1
net.ipv4.conf.eth1.arp_announce=2
  1. 使用以下命令应用设置:
# sysctl -p /etc/sysctl.conf
  1. 检查新设置应用是否成功运行:
# sysctl -a
  1. 现在,从 /var/lib/iscsi/ifaces 中删除旧文件:
# rm -rf /var/lib/iscsi/ifaces

当配置两个接口时,这应该解决 iscsi 发现超时。

对于 CentOS/RHEL 7

请注意,如果系统安装了 CentOS/RHEL 7,那么请在 /etc/sysctl.d/99-sysctl.conf 文件中输入上面的 sysctl 参数,然后运行以下命令从配置文件中重新读取设置:

# sysctl --system

问题

当两个接口都启动时,iscsiadm 发现超时,但它在单个接口启动时工作正常。

# iscsiadm -m discovery -t st -p x.x.x.x
iscsiadm: connect to x.x.x.x timed out
iscsiadm: connect to x.x.x.x timed out

说明

如果 iSCSI 连接配置为使用特定网络接口,则可能会出现此问题。
如果 iscsi 数据包被传送到错误的接口,Linux 会像数据被发送到一个关闭的端口一样响应并发送一个 RST 数据包。
只要接收到的数据来自错误的接口,连接就会保持断开并且无法恢复。

当多个适配器连接到同一子网时,可能会发生这种情况。
默认情况下,Linux 将回答针对系统任何 IP 地址的所有 ARP 请求,而不管 ARP 请求来自哪个接口。
如果不同的接口响应 iSCSI 连接的 IP 地址的 ARP 请求,流量将被路由到错误的接口并且连接将失败。
打开 arp_ignore 会强制网络接口只响应其自身地址的 ARP 请求。
这可以防止来自错误接口的 ARP 应答并保持 iSCSI 连接正常运行。

CentOS/RHEL 中有两个或者多个网络接口时,“iscsiadm”发现超时
日期:2020-09-17 00:14:01 来源:oir作者:oir