1. 前期准备与基线测试
1) 登录与权限:sudo 权限或 root;确认虚拟化类型(KVM/OpenVZ)和允许的网络工具。
2) 带宽基线测试:安装 iperf3(apt/yum install iperf3),在远端有测试服务器时执行 iperf3 -c 目标IP -P 4 -t 30;或者用 speedtest-cli 做简单延迟/速率测试。记录延迟、丢包、抖动和带宽峰值。
3) 存储基线测试:安装 fio(apt install fio),执行示例:fio --name=seq-write --filename=/tmp/testfile --size=1G --bs=1m --rw=write --direct=1 --numjobs=1 --runtime=60,记录 IOPS、带宽、延迟。
2. 选择合适的磁盘类型与分区策略
1) 优先 NVMe/SSD:优先选择 NVMe 或 SSD 镜像盘,HDD 不适合高并发写入场景。
2) 分区与 LVM:如果要灵活扩容,建议使用 LVM;否则直接分区 /var/www、/var/lib/mysql、/tmp 并单独挂载。示例分区命令:fdisk /dev/vdb -> mkfs.xfs /dev/vdb1。
3) 预留空间与日志:至少给 /var/log 和数据库目录留 20% 以上空闲,以防日志填满导致服务宕机。
3. 文件系统与挂载选项优化
1) 推荐文件系统:数据库用 XFS 或 ext4;XFS 在大文件并发场景上更稳定。mkfs.xfs /dev/vdb1。
2) 挂载选项:在 /etc/fstab 中加 noatime,nodiratime,discard(若云盘支持),示例:UUID=xxx /data xfs defaults,noatime,nodiratime,attr2,discard 0 2。
3) 定期 TRIM:若不想开 discard,可通过 fstrim -av 放到 cron 每日执行(sudo systemctl enable fstrim.timer)。
4. I/O 调度器与内核参数
1) I/O 调度器:查看 cat /sys/block/sda/queue/scheduler;NVMe 建议设置为 none 或 mq-deadline:echo none > /sys/block/nvme0n1/queue/scheduler。
2) 文件句柄与异步设置:编辑 /etc/sysctl.conf 增加 fs.file-max=2097152;sysctl -p 生效。
3) 对数据库:禁用 fsync 临时为提升测试写入速度,但生产环境慎用,需保证电源与快照策略。
5. 网络栈与 TCP 优化(针对 CN2 线路)
1) 启用 BBR(若内核支持):echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf; echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf; sysctl -p。确认 lsmod | grep bbr。
2) 调整缓冲区与超时:在 sysctl.conf 中加入 net.ipv4.tcp_window_scaling=1, net.ipv4.tcp_rmem, net.ipv4.tcp_wmem 配置,示例:net.ipv4.tcp_rmem=4096 87380 6291456。
3) MTU 与 PMTU:若经由 CN2 出现分片,可启用 net.ipv4.tcp_mtu_probing=1;必要时与提供商沟通最佳 MTU。
6. 流量控制、防抖与 QoS
1) 使用 tc 限速防止突发占满队列(缓冲膨胀):tc qdisc add dev eth0 root fq_codel。
2) 配置端口限速:对上传或下载峰值可用 tc filter + htb 分配带宽保底。示例:tc qdisc add dev eth0 root handle 1: htb default 10;tc class add ...。
3) 监测 bufferbloat:用 tools.bloat测试或 ping 看延迟在载荷下波动。
7. 应用层优化(Web/数据库/缓存)
1) 静态文件:尽可能走 CDN(优先选覆盖国内的 CDN),将静态资源 offload 到对象存储或 CDN。
2) Web 服务:开启 gzip/brotli,增加缓存头,启用 Nginx sendfile、tcp_nopush、tcp_nodelay。示例:sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65;。
3) 缓存与数据库:使用 Redis/Memcached 减少磁盘 I/O;数据库开启适当缓存,优化索引并定期清理慢查询。
8. 监控、报警与回滚策略
1) 监控指标:带宽、丢包、延迟、磁盘使用、iostat、fio 历史、innodb/io 等。推荐 Prometheus + Grafana。
2) 警报阈值:带宽利用率>80%、磁盘队列长>10、磁盘剩余<10% 触发告警。
3) 回滚与快照:做任何内核或 fs 调整前创建磁盘快照或备份配置脚本,方便回滚。
9. 实操清单(一步步执行模版)
1) 备份当前系统与数据。2) 基线测试 iperf3/fio 并保存结果。3) 修改 /etc/fstab 与 sysctl.conf(按上文示例)。4) 重启或 reload sysctl。5) 运行 fio/iperf3 复测并与基线对比。6) 部署 CDN/缓存并逐步下放流量,观察监控。7) 定期 fstrim 与清理日志。
问:开启 BBR 会带来哪些风险?
开启 BBR 一般能提升高带宽高延迟链路的吞吐,但若内核或宿主机环境不支持,会导致不稳定或与宿主网卡驱动兼容性问题;上线前请在非生产环境完整测试并保留回滚方案。
答:如何判断磁盘是否适合打开 discard?
1) 与云服务商确认是否支持在线 discard。2) 小规模测试:在非关键分区丢弃后用 fio 对比性能。3) 若性能下降,改为定期 fstrim -av 的方案。
问:在台湾 CN2 VPS 上如何最有效减少对内地用户的延迟?
1) 使用 CN2 GT/中国直连优先线路(由提供商决定),并结合覆盖内地的 CDN。2) 优化 TCP(BBR、窗口)、减少跳数与首包时间,并把静态资源放到离用户最近的节点。3) 测试并记录多个节点的 iperf/trace 路由,选择稳定的出口。
来源:台湾vps cn2 云空间 带宽与存储配置优化实战经验分享