1. 概述与目标
目标:在韩国机房使用原生公网IP(provider-assigned)时,保证在高并发(数万至十万并发连接)下稳定性与可控带宽消费。
小分段:说明场景(Web/API/短连接流量)、关键指标(连接数、带宽、丢包率、响应时间)、风险点(ARP冲突、单IP限速、SYN风暴)。
2. 架构与设计原则
先规划:采用多机多IP冗余、反向代理/负载均衡、流量分片与队列调度。
小分段:建议对外使用多台Nginx/Haproxy做TCP/L7负载均衡;对内使用多进程/多线程或多端口分流;避免单IP成为瓶颈,按业务拆分子网段与端口策略。
3. 实例与网卡选择
步骤:选择支持SR-IOV或增强网络(ENA/EADV)实例,保证网络带宽与PSU CPU匹配。
实际操作:在提供商控制台选择“增强型网络”或“高网络带宽”实例;登陆后用 ethtool -i eth0 检查驱动与RSS支持;用 ip link show 检查MTU(推荐9000在支持时开启)。
4. 原生IP配置与多IP实践
步骤一:为每台服务器绑定多个原生IP。命令示例:ip addr add 1.2.3.4/32 dev eth0 label eth0:1
步骤二:多IP分流策略:按来源端口、目标端口或使用iptables MARK做策略路由(ip rule & ip route)。示例:iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 10;ip rule add fwmark 10 lookup 100;ip route add default via
dev eth0 table 100。
5. Linux内核与TCP调优(关键参数与写法)
直接修改 /etc/sysctl.conf 并应用 sysctl -p。推荐设置(示例):
net.core.somaxconn=65535
net.core.netdev_max_backlog=250000
net.ipv4.tcp_max_syn_backlog=65536
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_fin_timeout=15
net.ipv4.tcp_max_orphans=262144
net.ipv4.ip_local_port_range=1024 65535
net.ipv4.tcp_rmem=4096 87380 6291456
net.ipv4.tcp_wmem=4096 65536 6291456
说明:调整后重启服务或测试,并注意内存与conntrack限制配套调整(/proc/sys/net/netfilter/nf_conntrack_max)。
6. conntrack与防SYN/连接耗尽策略
步骤:安装conntrack工具并监控:apt/yum install conntrack;watch -n1 cat /proc/net/nf_conntrack
调整:echo 262144 > /proc/sys/net/netfilter/nf_conntrack_max;并启用SYN cookies:net.ipv4.tcp_syncookies=1。
实操建议:配合iptables限速(-m connlimit 或 -m recent)对恶意源IP做速率限制。
7. 带宽调度:tc HTB 与 fq_codel 实战
场景:按服务、按IP或按端口分配带宽上限与优先级。
示例步骤(限制 eth0 出站整体与按类分配):
tc qdisc add dev eth0 root handle 1: htb default 30
tc class add dev eth0 parent 1: classid 1:1 htb rate 1gbit ceil 1gbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 800mbit ceil 1gbit prio 1
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 200mbit ceil 200mbit prio 2
给类绑定过滤器:tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:10
为降低队列延迟可在类下加 fq_codel:tc qdisc add dev eth0 parent 1:10 handle 10: fq_codel。
双向控制:对于入站可用 ifb 设备做 ingress 重定向并用相同 HTB 配置。
8. 负载均衡与故障切换(keepalived + VRRP 与 ARP注意)
步骤:使用 keepalived 管理 VIP(若是原生IP则用在同机多IP或虚拟IP)。示例 /etc/keepalived/keepalived.conf 中配置 vrrp_instance,priority,virtual_ipaddress。
关键点:当VIP漂移时发送 gratuitous ARP:notify脚本可调用 arping -U -I eth0 来刷新邻居表。若提供商限制ARP或/32路由,需与机房确认支持。测试:停掉主节点,watch arp -n 与 ip addr show 验证漂移。
9. 应用层优化(Nginx / Haproxy / TCP proxies)
Nginx 核心设置:worker_processes auto;worker_connections 65536;use epoll;keepalive_timeout 10;listen ... backlog=65535 reuseport。
Haproxy 设置:tune.maxaccept 10000;tune.bufsize;nbproc/nbthread 与 epoll 配合。
实践:启用 accept_mutex off(在多worker时测试),开启 reuseport 并为每个端口分配多个进程以提升并发接收能力。
10. 压测与监控实战(命令与指标)
压测工具:iperf3(带宽测试)、wrk/ab(HTTP并发)、h2load(HTTP2)、tcpdump/ss/iftop 查看实时流量。
常用命令:ss -s;ss -tanp | wc -l;netstat -anp | grep SYN_RECV;iperf3 -c server -P 50 -t 60;tc -s qdisc show dev eth0。
监控:Prometheus + node_exporter + tc_exporter,监测 net_dev、conntrack、socket 数、队列丢包与延迟。
11. 故障排查与常见问题处理步骤
排查步骤:1) 确认链路与速率(iperf3);2) 查看内核队列(netdev backlog、tcp_max_syn_backlog);3) 检查conntrack耗尽;4) 检查iptables/nftables规则误判;5) 检查ARP或路由问题。
建议:每次变更只改一项并记录,遇到抖动先回滚最新改动再逐步定位。
12. 问:在韩国机房用原生IP会遇到哪些本地化网络限制?
答:常见限制包括机房对/32路由或ARP响应的策略(有的需要网关设置或提供商绑定)、ICMP/安全组默认限制、带宽整形或对单IP的上行/下行速率封顶。解决办法是事先与供应商确认原生IP支持情况,申请更大的带宽包或BGP前缀,必要时使用多IP+调度将流量拆分。
13. 问:如何衡量tc规则是否达到预期效果?
答:用实时监测与压测结合验证。步骤:1) 在空载时启动 tc 规则;2) 用 iperf3/多个并发流量模拟真实流量并记录丢包率与延迟;3) 使用 tc -s qdisc 查看 class/queue drops 与 backlog;4) 通过 Prometheus 收集出口带宽与延迟指标,观察在peak时是否存在超额 ceil 或大量 drops,若有调整 rate/ceil 或增加队列优先级。
14. 问:在高并发下如何快速恢复单IP故障导致的流量丢失?
答:快速恢复策略:1) 提前准备自动化脚本(systemd/ansible)在检测到服务异常时把流量切到备用IP:ip addr add dev eth0;2) keepalived 自动漂移 VIP 并发送 gratuitous ARP;3) 若机房支持,使用BGP或API告知上游路由器切换公告;4) 在恢复期间用 tc 限速保护后端,避免突发拥塞。测试并演练切换脚本,确保ARP/路由在30秒内完成切换。