私网交换机端口双工不匹配是oracle 11g rac节点被驱逐的最常见底层原因之一,需登录交换机执行display interface或show interfaces命令确认duplex状态,避免仅依赖ifconfig;协商失败会导致心跳丢失、gc等待升高及ocssd.log中crs-1611报错,修复后须通过crsctl check cluster -all和gv$system_event验证收敛性与延迟指标。
私网交换机端口双工不匹配是 oracle 11g rac 节点被驱逐的最常见底层原因之一,比网卡故障或配置错误更隐蔽、更难排查。
怎么看交换机端口是否强制设为半双工或协商失败
不要只信 ifconfig 输出的 “UP RUNNING”——它完全不反映物理链路双工状态。必须登录交换机查实际端口协商结果:
- 华为/华三设备:执行
display interface GigabitEthernet X/X/X,重点看Speed: 1000M, Duplex: half或Duplex: unknown(协商失败时常见) - Cisco 设备:执行
show interfaces gigabitethernet X/X/X status,再加show interfaces gigabitethernet X/X/X,确认duplex字段是full,且auto-negotiate为on - 若交换机日志里反复出现
%LINK-3-UPDOWN: Interface GiX/X/X, changed state to down或%ETHCNTR-3-LOOPBACKDETECTED,基本可锁定双工震荡
为什么 auto-negotiate 关闭后节点反而更稳定
Oracle RAC 私网流量对微秒级延迟抖动极度敏感,而双工协商过程本身就会引入 200–500ms 的链路中断窗口。一旦某次协商失败(尤其在百兆/千兆混插或老旧交换机上),端口可能 fallback 到半双工,导致:
- 发送方认为“已发完”,接收方因半双工冲突丢弃后续包,表现为
ocssd.log中密集出现CRS-1611(75% 心跳丢失) -
ethtool -S eth2显示非零的rx_missed_errors或rx_over_errors,但ifconfig的errors/dropped仍为 0 - 用
ping -c 100 -i 0.1测延迟时,min/avg/max/mdev看似正常,但单个包延迟会突增到 8–12ms(远超 RAC 要求的 2ms 95% 百分位)
如何验证双工配置是否真修复了心跳问题
改完交换机配置后,不能只等下次驱逐——要主动触发并观察收敛行为:
- 在节点 A 执行
crsctl stop crs,等待 30 秒后再crsctl start crs;同时在节点 B 的/oracle/11.2.0/grid/log/<hostname>/cssd/ocssd.log</hostname>中实时tail -f,确认不再出现连续多行clssnmSendingThread: sent 5 status msgs后紧接clssgmHandleMasterMemberExit - 运行
crsctl check cluster -all,输出中每个节点都必须显示CRS-4537: Cluster Ready Services is online,而非CRS-4535: Cannot communicate with Cluster Ready Services - 持续采集 5 分钟的
GV$SYSTEM_EVENT,确认gc cr block busy和gc current block busy的TIME_WAITED_MICRO中,>2ms 的桶占比低于 3%
真正棘手的不是发现双工不匹配,而是某些交换机固件在启用 auto-negotiate 后,会与 Oracle 驱动的特定 PHY 芯片握手失败——这时必须两端都强制设为全双工,并确保网线无损伤、无过长(≤3 米)、无 CAT5e 以下规格。











