1.
基础选型:实例与存储类型
- 选择靠近用户与数据库的可用区(AZ),优先使用本地 NVMe 或云厂商的高性能 SSD(如 AWS gp3/io2、GCP PD-SSD)。
- 若是高并发写密集型,优先 io2/io2 Block Express 或本地 NVMe;只读/缓存型可选 gp3 并配合 Provisioned IOPS。
- 建议步骤:确认机房(新加坡 ap-southeast-1),在控制台选择实例家族(计算/存储优化),选择磁盘类型并预估 IOPS。
2.
磁盘分区与RAID方案
- 如果使用多盘,可用 mdadm 做 RAID0(性能)或 RAID10(性能+冗余)。示例:sudo mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/nvme0n1 /dev/nvme1n1。
- 磁盘对齐:使用 fdisk 或 parted 创建分区,确保 1MiB 对齐(fdisk 默认)。
- 建议:性能优先选 RAID0 + 定期快照备份,关键数据选 RAID10。
3.
文件系统选择与格式化
- 推荐 XFS(大文件/高并发)或 ext4(兼容性好)。
- 格式化命令示例:sudo mkfs.xfs -f -n ftype=1 /dev/md0 或 sudo mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md0。
- 对数据库数据盘建议启用 XFS 的 ftype=1,以支持 fallocate 等操作。
4.
挂载参数与性能优化
- /etc/fstab 示例(XFS):/dev/md0 /data xfs defaults,noatime,nodiratime,allocsize=8m 0 0。
- 对 SSD 可加 discard(注意性能影响),常用 noatime,nodiratime 可以减少写入。
- 对数据库日志盘建议单独挂载并使用 barrier/flush 设置(见后续内核与 DB 调优)。
5.
I/O 调度器与队列深度
- 查看当前调度器:cat /sys/block/nvme0n1/queue/scheduler。推荐对 NVMe 使用 none 或 mq-deadline。切换示例:echo none | sudo tee /sys/block/nvme0n1/queue/scheduler。
- 增大队列深度:echo 1024 | sudo tee /sys/block/nvme0n1/queue/nr_requests 或针对 nvme tunables 调整 queue_depth。根据实际 fio 压测结果微调。
6.
内核参数(sysctl)调优
- /etc/sysctl.conf 增加:vm.swappiness=10;vm.dirty_ratio=15;vm.dirty_background_ratio=5。
- 网络相关(若远程读写):net.core.somaxconn=65535;net.ipv4.tcp_max_syn_backlog=4096。应用:sudo sysctl -p。
- 对延迟敏感场景降低 dirty_ratio 和 dirty_background_ratio,减少写回突发。
7.
数据库(MySQL/InnoDB)细项调整
- innodb_buffer_pool_size 设置为物理内存的 60-75%。
- innodb_flush_method=O_DIRECT+O_DSYNC(或O_DIRECT),避免双缓存;innodb_log_file_size 设为适中(256M-1G)并测试恢复时间。
- innodb_io_capacity 和 innodb_io_capacity_max 根据磁盘 IOPS 设置,例如 gp3 可设置为 1000-3000。修改 my.cnf 后重启 MySQL 并观察缓冲池命中率与磁盘写延迟。
8.
缓存与读加速策略
- 使用内存缓存(Redis/Memcached)减轻后端存储读压力。将热表或索引加载到缓存层。
- 对静态内容使用 CDN(新加坡边缘节点),减轻源站 I/O。
- 对数据库可启用查询缓存/应用级缓存与分片策略。
9.
基准测试:fio 与 ioping 实战
- fio 随机读写命令示例:sudo fio --name=randrw --filename=/data/testfile --rw=randrw --bs=4k --size=4G --numjobs=8 --iodepth=32 --time_based --runtime=60 --group_reporting。
- ioping 用于探测延迟:ioping -c 10 /data。
- 建议在每次改动后运行基准并记录:吞吐(IOPS/MBps)、延迟(avg/p95/p99)、CPU 使用率。
10.
监控、告警与备份策略
- 部署 Prometheus + Grafana 监控磁盘 I/O、队列长度、I/O等待时间、fsync 延迟与数据库慢查询。
- 设置阈值告警(如 p99 延迟 > 50ms)。定期做快照与备份,RAID 不是备份,结合增量快照与跨区复制。
11.
问:在新加坡机房最容易忽视的性能陷阱有哪些?
常见陷阱是选错磁盘类型(把高并发负载放在标准 HDD 或低 IOPS 的盘),没有禁用 atime,默认 I/O 调度器不适配 NVMe,以及没有做基准测试就上线。避免方法是使用本地 NVMe 或高 IOPS SSD、设置 noatime、选择合适调度器并用 fio 压测验证。
12.
问:我该如何逐步验证调优是否生效?
答:每次改动前后运行相同的基准(fio),记录 IOPS、带宽与延迟(avg/p95/p99)。同时观察 sysstat/iostat 的 %iowait 与队列长度(avgqu-sz)。改动应在低峰期逐步上线并保留历史数据以便回滚。
13.
问:在云环境(如 AWS 新加坡)有哪些厂家特定建议?
答:在 AWS 上优先选择 gp3 或 io2/io2 Block Express,根据需要预置 IOPS;使用 EBS 直连或本地 NVMe 并启用吞吐型实例;将 EBS 卷分配到独立吞吐通道(吞吐优化实例);使用 placement group(cluster)以降低网络延迟并确保跨 AZ 的备份与复制策略。
来源:部署建议让新加坡服务器速读怎么样发挥最佳读写性能