我遇到了一个奇怪的 Windows 2008R2 集群相关问题,困扰着我。我觉得我已经接近问题所在,但仍然不完全了解正在发生的事情。
我有一个运行在两台 2008R2 服务器上的两节点交换 2007 集群。在“主要”集群节点上运行时,交换集群应用程序工作正常。将群集资源故障转移到辅助节点时会出现此问题。
当将集群故障转移到“辅助”节点时,例如与“主要”节点在同一子网上,故障转移最初工作正常,集群资源继续在新节点上工作几分钟。这意味着接收节点确实会发送一个更新网络上的 arp 表的免费 arp 回复数据包。但是在 x 时间(通常在 5 分钟内)之后,某些东西会再次更新 arp 表,因为集群服务突然不响应 ping。
所以基本上,当它在“主节点”上运行时,我开始对交换集群地址执行 ping 操作。它工作得很好。我将集群资源组故障转移到“辅助节点”,我只丢失了一个可以接受的 ping。群集资源在故障转移后仍会响应一段时间,并且突然 ping 开始超时。
这告诉我 arp 表最初是由辅助节点更新的,但随后(我还没有发现)错误地再次更新它,可能是主节点的 MAC。
为什么会发生这种情况 - 有没有人遇到过同样的问题?
群集未运行 NLB,故障转移回没有问题的主节点后,问题会立即停止。
每个节点都将 NIC 组合 (intel) 与 ALB 结合使用。就我而言,每个节点都在同一个子网上,并且具有网关等输入正确。
编辑:
我想知道它是否可能与网络绑定顺序有关?因为我注意到从节点到节点我能看到的唯一区别是在显示本地 arp 表时。在“主”节点上,arp 表是在作为源的集群地址上生成的。而在“辅助”上,它是从节点自己的网卡生成的。
对此有任何意见吗?
编辑:
好的,这里是连接布局。
集群地址:AB6.208/25 交易所申请地址:AB6.212/25
节点 A:3 个物理网卡。两个使用 intels 组合,地址为 AB6.210/25,称为 public 最后一个用于集群流量,称为 private,地址为 10.0.0.138/24
节点 B:3 个物理网卡。两个使用 intels 绑定,地址为 AB6.211/25,称为 public 最后一个用于集群流量,称为 private,地址为 10.0.0.139/24
每个节点位于连接在一起的独立数据中心。DC1 中的终端交换机为 cisco,DC2 中为 NEXUS 5000/2000。
编辑: …
我正在尝试设置需要在同一 IP 子网上具有接口但具有不同 VLAN 的服务器:
eth1.102 Link encap:Ethernet HWaddr 00:50:56:b1:00:0f
inet addr:10.1.1.6 Bcast:10.1.1.255 Mask:255.255.255.0
eth1.103 Link encap:Ethernet HWaddr 00:50:56:b1:00:0f
inet addr:10.1.1.12 Bcast:10.1.1.255 Mask:255.255.255.0
Run Code Online (Sandbox Code Playgroud)
我看到的问题是,当一个 ARP 请求来自一个子网上的设备时,服务器只响应一个接口上的 ARP,而似乎忽略另一个接口上的任何 ARP:
第一个界面:
# ping -I eth1.102 10.1.1.1
PING 10.1.1.1 (10.1.1.1) from 10.1.1.6 eth1.102: 56(84) bytes of data.
^C
--- 10.1.1.1 ping statistics ---
8 packets transmitted, 0 received, 100% packet loss, time 7008ms
Run Code Online (Sandbox Code Playgroud)
第二个界面:
# ping -I eth1.103 10.1.1.1
PING 10.1.1.1 (10.1.1.1) from 10.1.1.12 eth1.103: 56(84) bytes of data.
64 bytes from 10.1.1.1: …Run Code Online (Sandbox Code Playgroud) 我们有多个 VMWare ESX 服务器分布在我们公司中,执行各种任务。一台特定的 ESXi 主机表现出非常奇怪的行为。当我们的监控系统 (Orion) 通知我们它无法再 ping 盒子时,我们就会检测到它。
在跳转到相关访客的本地控制台后,我们看到它无法 ping 任何不在其 ARP 表中的新地址。
起初我们认为问题只是与我们的一位客人有关,因为问题似乎总是发生在另一位客人DevRedis 身上。然而,今天下午问题交换并开始发生在ApacheBox而不是DevRedis 上。
当我有幸发现问题时,我在连接的两端(一侧是 vmware,另一侧是物理网络服务器)运行了 tcpdump,并注意到以下事件过程:
有问题的 ESX 主机正在运行VMware ESXi、4.1.0、348481
两个来宾(DevRedis和ApacheBox)都运行 CentOS 6.3,但是它们运行两个单独的内核版本(2.6.32-279.9.1.el6.x86_64和2.6.32-279.el6.x86_64)所以我不是完全确定这是一个 CentOS 问题。
有没有人对可能导致这种情况的原因有任何想法?有没有人遇到过它?
我有一个服务器集群,全部连接在本地网络上(所有物理机,不是虚拟机)。当尝试从服务器 A ping 到 B 时,我得到一个Desitination Host Unreachable. 我可以从 B ping 到 A 没问题,然后我可以从 A ping 到 B 一小段时间。由于这种行为,我相信我有一个 ARP 问题,尽管我不知道如何解决它。运行时,arp -a我得到以下结果? (10.0.0.105) at <incomplete> on eth1,这是我尝试 ping 的 IP。不确定它是否有帮助,但这是我/etc/network/interfaces的两台机器的文件(我正在运行 Ubuntu 12.04 服务器)。
Server A
auto eth1
iface eth1 inet static
address 10.0.0.102
netmask 255.255.255.0
Server B
auto eth1
iface eth1 inet static
address 10.0.0.105
netmask 255.255.255.0
Run Code Online (Sandbox Code Playgroud)
其他每台服务器(我在这个网络中有 7 个)都可以 ping / 可以 ping 任何其他服务器。这只是两者之间的问题。任何帮助将不胜感激。
编辑
Server A
iptables --list
Chain INPUT …Run Code Online (Sandbox Code Playgroud) 我正在尝试为 Linux 内核 arp 缓存超时配置合理的值,但我找不到有关它们如何在任何地方工作的详细说明。即使 kernel.org 文档也没有给出很好的解释,我只能找到推荐值来缓解溢出。
这是我拥有的价值观的一个例子:
net.ipv4.neigh.default.gc_thresh1 = 128
net.ipv4.neigh.default.gc_thresh2 = 512
net.ipv4.neigh.default.gc_thresh3 = 1024
Run Code Online (Sandbox Code Playgroud)
现在,从我迄今为止收集到的:
gc_thresh1 是垃圾收集器开始删除任何条目之前允许的 arp 条目数。
gc_thresh2 是软限制,它是垃圾收集器主动删除 arp 条目之前允许的条目数。
gc_thresh3 是硬限制,高于此数字的条目将被积极删除。
现在,如果我理解正确的话,如果 arp 条目的数量超过 gc_thresh1 但仍低于 gc_thresh2,则超出部分将定期删除,间隔由 gc_interval 设置。
我的问题是,如果条目数超过 gc_thresh2 但低于 gc_thresh3,或者如果数量超过 gc_thresh3,如何删除条目?换句话说,“积极地”和“积极地”删除到底是什么意思?我认为这意味着它们比 gc_interval 中定义的更频繁地被删除,但我找不到多少。
如何查询 Linux 机器上的本地 ARP 缓存以查看上次学习和/或更新特定 ARP 条目的时间?
我们最近在我们的网络上设置了一个新的 Ubuntu 12.04LTS 服务器。它没有完全配置所以它没有做太多超出sshd和默认值apache2安装的。但今天晚上它似乎坠毁了。它没有响应网络或键盘。但最糟糕的是,它关闭了整个网络。
我对 OSI 第 3 层之下的网络堆栈的了解非常有限,所以其余的让我感到困惑。当这台机器物理连接到网络时,没有其他机器可以连接到外部互联网。当事情出问题时,运行arp显示我们网关的 IP 地址 ( 10.0.1.1) 被列为“无效”。将服务器从网络上拔下可以解决问题,然后重新插上又会破坏它。那么崩溃的服务器是在宣传自己拥有网关的 IP 地址吗?
有什么都在syslog期间,当这是造成问题的时间。关于如何找出出了什么问题或我们可以做些什么来防止它再次发生的任何想法?我什至犹豫是否现在将机器重新连接到网络上。
**** 更新 ****
它再次崩溃,我跑tcpdump -penn arp了几分钟(感谢巴哈马特!)并得到了这个......(删除了时间戳和重复的行)
00:1e:65:f8:dc:24 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Request who-has 10.0.1.1 tell 10.0.2.191, length 46
00:1e:65:f8:dc:24 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Request who-has 10.0.1.44 tell 10.0.2.191, length 46
60:d8:19:d4:71:d6 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Request who-has 10.0.1.1 tell 10.0.2.125, length 46
d4:9a:20:04:e9:78 …Run Code Online (Sandbox Code Playgroud) 将我们的开发团队从 7 升级到 Windows 10 后,我们遇到了 ARP 缓存问题,其中一台机器缓存了正确的 IP-MAC 映射,但由于在目标机器的电源循环期间连接失败,类型无效。在 Windows 10 上,但不是 Windows 7,在清除 ARP 缓存之前无法连接到目标计算机。我可以按如下方式重现该问题,其中 10.10.10.10 是正确的 IP 地址,01:23:45:67:89:AB 是相关目标机器的正确 MAC 地址:
从关闭目标机器的电源开始,并通过整个测试对其进行 ping:
ping -t 10.10.10.10
Run Code Online (Sandbox Code Playgroud)Ping 正在回复“请求超时”并且 ARP 缓存包含,正如预期的那样
10.10.10.10 00:00:00:00:00:00 invalid
Run Code Online (Sandbox Code Playgroud)
打开目标机器的电源。Ping 开始收到回复,并且 ARP 缓存更新为
10.10.10.10 01:23:45:67:89:AB dynamic
Run Code Online (Sandbox Code Playgroud)到现在为止还挺好。
关闭目标机器。Ping 开始报“Request timed out”,ARP 缓存依然存在
10.10.10.10 01:23:45:67:89:AB dynamic
Run Code Online (Sandbox Code Playgroud)大约40秒后,ping 1次请求回复“Destination host unreachable”,然后返回上报“Request timed out”,ARP缓存变为
10.10.10.10 01:23:45:67:89:AB invalid
Run Code Online (Sandbox Code Playgroud)打开目标机器的电源,在您清除 ARP 缓存或至少删除具有无效类型的正确 IP-MAC 映射的违规条目之前,ping(以及任何其他连接)将无法找到它。
考虑到开发环境中的目标机器在开发过程中确实需要重启电源,我该如何防止 ARP 缓存进入这种状态?手动操作 ARP 缓存是不可持续的,在迁移到 Windows 10 之前没有人报告过这个问题。
Windows 7 的功能正如人们所期望的那样,也就是说,我们想要的是:ARP 缓存经历与上述相同的阶段。Ping 在目标启动前回复“目标主机无法访问”,这与 Windows …
我有两台电脑在一个 WiFi 网络中:
有时(十次一次)在 B 重新启动后,我无法从 A 到 B:
$ ssh 192.168.201.128
ssh: connect to host 192.168.201.128 port 22: No route to host
Run Code Online (Sandbox Code Playgroud)
当我尝试 ping 它时,我得到:
$ ping 192.168.201.128
PING 192.168.201.128 (192.168.201.128) 56(84) bytes of data.
From 192.168.201.133 icmp_seq=1 Destination Host Unreachable
From 192.168.201.133 icmp_seq=2 Destination Host Unreachable
From 192.168.201.133 icmp_seq=3 Destination Host Unreachable
Run Code Online (Sandbox Code Playgroud)
ARP 可能是问题所在:
$ arp
Address HWtype HWaddress Flags Mask Iface
_gateway ether 70:4c:a5:a7:c2:57 C wlp2s0
192.168.201.128 (incomplete) wlp2s0
Run Code Online (Sandbox Code Playgroud)
我试图像这样修复它:
$ sudo arp -d 192.168.201.128 …Run Code Online (Sandbox Code Playgroud) 在我们的系统中,三台主机都连接到同一个以太网交换机,如下图所示:
A (192.168.0.21, WIN10_1809) <-> Switch <-> B (192.168.0.100, Debian Linux 9)
^
|
C (192.168.0.201, WIN10_1809)
Run Code Online (Sandbox Code Playgroud)
在这些主机中的任意两台之间,都会定期进行网络通信,包括低级 ping 操作和上级业务消息(基于 TCP 或 UDP)。
偶尔(例如一天或两天一次)主机 B 和主机 C 会发现主机 A 无法通过 ping 操作(将持续约 7 秒)而主机 A 在 ping 主机 B 和主机 C 时没有问题。同时,与主机 A 相关的上层 TCP 或 UDP 通信也会失败,而主机 B 和主机 C 之间的通信则完全正常。
问题出现在我们公司的多个系统上,看起来网络硬件(已更换交换机和连接电缆)和网络流量(即使系统空闲且带宽使用率低于 1% 的情况下仍会出现问题)没有对问题作出重大贡献。
然后,通过使用Wireshark检查系统中的网络流量(通过以太网交换机捕获,下载),我们发现ping请求已经发出而没有收到响应:
No. Time Source Destination Protocol Length Info
1455 1.509228 192.168.0.100 192.168.0.21 ICMP 98 Echo (ping) request id=0x6812, seq=1/256, ttl=64 (no response found!) …Run Code Online (Sandbox Code Playgroud) arp ×10
networking ×4
linux ×2
ubuntu-12.04 ×2
windows-10 ×2
centos ×1
cluster ×1
ethernet ×1
failover ×1
gateway ×1
ip ×1
kernel ×1
mac-address ×1
route ×1
tcpdump ×1
ubuntu ×1
vmware-esxi ×1