排查思路:从日志、tcp/ip层逐渐向内核、物理层进行排查:
日志排查:
1、ceph日志排查:
grep -i 'net cost > 1' /var/log/ceph/*.log/ceph/*
2、系统日志排查:
grep -i 'nic link is down' /var/log/messages,网卡反复出现link is down情况,说明要么物理网卡或交换机物理口故障,要么被人为插在了非bond组端口导致协商不成功。
grep -i 'nf_conntrack: table full, dropping packet' /var/log/messages,说明net.ipv4.netfilter.ip_conntrack_max参数太小,XSKY建议参数655360
grep -i 'time wait bucket table overflow' /var/log/messages,说明系统内核参数net.ipv4.tcp_max_tw_buckets配置较小或net.ipv4.tcp_tw_reuse/net.ipv4.tcp_tw_recycle/net.ipv4.tcp_fin_timeout设置不正确
TCP/IP层排查:
1、arping -I eth0 -c 3 -f -D 10.0.0.1检查是否有IP冲突
2、ping -f 10.0.0.1 -I eth0 -s 40960
flood ping大包检查网络是否存在丢包,判断标准:packet loss为0%,send packet和receive packet的数量之差不超过1
注,MTU不匹配的额外情况
ping 10.0.0.1 -I eth0 -s 1500,没有丢包
ping 10.0.0.1 -I eth0 -s 1600,大量丢包
合并分析:客户端MTU配置与交换机MTU配置不匹配。
3、sar -n ETCP 1 几个关键指标
estres/s:每秒收到对方reset的计数,太大则说明网络延迟较大或内核参数不匹配
retrans/s:每秒重传数,TCP网络都会有重传,但通常100M内数据传输,好的网络不会超过10个。这个具体还得看实际网络情况
isegerr/s:每秒收到的错误数据包,TCP checksum失败的数据包。通常这个数据反映的是物理网络的链路情况。
orsts/s:每秒发出的reset计数,太大则说明网络延迟较大或内核参数不匹配
4、netstat -s|grep -i drop
查看到丢包原因,有几种形式丢包:1、协议栈上的丢包,包括内核忙丢弃的;2、网卡处理接收较慢导致的丢包;3、网络传输过程中的丢包
通过netstat -s命令返回结果,也可反应当前内核参数是否满足,相关参数:
net.ipv4.tcp_rmem,较小可能导致socket buffer overrun/low socket buffer等问题
net.ipv4.tcp_max_syn_backlog,较小可能导致TCPBacklogDrop计数持续增长
物理层排查:
1、检查物理网卡是否连通
#ethtool eth0
link dectetd:yes代表连通,link dectetd:no,代表断开
2、检查物理网卡是否存在丢包
#ethtool -S eth0 |grep -i drop,如果有rx_drops计数且不断增长,则代表物理网卡、网线、交换机存在物理问题需修复
#ethtool -S eth0 |grep -i discard,如果有rx_discards计数且不断增长,则代表物理网卡、网线、交换机存在物理问题需修复(博通网卡 BCM57xxx系列)
3、检查物理网卡是否存在错误包
#ethtool -S eth0 |grep -i err
如果有rx_error或rx_crc_error计数且不断增长,则说明物理网络存在大量错误包,通常由于网卡驱动或bond策略不与交换机配置不匹配导致,当然也有可能物理网卡、链路或交换机故障。
如果有rx_miss_error计数且不断增长,则说明网卡已将数据包报文接收,但传入内核被丢弃。通常是由于内核处理速度较慢导致,可适当调大ring buffer缓解,方法:
#ethtool -G eth0 rx 4096 tx 4096