6.3 网络配置优化


6.3 网络配置优化

本节摘要:应用和数据库间的网络影响延迟。本节讲清楚带宽/延迟、TCP 参数、多队列/中断、网络拓扑,让网络不拖后腿。

网络对数据库的影响

数据库网络场景:

  • 应用→数据库——查询/响应传输。
  • 主从复制——主库 binlog 传从库。
  • 集群内部——分布式数据库节点通信。

网络影响:

  • 延迟——每查询往返延迟累计(RTT × 查询数)。
  • 带宽——大数据传输(如 OLAP 扫描结果、复制)。
  • 丢包——重传拖慢。

带宽与延迟

带宽

  • 每秒传输数据量(Gbps)。
  • OLTP 小查询——带宽需求低。
  • OLAP 大结果/复制——带宽需求高。
  • 万兆(10Gbps)够多数,百兆(100Gbps)超大。

延迟(RTT)

  • 往返时间——每查询至少一个 RTT。
  • 同机房——0.1-0.5ms。
  • 跨机房——1-10ms。
  • 跨地域——10-100ms+。

影响

  • 延迟 × 查询数 = 网络总延迟。如 100 查询 × 0.5ms = 50ms。
  • 高延迟下 N+1 查询灾难——100 查询 × 10ms = 1 秒。

优化

  • 应用和 DB 同机房——低延迟。
  • 批量查询——减少往返。
  • 连接复用——减少建立连接延迟。
  • 预加载——减少 N+1。

TCP 参数调优

1. TCP 缓冲区

  • net.core.rmem_max/wmem_max——TCP 读写缓冲上限。
  • 调大——大传输(复制、OLAP)提吞吐。
  • 如 16MB(rmem_max=16777216)。

2. 窗口缩放

  • net.ipv4.tcp_window_scaling=1——启用窗口缩放,高带宽延迟积(BDP)重要。

3. TIME_WAIT

  • net.ipv4.tcp_tw_reuse=1——复用 TIME_WAIT 连接。
  • net.ipv4.tcp_max_tw_buckets——TIME_WAIT 上限,防耗尽。
  • 高并发短连接重要。

4. keepalive

  • net.ipv4.tcp_keepalive_time——keepalive 探测间隔(默认 7200s,调短如 600s)。
  • net.ipv4.tcp_keepalive_intvl/probes——探测频率。
  • 及时发现死连接。

5. SYN

  • net.ipv4.tcp_max_syn_backlog——SYN 队列上限,高并发调大。
  • net.ipv4.tcp_syncookies=1——防 SYN flood。

6. 连接队列

  • net.core.somaxconn——accept 队列上限,调大(如 4096)。
  • 配合应用 listen backlog。

多队列与中断

多队列网卡

  • 多队列——多 CPU 处理中断,并行。
  • /proc/interrupts——看网卡中断分布。
  • 设置中断亲和——绑中断到 CPU 核(smp_affinity)。

RPS/RFS

  • RPS(Receive Packet Steering)——软件多队列,分发包到多核。
  • RFS(Receive Flow Steering)——同流包到同核,提缓存命中。
  • 适合单队列网卡或多队列不够。

中断合并

  • 网卡中断合并——减少中断次数,提吞吐,增延迟。
  • ethtool -C——调中断合并参数。
  • 吞吐优先调大合并,延迟优先调小。

网络拓扑优化

1. 同机房/同可用区

  • 应用和 DB 同机房——最低延迟。
  • 云上同可用区(AZ)——延迟 <1ms。
  • 跨 AZ——1-2ms,可接受。
  • 跨地域——10ms+,慎用。

2. 专用网络

  • DB 专用网络/VPC——隔离,安全,无干扰。
  • 避免公网——延迟高、不安全。

3. 负载均衡

  • 多从库读——读副本 + 负载均衡分摊。
  • 代理(ProxySQL/PgBouncer)——连接池 + 路由。

4. 复制网络

  • 主从复制专用网络——避免和应用争带宽。
  • 复制压缩——binlog 压缩减带宽(MySQL binlog_transaction_compression)。

网络监控

1. 带宽

  • iftop/nethogs——按连接/进程带宽。
  • sar -n DEV——网络接口统计。

2. 延迟

  • ping——RTT。
  • tcptraceroute——TCP 路径延迟。

3. 丢包/重传

  • netstat -s——TCP 重传统计。
  • ss -ti——TCP 连接详情(重传、RTT)。
  • 高重传——网络问题,排查链路。

4. 连接状态

  • ss -s——连接统计(ESTABLISHED/TIME_WAIT 等)。
  • TIME_WAIT 多——调 tcp_tw_reuse。

