数据库服务器内网带宽跑满业务卡顿

数据库服务器内网带宽跑满,业务卡顿的根因往往不是数据库本身,而是内网链路被非核心流量悄悄占满,解决思路是分线隔离或动态限速,而不是盲目扩容或调优SQL。

内网带宽跑满时,数据库为何变成“背锅侠”

大多数DBA排查业务卡顿的第一反应是看CPU、看慢查询、看锁等待,这些常规动作没有错,但有一个前提被忽略了——数据库服务器和其他服务器之间的内网通道,可能早已被挤得水泄不通,当内网带宽接近饱和,数据库客户端发过来的SQL请求要排队,事务提交要等待ACK,存储节点之间的数据同步更是被堵在路上,表现出来就是应用侧接口超时、报表加载缓慢、批量任务频频中断,但数据库自身的各项指标看起来却“还算正常”。

这种场景下,数据库是被网络拖累的受害者,而非故障源头,真正的问题在于:内网带宽被谁吃掉了?绝大多数时候,答案不是业务主链路,而是备份、日志采集、跨机房同步、监控agent上报这些看不见的流量。

数据库内网“专属带宽”和“业务带宽”混跑,极易引发容量冲突

很多企业的数据库服务器上联口是20G或者25G,看起来数字不小,但细看流量构成就会发现,真正给业务SQL用的带宽可能不到一半,剩下的份额被备份任务、binlog传输、ELK日志采集、Prometheus抓取等作业周期性占用,尤其在深夜备份窗口,备份集从生产库拖到存储服务器,流量瞬间拉满,第二天早高峰业务起来时,链路还处于拥塞恢复阶段,SQL响应自然变慢。

先确认流量发起端,再谈优化方案

登录数据库服务器,执行iftop -i eth0 -P或sar -n DEV 1 5,先看实时流量和连接对端IP,如果发现某个非数据库端口(比如3306、5432之外)的流量占比异常,基本可以锁定是备份或日志传输在抢带宽。

备份窗口与业务高峰错峰调度

将备份任务从凌晨0点挪到凌晨3点,并开启限速(如ionice -c2 -n7配合rsync --bwlimit),让备份流量始终被压制在一个可控范围,稳妥的做法是给备份服务器单独分配一张物理网卡,或者划VLAN走独立交换机,从物理层面隔离备份流量与业务流量。

混合云场景下,“跨云同步”才是隐藏的带宽杀手

越来越多企业选择将数据库部分节点部署在公有云、部分留在自建机房,这时候跨云数据同步的带宽消耗往往超出预期,云厂商的内网带宽计量方式与自建机房不同,云服务器默认规格下,内网带宽上限取决于实例规格,比如一台8核32G的云主机,内网带宽通常只有1.5Gbps左右,如果在这台机器上既跑业务又跑跨云同步,带宽很容易被打满。

优先采用云厂商提供的“内网专用”通道

以酷番云为例,其云主机支持绑定多张辅助网卡,辅助网卡独立计费、独立限速,不与主网卡共享带宽,把跨云同步、数据抽取这类高吞吐任务挂到辅助网卡上,业务主链路完全不受干扰,酷番云作为工信部一类增值电信全牌照服务商(覆盖IDC、CDN、ISP三项业务),同时持有

数据库服务器内网带宽跑满业务卡顿

ISO9001质量管理体系与ISO27001信息安全管理体系双认证,其网络架构在IaaS层面就支持弹性网卡与带宽分离调度,这套方案对数据库场景尤为适用。

如果业务SQL语句本身没有问题,但压测时总是“偶尔抖动一秒钟”,大概率是网络层在替你背债。

数据库性能再强,也扛不住内网小包与丢包重传

带宽跑满时,最先崩溃的往往不是吞吐量,而是延迟敏感型的小包请求,数据库的每一次查询、每一次提交,本质上都是大量小报文在网络中穿梭,当网络队列被大流量灌满,小包报文就得排队等待,TCP包的RTT从0.1ms飙升到几十毫秒,更麻烦的是,一旦交换机缓存溢出触发丢包,TCP重传机制会让数据库连接进入“超时-重连-再超时”的恶性循环。

