1.
目标与环境准备
说明目标:在韩国部署的CN2物理机上,应对大流量场景,做到可控带宽、平滑峰值、并能提前预测与告警。环境准备分步骤:1) 登录并确认内核版本(uname -r);2) 安装必要工具:apt/yum install iproute2 iptables tcroute bmon iftop vnstat iperf3 python3-pip;3) 加载模块:modprobe ifb; modprobe sch_netem; modprobe act_mirred。
2.
基础监控与流量采集
详细步骤:1) 使用vnStat配置每分钟采样:编辑/etc/vnstat.conf,启用Hourly=true;2) 启动iperf3服务端:iperf3 -s -D;3) 部署采集脚本:每分钟用cat /proc/net/dev或ss -s抓取if字节计数,写入CSV。示例脚本:while sleep 60; do awk '/eth0/ {print systime(), $2,$10}' /proc/net/dev >> /var/log/ifstat.csv; done。将数据推到Prometheus node_exporter或直接用Filebeat上传。
3.
带宽整形核心(使用tc+htb)
操作步骤(示例以eth0为例):1) 清空旧规则:tc qdisc del dev eth0 root || true; tc qdisc del dev eth0 ingress || true。2) 添加root htb:tc qdisc add dev eth0 root handle 1: htb default 30。3) 建类与速率:tc class add dev eth0 parent 1: classid 1:1 htb rate 900mbit ceil 1gbit; tc class add dev eth0 parent 1:1 classid 1:10 htb rate 700mbit ceil 900mbit; classid 1:20 rate 200mbit ceil 300mbit。4) 对端口或IP打标签并用filter分配:tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:10。
4.
入站控制:ifb与Ingress镜像
步骤详解:1) 创建ifb设备并启用:ip link add ifb0 type ifb; ip link set dev ifb0 up。2) 将入站流量镜像到ifb:tc qdisc add dev eth0 ingress; tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0。3) 在ifb0上应用tc整形策略(同上HTB),例如限制用户上游突发:tc qdisc add dev ifb0 root handle 2: htb; tc class add dev ifb0 parent 2: classid 2:1 htb rate 800mbit ceil 800mbit。4) 验证:用tcpdump -i ifb0查看镜像流量,iperf3模拟并观察tc -s qdisc/class统计。
5.
压测与验证(iperf3 与负载脚本)
操作步骤:1) 在多个客户端用iperf3并发模拟:iperf3 -c
-P 10 -t 600 -b 200M(并发10路,每路200M)观察行为;2) 用ab或wrk模拟HTTP请求,记录包丢失/RTT变化;3) 观察tc statistics:tc -s class show dev eth0,查看超限/丢包/队列长度;4) 调优循环:调整htb ceil/rate、fq_codel队列(tc qdisc add ... fq_codel)直至延迟与丢包在可接受范围。
6.
峰值预测方法与实现步骤
实操步骤:1) 数据收集:每分钟采样的ifstat.csv持续保存至少7天;2) 计算95th百分位(作为计费/峰值参考):awk '{print $2}' ifstat.csv | sort -n | awk 'BEGIN{c=0} {a[c++]=$1} END{print a[int(0.95*c)]}'。3) 短期预测(小时级):用Python+Pandas做EMA或简单ARIMA。示例:读取CSV,resample('1Min').sum(), use statsmodels.tsa.arima_model.ARIMA(order=(1,1,1))训练、forecast(60)。4) 自动化:把预测脚本放cron每10分钟跑一次,结果写到Prometheus自建指标或发邮件/SMS告警。
7.
异常检测与自动响应
操作步骤:1) 在Prometheus上配置导入的带宽时序数据;2) 创建规则:当预测值或真实流量超过阈值(如95th * 0.9)持续5分钟触发告警;3) 告警触发时自动执行脚本:通过Alertmanager webhook触发API,执行预定义脚本自动提升某流量类的ceil或临时添加黑名单规则(tc filter add ... action drop),并记录change;4) 回滚策略:使用持续观察,若流量恢复到安全线5分钟后,自动恢复原始配置。
8.
常见问题 Q1:如何在CN2线路上判断是链路饱和还是服务端应用瓶颈?
答案:先做分层定位:1) 在物理机上用ifstat/ethtool查看网卡tx/rx使用率与丢包;2) 在链路端测带宽(iperf3到直连出口IP)确认链路能否达到期望速率;3) 查看应用层指标(CPU、socket队列、accept速率、应用响应时间)。若网卡或出口链路接近速率上限且队列/丢包高,多为链路饱和;若带宽未饱和但应用响应变慢,则为应用瓶颈。
9.
常见问题 Q2:实施tc+ifb后如何避免误杀合法流量?
答案:遵循步骤:1) 先在非生产网口或低流量时段验证规则;2) 使用流量镜像和黑白名单相结合,尽量用流量分类(IP/端口/DSCP)而非粗暴drop所有超限流量;3) 设置缓冲策略与逐步限速(先降低ceil再drop),并监控应用丢包/重传率;4) 准备回滚脚本(保存tc qdisc show输出),一键恢复原始配置。
来源:韩国cn2物理机 在大流量场景下的带宽管理与峰值预测实践