1.
评估现状与目标
首先做基线评估:在台湾节点上用fio进行读写基准测试(示例:fio --name=rwtest --rw=randrw --bs=4k --size=2G --numjobs=8 --iodepth=32 --runtime=60 --group_reporting)。记录 IOPS、latency、带宽。用iostat -x 1、vmstat 1、sar -d 1收集系统指标。确定目标:IOPS、99th延迟、并发连接数。
2.
选择合适的存储类型
如果在台湾云上,请优先使用本地 NVMe 或本地 SSD 虚拟块盘;网络块存储(例如云盘)在高并发下需注意吞吐配额。实操:在控制台选择“本地SSD/高性能块存储”,并确认IOPS/吞吐上限,若不足开通更高规格或多个盘做条带化(RAID0 / LVM striping)。
3.
磁盘与阵列优化步骤
实操步骤:1)对多盘做RAID0或mdadm条带:mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/nvme0n1 /dev/nvme1n1;2)设置队列调优:echo noop > /sys/block/nvme0n1/queue/scheduler(NVMe用none/noop);3)调整队列深度:echo 128 > /sys/block/nvme0n1/queue/nr_requests。
4.
文件系统与挂载参数
推荐使用XFS或ext4+O_DIRECT视情形。格式化并挂载示例:mkfs.xfs -f /dev/md0;挂载:mount -o noatime,nodiratime,allocsize=64m /dev/md0 /data。对于ext4可用:mount -o noatime,nodiratime,barrier=0,data=writeback(谨慎使用barrier=0,会降低数据安全)。
5.
内核与内存缓存调优(sysctl)
常用参数(示例命令):sysctl -w vm.dirty_ratio=10 vm.dirty_background_ratio=5 vm.swappiness=10;网络层:sysctl -w net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.ipv4.tcp_rmem="4096 87380 16777216" net.ipv4.tcp_wmem="4096 87380 16777216";启用BBR:sysctl -w net.ipv4.tcp_congestion_control=bbr。
6.
数据库层面优化(以MySQL InnoDB为例)
关键配置(编辑my.cnf并重启):innodb_buffer_pool_size = 60%~70%内存;innodb_flush_method=O_DIRECT;innodb_io_capacity=2000(根据磁盘能力调整);innodb_flush_log_at_trx_commit=2(在可接受风险下提升写入性能);sync_binlog=0(根据复制策略调整)。使用innodb_write_io_threads/innodb_read_io_threads增加并发IO。
7.
应用层缓冲与连接池
对高并发必须启用应用级缓存与连接池:部署Redis或Memcached缓存热点数据;使用连接池(Java:HikariCP)避免DB连接抖动。示例:Redis配置maxmemory-policy为allkeys-lru,部署主从或Cluster以扩展读写能力。
8.
水平扩展与分片策略
当单机达到上限,采取读写分离、分库分表或水平分片:使用ProxySQL或HAProxy做连接层代理与读写分发;按业务切分表(例如按用户ID取模)并在多台实例上部署。实际步骤:搭建ProxySQL,配置backend backend hostgroup,设置读写规则。
9.
网络与传输优化
台湾地区跨区访问需降低延迟:在同一可用区部署数据库与应用;开启更大MTU并调优TCP参数;在云端使用增强网络(SR-IOV)或提升实例网卡带宽。实操:ifconfig eth0 mtu 9000(确认网络支持),并调整tcp参数如keepalive和拥塞控制。
10.
监控、测试与持续验证
搭建监控(Prometheus+Grafana),采集iostat、node_exporter、mysql_exporter、redis_exporter。每次调优后重跑fio与业务压测(eg. ApacheBench、wrk):wrk -t12 -c1000 -d60s http://app/。通过对比baseline验证改动效果。
11.
常见工具与排查命令
命令清单:fio(性能测试),iostat -x 1(I/O统计),blktrace/blkparse(深入I/O),dstat/vmstat(系统负载),perf/top(CPU热点),tcpdump(网络问题)。示例:fio --name=randread --ioengine=libaio --direct=1 --rw=randread --bs=4k --size=4G --numjobs=16 --iodepth=64。
12.
注意事项与风险控制
实操注意:1)在生产改动先在灰度环境验证;2)RAID0和关闭fsync类设置会提升性能但降低持久性,需配合备份与复制策略;3)任何sysctl与数据库参数改动,记录并可回滚。
13.
问答:在台湾云上本地盘与网络盘我该如何选择?
问:高并发读写场景我应优先选择本地NVMe还是云盘?答:优先选本地NVMe或本地SSD以获得最低延迟与最高IOPS;若需持久性与快照功能可混合使用:将热数据放本地盘,冷数据或备份放网络盘/对象存储,并配置跨可用区复制保障可用性。
14.
问答:如何快速定位磁盘成为瓶颈?
问:线上出现高延迟怎么判断是否磁盘瓶颈?答:观察iostat -x(%util接近100、await高),fio跑随机读写对比IOPS与延迟,blktrace查看排队情况,若磁盘util高则优先扩展盘或优化IO调度、队列深度、或改用更高规格盘。
15.
问答:在台湾多AZ部署对读写有什么帮助?
问:多可用区部署会不会提高写性能?答:多AZ主要提高可用性与读扩展(读副本部署跨AZ)。写操作受单节点磁盘能力与一致性策略影响,建议采用主从复制、异步复制或分布式存储(如Ceph/RADOS)按需求权衡延迟与一致性。
来源:高并发场景下台湾存储服务器云服务器的读写性能优化方案