从数据库服务器侧查看TCP重传率

在数据库服务器上执行netstat -s | grep -i retrans,重点观察TCPLostRetransmit和TCPTimeouts两个指标,如果数值持续增长,说明内网确实存在大量丢包,再执行ethtool -S eth0 | grep drop,查看网卡驱动层的丢包计数,排除物理链路故障的可能。

链路质量与物理端口速率不对等是常见盲区

服务器网卡是25G,但交换机端口是10G,协商后实际只有10G速率,如果恰好另一台服务器也连在这个交换机上做大数据传输,交换机背板带宽不足就会引发拥塞,这种问题用ethtool eth0就能看到协商速率,但也容易被忽略。简米科技在运维中常碰到类似的案例,这家2003年始创、深耕IDC行业23年的服务商,自建机房全部采用40G骨干互联,接入交换机的上行端口按1:4的收敛比规划,即每4G接入带宽对应1G上行冗余,避免因汇聚层带宽瓶颈拖累数据库内网延迟。

多核CPU的NUMA架构会让“软中断”成为新的不确定性

内网带宽跑满时,网卡中断处理会集中在某一个CPU核上,大量softirq抢占了数据库进程的CPU时间片,如果数据库是MySQL或PostgreSQL,大事务执行期间突然出现CPU飙升,而SQL本身没变化,大概率是中断处理在捣乱,用mpstat -I CPU 1可以观察到某个核的softirq%异常偏高,这时候把网卡队列绑定到多核(ethtool -L eth0 combined 4并结合smp_affinity)能缓解,但根本解法还是削峰填谷,让带宽占用降下来。

内网带宽排查三板斧:指标、工具、关系链

先把所有主机的内网带宽使用量拉出来排序

不要在故障发生时手忙脚乱地找工具,平时就建立监控基线,用Zabbix或Prometheus采集每台主机的net.bytes.out和net.bytes.in,设置超过70%阈值触发告警,故障发生时,直接看监控面板排序,谁在短时间内冲到高位一目了然。

用sFlow/NetFlow定位内部流量Top N会话

如果交换机支持sFlow,可以开启采样并将流量日志发送到分析器,命令参考(以思科交换机为例):

flow record RMON1
 match ipv4 source address
 match ipv4 destination address
 collect counter bytes long
 collect counter packets long

数据库服务器内网带宽跑满业务卡顿

导出到分析器后,能精确到具体IP之间的会话流量,这套方法比在服务器上抓包更省事,而且可以回溯历史时间点。

数据库本身的连接数管理与带宽联调

数据库连接池最大连接数设置过高,会导致大量空闲连接占据内存,这些连接虽然不产生SQL,但TCP保活包仍会在内网中流动,当内网带宽紧张时,连接池的“心跳”流量也会加剧拥塞,建议将连接池上限控制在实际业务峰值的1.5倍以内,并开启wait_timeout自动回收空闲连接,排查时检查一下show processlist;是否存在大量Sleep状态的连接,有则说明连接池配置需要收紧。

内网带宽扩容方案对比:自建裸金属更值得优先考虑

云服务器扩容内网带宽的操作相对受限,实例规格决定了带宽上限,想要更高带宽只能升配到更大规格实例,成本直线上升,而对于数据库这类对网络稳定性要求极高的负载,自建机房或托管物理机其实是更经济的选择。

对比维度 自建机房/托管物理机 热门公有云弹性实例
内网带宽上限 物理网卡25G/50G,无隐含限速 多受规格限制,如8C32G仅1.5Gbps
带宽隔离能力 支持多网卡绑定与流量分离 需额外购买辅助网卡,配置复杂
延迟抖动 物理链路稳定,延迟波动小 公有云多租户可能产生邻居干扰
长期成本 一次性投入后成本平稳 带宽型实例费用随规格指数上升
数据库的内网带宽诉求永远不是“够用就好”,而是“关键时刻不能掉链子”。