5. 数据库复制延迟

  • MySQL:SHOW SLAVE STATUS——Seconds_Behind_Master。
  • PG:pg_stat_replication——lag。
  • 复制延迟高——网络带宽/延迟问题。

⚠️ 常见误读:以为"网络快不用调"。高延迟下 N+1 查询灾难(100 查询 × 10ms = 1 秒)。要批量查询/预加载减少往返,应用和 DB 同机房降延迟。

💡 关键直觉:网络影响——延迟(RTT × 查询数累计,N+1 灾难 100×10ms=1s)、带宽(OLTP 低 OLAP/复制高)、丢包重传拖慢。带宽延迟——同机房 0.1-0.5ms/跨机房 1-10ms/跨地域 10-100ms+,万兆够多数。优化同机房/批量查询减往返/连接复用/预加载减 N+1。TCP——缓冲区 rmem_max/wmem_max 调大提吞吐、窗口缩放 tcp_window_scaling 高 BDP、TIME_WAIT tcp_tw_reuse 复用+max_tw_buckets 防耗尽、keepalive 调短 600s 及时发现死连接、SYN max_syn_backlog 调大+syncookies 防 flood、somaxconn accept 队列 4096+。多队列中断——多队列网卡多 CPU 处理 smp_affinity 绑核、RPS/RFS 软件多队列分发/同流同核缓存命中、中断合并 ethtool -C 吞吐优先大延迟优先小。拓扑——同机房/同 AZ <1ms 跨 AZ 1-2ms 跨地域慎用、专用网络 VPC 隔离安全避免公网、负载均衡多从库读+代理 ProxySQL/PgBouncer、复制专用网络+binlog 压缩减带宽。监控——iftop/nethogs 带宽、ping RTT、netstat -s/ss -ti 重传高则排查链路、ss -s 连接状态 TIME_WAIT 多调 reuse、复制延迟 Seconds_Behind_Master/pg_stat_replication 高则网络问题。

网络调优要点

  • 网络影响:应用→DB 查询响应、主从复制 binlog、集群内部通信。延迟 RTT × 查询数累计(高延迟 N+1 灾难 100×10ms=1s)、带宽 OLTP 低 OLAP/复制高、丢包重传拖慢。
  • 带宽延迟:带宽每秒传输(Gbps),延迟 RTT 往返(同机房 0.1-0.5ms/跨机房 1-10ms/跨地域 10-100ms+)。优化:同机房低延迟、批量查询减往返、连接复用减建立延迟、预加载减 N+1。
  • TCP 参数:缓冲区 rmem_max/wmem_max 调大(16MB)提吞吐、窗口缩放 tcp_window_scaling=1 高 BDP、TIME_WAIT tcp_tw_reuse=1 复用+max_tw_buckets 防耗尽、keepalive tcp_keepalive_time 调短 600s 及时发现死连接、SYN max_syn_backlog 调大+tcp_syncookies=1 防 flood、somaxconn accept 队列 4096+配合应用 listen backlog。
  • 多队列中断:多队列网卡多 CPU 处理中断 smp_affinity 绑核、RPS 软件多队列分发多核/RFS 同流同核缓存命中(单队列网卡或多队列不够)、中断合并 ethtool -C 吞吐优先调大延迟优先调小。
  • 拓扑优化:同机房/同 AZ <1ms 跨 AZ 1-2ms 跨地域 10ms+ 慎用、专用网络 VPC 隔离安全无干扰避免公网、负载均衡多从库读+代理 ProxySQL/PgBouncer 连接池路由、复制专用网络避免争带宽+binlog_transaction_compression 压缩减带宽。
  • 监控:iftop/nethogs 按连接/进程带宽、sar -n DEV 接口统计、ping RTT、tcptraceroute TCP 路径延迟、netstat -s/ss -ti TCP 重传高则排查链路、ss -s 连接状态 TIME_WAIT 多调 tcp_tw_reuse、MySQL SHOW SLAVE STATUS Seconds_Behind_Master/pg_stat_replication lag 复制延迟高则网络带宽/延迟问题。

分布式数据库的网络敏感点

网络调优在单机场景是配角,在分布式数据库里是主角,给三个敏感点。敏感点一,延迟的地板效应:分布式事务与共识协议的每轮消息都在付网络延迟的税,同城两毫秒与跨城三十毫秒的往返差,经过协议的多轮放大后就是提交延迟的数倍差距——副本的地理布局因此是架构决策而非运维决策,"同步副本放多远"直接定义了写入延迟的地板。敏感点二,带宽与突发的错配:批量大查询的数据回流、复制流量、备份流量共享链路时,一次备份就能让节间延迟抖动,进而触发协议层的超时误判——流量隔离(复制走专用通道或限速)是分布式系统的标配动作。敏感点三,内核缓冲的调优:大数据量传输时内核的收发缓冲上限成为隐形瓶颈(吞吐卡在一个不高不低的位置),按带宽延迟积调大缓冲是教科书解法;同时确认拥塞控制算法与数据中心网络的匹配。三个敏感点的共同主题:分布式数据库把网络当成了"总线"——总线的延迟抖动会被协议放大成系统的可用性事件,这也是很多"玄学慢查询"的最终解释:查库的人没错,库没错,错在两台机器之间那根没被看见的线。

