那天晚上十一点多,我盯着第三台 ECS 的开机画面,心情复杂。
事情是这样的:网站火了(好吧,相对而言),一台机器扛不住,加了一台。加完第二天就有用户反馈:上传的图片,刷新一下有时消失,有时变成另一个人的头像。
我第一反应是程序有 bug,翻日志翻到半夜,最后发现是极其朴素的问题——两台机器各自挂了块本地盘,附件都传在自己的 /data/upload 里,谁也不认识谁。用户这次请求落到 A 机器,图片存 A;下次请求被负载均衡分到 B 机器,B 机器上一看:没有这图。
当时我的解决方案充满了草根智慧:写个 rsync 定时任务,每分钟把 A 的附件目录同步给 B。能跑,但是:高峰期同步延迟内新传的图照样 404;两台机器互相同步,有一晚还打起了架,同一个目录越滚越大,磁盘报警响了一宿。
后来运维朋友一句话点醒我:「你需要的不是同步,是他们看同一块盘。」
NAS 是个啥?人话版
NAS(文件存储)你可以理解成云上的一个网络共享硬盘:它不属于任何一台 ECS,而是挂在旁边,所有机器都通过网络把同一个目录挂载到自己本地,像操作本地文件夹一样读写。
- A 机器写进去的文件,B 机器立刻能看到——因为它俩看的就是同一份数据;
- 容量不用预购,写多少算多少,随删随减(这点比买云盘良心多了,云盘买了 500G 就是 500G,用 1G 也是 500G 的钱);
- Linux 走 NFS 协议挂载,Windows 走 SMB,两边都能接。
既然都在阿里云上,顺手把文件存储 NAS 的产品页挂这儿,规格和价格以官方页面实时展示为准,下面我引用的数字也是写稿当天从页面上抄的。
三种型号怎么选?一张表
我第一次打开控制台也是懵的:通用容量型、通用高级型、通用性能型、极速型……名字跟绕口令似的。看完官方说明后给你压成一张表:
| 型号 | 时延 | 适合干什么 | 写稿时页面价(每月/GB) |
|---|---|---|---|
| 通用容量型 | 10 毫秒级 | 附件、备份、日志、代码库——「能用就行」型数据 | 0.30 元(配低频介质低至 0.19 元) |
| 通用高级型 | 毫秒级 | 网站、容器共享存储这类有点性能要求的 | 0.73 元 |
| 通用性能型 | 毫秒级 | 高吞吐场景 | 1.641 元 |
| 极速型 | 百微秒级 | 数据库类低延迟需求,IOPS 15K~200K 随容量扩 | 1.62 元 |
我的附件目录场景,选通用容量型就够了——图片视频本来就是「写一次读多次」的东西,毫秒级延迟用户根本感知不到,没必要为感知不到的性能多掏一倍多的钱。
另外这页面还藏了个省钱开关:生命周期管理。通用型 NAS 可以设规则,把 30 天没人访问的冷数据自动搬到「低频存储」(0.15 元/GB/月),更冷的搬「归档存储」(0.05 元/GB/月)。三年前的老照片、去年的备份包全给它降级处理,存储成本直接砍掉一大截。这个功能对「数据只进不出」的附件目录简直是量身定做。
动手:从创建到挂上,十分钟的事
以 Linux(NFS)为例,步骤少得令人发指:
1. 控制台创建文件系统。选个和 ECS 相同的地域(跨地域挂载要走别的方式,别给自己找事),可用区建议和 ECS 一致,延迟最低。
2. 添加挂载点。选「专有网络」类型,它会自动生成一个挂载地址,形如 xxxxxxx.cn-hangzhou.nas.aliyuncs.com。
3. 权限组放行。默认权限组记得把规则对准自己 VPC 的网段——这是我后面踩的第一个坑,先按下不表。
4. ECS 上装 NFS 客户端并挂载:
# CentOS / Alibaba Cloud Linux
sudo yum install -y nfs-utils
# Ubuntu / Debian
sudo apt-get install -y nfs-common
# 创建本地挂载点
sudo mkdir -p /data/upload
# 挂载(把地址换成你自己的挂载点)
sudo mount -t nfs -o vers=3,nolock,proto=tcp,noresvport \
xxxxxxx.cn-hangzhou.nas.aliyuncs.com:/ /data/upload
# 写进 fstab,重启也不掉
echo 'xxxxxxx.cn-hangzhou.nas.aliyuncs.com:/ /data/upload nfs vers=3,nolock,proto=tcp,noresvport 0 0' | sudo tee -a /etc/fstab
5. 把原来散落在各台机器本地的附件目录 rsync 进去,然后应用配置里把上传路径指向 /data/upload。齐活。
之后再加第四台、第五台机器,什么都不用改——新机器挂载同一个目录,附件天然共享。那一刻我是真的体会到「把状态收拢到一处」的快乐,比什么分布式理论都治愈。
我踩过的三个坑,你们绕着走
坑一:挂载报错 access denied,查了半天是权限组。 NAS 的访问控制不在安全组里,而在文件系统的「权限组」里。我创建挂载点时权限组规则只放行了某个网段,新加的 ECS 在另一个交换机网段,直接被拒。解法:权限组规则覆盖自己 VPC 的网段(最省事是整个 VPC 段,内网反正外人进不来),别学我一个个网段试错。
坑二:/etc/fstab 写错,机器重启卡在挂载等一分钟后才进系统。 fstab 里挂载失败默认会干等。建议加 _netdev 选项表明这是网络设备,系统会晚一点再挂;再佛系一点可以上 autofs 按需挂载。别问我是怎么知道重启 90 秒有多煎熬的。
坑三:把 NAS 当数据库盘用。 有段时间我想偷懒,把 MySQL 的 datadir 直接放 NAS 上。通用型 NAS 的时延是毫秒级,数据库这种每条 SQL 都要来回 IO 的主,跑起来那个酸爽……后来老老实实换回云盘。NAS 是共享文件的好手,不是块存储的平替,别拧着用。
这笔账算下来,比想象中便宜
最后算算钱,以写稿时页面价为准:附件目录现在 300GB 左右,通用容量型 0.30 元/GB/月,一个月 90 块;挂上生命周期规则后,假设 200GB 冷数据进了低频(0.15 元/GB/月),一个月就是 30 + 30 = 60 块左右。
而它替我省下的:两块 500G 云盘的重复采购(我原本给每台机器都买了大容量盘「以备同步」)、rsync 同步任务的运维心智、以及那次双向同步打架之后差点买挂载型服务器的冲动消费。共享替代冗余,本身就是最便宜的架构优化。
一句话总结:如果你的应用会扩到一台以上服务器,附件、日志、缓存文件这类共享需求,第一天就该上 NAS,别等 rsync 给你上一课。
(价格、规格均以官方页面实时展示为准;文中参数写稿时从产品页与帮助文档抄录,改版了别骂我。)