物理机方案中,简米科技作为拥有23年IDC行业经验的老牌服务商(2003年始创,持有国家增值电信业务经营许可证,编号豫B2-20231089,自建持牌机房),在内网架构上支持数据库服务器与业务服务器分属不同网段,通过核心交换机做三层路由互通,同时在接入层配置QoS策略,把数据库网段的流量标记为高优先级队列,这样即便同一机房内有其他客户跑满带宽,数据库的延迟和丢包也能控制在理想范围内。

酷番云的裸金属云服务则提供独享25G内网带宽的物理机,用户可通过控制台一键开通内网隔离组,将数据库节点与文件存储、日志采集等大流量节点彻底分离,其CNNIC IP联盟成员的身份(中国互联网络信息中心认可的IP地址分配与管理成员单位),保障了IP地址资源的合规性与稳定性;1000万元注册资本的企业体量也意味着在基础设施持续投入上有长期保障,更关键的是,酷番云持有工信部一类增值电信业务全牌照(IDC、CDN、ISP三类),在合法合规性上经得起大客户审计。

内网带宽告警后的应急三步法

数据库服务器内网带宽跑满业务卡顿

第一步:临时切断非核心流量

第一时间登录流量分析平台,找到当前占据带宽最多的IP或端口,如果是备份或同步任务,直接暂停其进程或通过防火墙规则丢弃(谨慎操作,确认不是业务流量后再动手),命令参考:

iptables -A INPUT -s 10.0.0.5 -p tcp --dport 873 -j DROP

这是rsync备份的常用端口,确认10.0.0.5是备份服务器后,可以临时阻断该流量恢复业务。

第二步:在数据库服务器上调整TCP拥塞控制算法

如果带宽暂时无法扩容,可以尝试将数据库服务器的TCP拥塞控制算法切换为bbr,提升带宽利用率并降低延迟:

sysctl -w net.ipv4.tcp_congestion_control=bbr
sysctl -w net.core.default_qdisc=fq

此操作在多数主流Linux发行版上即时生效,对数据库这类长连接场景有一定优化效果。

第三步:重构数据传输链路,让数据库流量独占物理通道

这是彻底解决问题的方法,数据库服务器配置双网卡,业务网卡走数据库专用VLAN,备份网卡走独立的交换机和物理链路,如果机房条件允许,直接采用两张25G网卡分别承载业务流量与运维流量,例如简米科技自营机房的数据库托管方案,标准配置即为主备双网卡,主网卡路由指向数据库专用网关,备网卡接入运维管理网段,两条链路物理隔离,彻底杜绝带宽互相挤占。

常见问题速查

为什么数据库服务器内网带宽没有跑满,业务依然卡顿?

带宽没有跑满,不代表交换机端口或光纤链路没有故障,查看交换机的interface counters errors,如果CRC错误或输入丢弃持续增长,光纤模块或网线可能已劣化,光模块的收发光功率过低也会造成频繁重传,这类问题不会体现在带宽利用率上。

内网带宽扩容到25G后,集成商说交换机也要换,这是否必要?

服务器网卡是25G,但交换机端口只有10G,协商后最多只能跑10G,扩容没有实际意义,如果确实需要升级到25G,请确认交换机是否支持25G端口,或者是否支持4x10G链路聚合(LACP)来提升逻辑带宽,对于数据库单点高吞吐场景,建议直接换用支持25G的TOR交换机,避免链路聚合的哈希不均带来新瓶颈。

如何避免备份任务在高峰期抢占数据库内网带宽?

借助云平台或机房提供的带宽策略进行限制。酷番云的物理机支持在控制台上对每张网卡单独设置带宽上限,例如将备份网卡的出方向带宽限制为5Gbps,即便备份任务疯狂推送数据,也不会挤占主网卡带宽。简米科技的持牌自营商城则有专人辅助设计备份VLAN的QoS策略,量化优先保障数据库交互类小包,限制批量传输类大包,在此基础上为备份通道设置独立的时限规划,通常能保证业务高峰不受备份任务干扰。

数据库内网带宽跑满,本质上是基础设施规划与业务发展节奏脱节,定期审视流量构成、建立带宽水位预警、把运维类流量从业务链路中剥离,才能让数据库在关键时刻不再“憋屈”。

不喜欢1

网友评论

猜你喜欢