复制与共识流量的隔离工程

网络章收官谈一个分布式数据库的专门话题:复制与共识流量的隔离。问题的形态:主从复制流(持续的写日志流)与共识协议流(投票与心跳的频繁小包)共享业务网络时,大数据查询或备份的瞬时带宽占用会让协议心跳超时——触发本不该发生的主从切换或领导者选举,一次网络抖动升级成一次服务闪断。隔离的三层做法:物理层(独立网卡走复制流量,最彻底)、逻辑层(虚拟网或流量整形给协议流量保底带宽)、协议层(心跳超时调到能容忍已知抖动,配合优先级让数据流量先降级)。验证的手段:故障演练里专门设计"带宽打满"场景,观察协议行为是否符合预期——多数团队的演练只测断网不测拥塞,而生产事故里拥塞比断网常见得多。这个话题的教学价值超出网络本身:它展示了分布式系统里"流量类型的人格差异"——数据流宽容(晚点没关系)、控制流零容忍(心跳断了就是政变)——给不同人格分配不同的通道,是分布式运维的基本礼仪。

网络健康的三件日常

网络章收官给三件日常化动作,把网络从"没人管的地带"变成有台账的资产。动作一,延迟地图:定期(每日低峰)测量数据库与各应用可用区间的往返延迟,画成矩阵存档——延迟的缓慢劣化(路由变化、链路老化)只有对比历史才能发现,而它正是分布式协议超时误判的慢性病根源。动作二,重听率台账:核心链路的重传率与乱序率按周记录——千分之几的劣化平时无感,共识协议的抖动却会成倍放大它。动作三,切换演练:冗余链路(或网卡绑定)的主动切换每季一次——切换瞬断对上层的影响(连接重建风暴)要在演练里见过,应用侧的重连参数(退避策略)要据此调过。三件日常每件月均不到一小时,买的是"网络不再是盲区"——全书的调优都假设数据在层间流动,而流动的管道本身也需要体检,这是物理层章给整套教程补上的最后一块拼图。

网络的低频陷阱

网络章收官点三个低频陷阱——不常见,但每次出现都像悬案。陷阱一,季节性的链路劣化:跨楼宇或跨区线缆在温差大的季节延迟漂移——延迟地图的月度对比才能发现,日视图里它是隐形人。陷阱二,虚拟化层的网络抖动:宿主机的资源争抢传导为虚拟机的网络延迟毛刺——数据库侧看是"无缘无故的慢",只有下钻到宿主机层才见真凶;云环境里这个问题以"邻居噪音"的形态存在,独占宿主或投诉换宿主是解法。陷阱三,安全设备的性能拐点:防火墙与负载均衡在特定包率下进入降级模式(延迟跳档)——流量缓慢增长跨过拐点的那天,"什么都没变但一切变慢了",排查方向要包含中间设备而不只是两端。三个陷阱的共同教训:网络问题的现场常不在数据库所在的机器上——视野要覆盖整条路径,这是物理层调优对工程师眼界的最后要求。

最后一句:网络层的调优心法是"常测常新"——延迟地图、重传台账、切换演练三件日常的频率不用高,但要在;网络是六层里最容易被忽略的一层,也常是疑难杂症的最终答案,把它的观测做进例行,你就拥有了大多数团队缺失的那块拼图。

补一个分布式场景的收尾建议:跨可用区的数据库部署要在架构文档里写明"网络延迟的预算分配"——同步复制吃掉几毫秒、仲裁心跳留几毫秒、应用往返剩几毫秒——这张小账让"要不要跨区容灾、同步还是异步"的讨论有了数字基础;没有这张账的跨区部署,常见的结局是上线后才发现延迟预算超支,业务在每一个事务里还债。网络延迟是分布式数据库的税收,税单要在设计期就看得到。

最后一句给单机为主的团队:哪怕没有分布式,网络观测也值得做——应用服务器到数据库的往返延迟是每个查询的固定税,局域网内零点几毫秒的差异乘以日请求量,就是可观的隐形成本;跨机房部署的应用与库(历史原因的常见形态)更要把这笔账算清——它常是"为什么测试环境快生产慢"的终极答案。网络的账不分单机分布式,只算清楚没算清楚。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U