GBase8a运维案例分析,一次因网卡bond导致的DML性能问题

数据库为了高可用,在网络层可以采用bond方式避免网卡故障,连接多个交换机避免交换机单点故障。本文介绍一次因bond网络原因导致的加载,dml等都机器缓慢的性能问题。

现象

客户反馈,现场加载机器缓慢。部分已经超过2小时尚未结束。日常只需要1分钟以内,大部分几秒即可完成。

排查过程

查看各节点iostat性能

首先怀疑部分节点有性能问题,用过iostat查看,所有节点都极其空闲。 cpu不超过30%,io不超过10%。

查看网卡ethtool

未发现网卡降速,都是万兆

查看各节点操作系统日志

/var/log/messages 未发现报错。

重启数据库服务

客户自行重启了整个集群的数据库服务,现象依旧。

测试数据源到集群节点的网络性能

从加载数据源,用scp复制1GB的文件到集群节点,每秒在50MB左右,未发现有明显性能问题。

查看trace日志

简单的insert select, 节点17行耗时1分多,发现第1个节点耗时长(Finish ACK)

怀疑这个节点的网络故障。

关闭第一个节点的服务

将数据库服务关掉,转到第二台服务器监控。发现性能略有提升但经常发生gcadmin 报集群LOCK。许多SQL都rollback,根本没法继续观察。

检查gcware服务日志

发现第二台服务器经常从管理节点里离线,导致服务重建导致。而其它节点则一直没问题。

根据历史日志,第二个节点fbd故障记录远大于第一个节点fdc

而节点离线的原因,是因为一直没有收到心跳导致,包括fbd没有收到其它节点心跳,其它节点也没有收到fbd的心跳。对比其它节点日志印证了这个现象。

以此判断,fbd网络故障比fdc更严重。 其与其它节点之间一定存在了网络阻塞。

现场bond情况

考虑到现场IP包含2个部分,fbX 和fcX, 是否存在跨交换机的情况。

客户反馈,现场初期就2个节点,后来扩容4个节点,用了新的交换机。 而每个节点都做了网卡绑定,且分别绑定到2台交换机避免单点故障。

而系统之前一直正常,考虑是否出现了网卡或交换机切换。

更改bond

将第二个节点的bond强行指定网卡1,重启服务,系统瞬间恢复了正常,且持续稳定。

BONDING OPTS="mode=1 miion=100 primary=eno1"

怀疑第二个节点的交换机或网线,出现了阻塞或故障。

总结

bond本来是为了避免网络单点故障引入的,但现场前2个节点的备用交换机,与新的4个节点间有网络通讯故障(估计是udp包广播不通或大量拦截)。而这个网络切换是OS层发生的,应用层无法感知。 从而导致如果用的是第一个交换机,则一切正常,如果切换到了第二个,则会出现因网络导致的性能问题。

现场网卡做了bond,建议测试下切换后的性能。