磁盘IO过高存储阵列扩容优化站点响应
问题现象与排查准备
网站突然打开变慢,后台操作卡顿,甚至出现502超时。
很多时候罪魁祸首是磁盘IO过高,也就是硬盘读写能力跟不上业务需求。
在你准备存储阵列扩容之前,先确认一下当前的IO状况:
- 登录服务器,运行
iostat -x 1 3查看%util和await值。如果%util长期接近100% 且await超过几十毫秒,说明磁盘确实饱和了。 - 用
df -h查看磁盘使用率,如果接近满也会加剧IO压力。 - 检查网站日志(如
/var/log/nginx/access.log)是否存在大量慢查询或攻击流量。
准备工作:
- 确保服务器已安装
sysstat(iostat所在包)和lvm2(如果使用LVM)。 - 备份重要数据。
- 如果是云服务器,提前在控制台扩容云硬盘;如果是物理机,准备新硬盘并接入。
存储阵列扩容实操(以LVM扩容为例)
假设你的存储阵列是一个LVM卷组,需要为数据盘增加空间。
以下步骤在CentOS 7/8或Ubuntu 20.04+上通用:
- 识别新硬盘:运行
lsblk或fdisk -l,新硬盘通常显示为/dev/sdb(未分区)。 - 分区或直接使用:如果新盘没有分区,用
fdisk /dev/sdb创建一个大分区n>p> 默认 >w。或者直接使用裸设备(建议分区)。 - 创建物理卷:
pvcreate /dev/sdb1 - 扩展卷组:
vgextend 你的卷组名称 /dev/sdb1。卷组名称可通过vgdisplay查看。 - 扩展逻辑卷:假设逻辑卷为
/dev/你的卷组/数据逻辑卷,想增加50G:lvextend -L +50G /dev/你的卷组/数据逻辑卷 - 调整文件系统:如果你的文件系统是 ext4,运行
resize2fs /dev/你的卷组/数据逻辑卷;如果是 xfs,运行xfs_growfs /挂载点。 - 使用
df -h确认空间已增加。
如果是云硬盘扩容(如阿里云、
腾讯云),
直接在控制台扩容磁盘后,
在系统内执行 echo 1 > /sys/block/sda/device/rescan 识别新空间,
然后同样使用 growpart 和 resize2fs/xfs_growfs 扩容分区和文件系统。
避坑指南与优化技巧
扩容后如果IO仍然偏高,可能是IO调度器或文件系统挂载参数需要优化:
- 检查当前IO调度器:
cat /sys/block/sda/queue/scheduler。建议对SSD使用none或mq-deadline,机械盘使用deadline。临时设置:echo deadline > /sys/block/sda/queue/scheduler。 - 挂载参数增加
noatime,nodiratime减少磁盘写入:修改/etc/fstab对应行,加上参数后mount -o remount /数据盘。 - 如果是数据库服务器,考虑将数据库文件放在单独的SSD存储阵列中,提升随机读写能力。
常见问题:
- 扩容后文件系统显示大小没变?忘记执行
resize2fs或xfs_growfs。 lvextend时提示没有足够空闲PE?确认卷组中有可用空间,用vgdisplay查看 Free PE。- 扩容后网站依然慢?检查是否有其他瓶颈(内存不足、CPU满、网络延迟)。
验证站点响应效果
扩容优化后,综合验证站点响应是否改善:
- 再次运行
iostat -x 1 3,观察%util是否下降,await和svctm是否缩短。 - 使用 curl 或浏览器访问网站首页,记录响应时间。可用
time curl -o /dev/null -s -w '%{time_total}' http://你的域名。 - 如果网站有压力测试环境,用
ab -n 1000 -c 100 你的URL测试并发下的平均响应时间。 - 检查网站日志,确认没有新的超时记录。
如果一切正常,你的磁盘IO过高问题已经通过存储阵列扩容得到缓解,站点响应速度明显提升。
如果仍有问题,建议进一步排查软件层面的缓存优化或升级硬件。
遇到问题? 常见报错如 resize2fs: Device or resource busy,需先卸载分区(在维护窗口执行)或使用 lvextend -r 一并扩容。
如果是云环境扩容后无法识别新空间,检查控制台是否已挂载并重启实例。