EBS 块存储
Amazon Elastic Block Store (EBS) 提供 EC2 实例的持久化块存储。
核心概念
什么是块存储
块存储 vs 对象存储 vs 文件存储:
块存储(EBS)
├─ 数据以块为单位存储
├─ 需要文件系统(ext4、xfs)
├─ 低延迟、高性能
└─ 适合:数据库、操作系统
对象存储(S3)
├─ 数据以对象为单位存储
├─ 通过 HTTP API 访问
├─ 无限扩展、低成本
└─ 适合:静态文件、备份
文件存储(EFS)
├─ 提供文件系统接口
├─ 支持并发访问
├─ NFS 协议
└─ 适合:共享文件、内容管理
EBS 架构
┌────────────────────────────────────┐
│ 可用区 (Availability Zone) │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ EC2 │──────│ EBS │ │
│ │ Instance │ 附加 │ Volume │ │
│ └──────────┘ └──────────┘ │
│ │
│ ┌─────────────────────────────┐ │
│ │ EBS 快照(Snapshot) │ │
│ │ 存储在 S3(跨可用区) │ │
│ └─────────────────────────────┘ │
└────────────────────────────────────┘
关键特性:
- 可用区级别:卷与实例必须在同一可用区
- 持久化:数据在实例终止后仍然保留
- 独立生命周期:可以独立于实例存在
- 可附加/分离:可以在实例间移动
EBS 卷类型
1. 通用型 SSD (gp3/gp2)
gp3(推荐):
特性:
├─ 基准性能:3,000 IOPS,125 MB/s
├─ 可扩展:最高 16,000 IOPS,1,000 MB/s
├─ 容量:1 GB - 16 TB
├─ 价格:$0.08/GB/月(独立计费 IOPS 和吞吐量)
└─ 适合:大多数工作负载
gp2(旧一代):
- 性能与容量绑定:3 IOPS/GB
- 最小 100 IOPS,最大 16,000 IOPS
- 爆发性能:小卷可临时提升到 3,000 IOPS
何时选择:
- 启动卷
- 开发/测试环境
- 中小型数据库
- 虚拟桌面
2. 预配置 IOPS SSD (io2/io1)
io2 Block Express:
性能:
├─ IOPS:最高 256,000
├─ 吞吐量:最高 4,000 MB/s
├─ 延迟:亚毫秒级
├─ 容量:4 GB - 64 TB
└─ 耐久性:99.999%
io2:
- IOPS:最高 64,000
- 容量:4 GB - 16 TB
- 价格:$0.125/GB + $0.065/IOPS
何时选择:
- 关键业务应用
- 大型数据库(Oracle、SAP HANA)
- 需要一致的高性能
- 低延迟要求
3. 吞吐量优化 HDD (st1)
特性:
性能:
├─ 基准吞吐量:40 MB/s/TB
├─ 最大吞吐量:500 MB/s
├─ 爆发吞吐量:250 MB/s/TB
├─ 容量:125 GB - 16 TB
└─ 价格:$0.045/GB/月
何时选择:
- 大数据处理
- 日志处理
- 数据仓库
- 顺序读写为主
4. 冷 HDD (sc1)
特性:
- 最低成本:$0.015/GB/月
- 基准吞吐量:12 MB/s/TB
- 最大吞吐量:250 MB/s
- 不常访问的数据
何时选择:
- 归档存储
- 不频繁访问的数据
- 成本优先
卷类型对比
| 类型 | IOPS | 吞吐量 | 延迟 | 价格 | 使用场景 |
|---|---|---|---|---|---|
| gp3 | 3K-16K | 125-1000 MB/s | 单位毫秒 | $0.08/GB | 通用 |
| io2 | 100-64K | 1000 MB/s | 亚毫秒 | $0.125/GB | 数据库 |
| st1 | - | 40-500 MB/s | 毫秒级 | $0.045/GB | 大数据 |
| sc1 | - | 12-250 MB/s | 毫秒级 | $0.015/GB | 归档 |
EBS 性能优化
IOPS 和吞吐量
理解性能指标:
IOPS(每秒 I/O 操作数)
├─ 衡量:随机读写性能
├─ 影响因素:
│ ├─ I/O 大小
│ ├─ 卷类型
│ └─ 实例类型
└─ 适用场景:数据库、OLTP
吞吐量(MB/s)
├─ 衡量:数据传输速率
├─ 影响因素:
│ ├─ I/O 大小
│ ├─ 卷类型
│ └─ 网络带宽
└─ 适用场景:大文件、流处理
性能计算:
IOPS 与吞吐量的关系:
吞吐量 = IOPS × I/O 大小
示例:
- 16KB I/O,1000 IOPS
- 吞吐量 = 1000 × 16KB = 16 MB/s
- 256KB I/O,1000 IOPS
- 吞吐量 = 1000 × 256KB = 256 MB/s
性能瓶颈
1. 实例限制:
- 每个实例有 EBS 带宽上限
- t3.micro:最大 2,085 Mbps(约 260 MB/s)
- m5.large:最大 4,750 Mbps(约 593 MB/s)
2. 网络限制:
- EBS 卷通过网络附加
- 与实例网络带宽共享
- 大量网络流量影响 EBS 性能
3. 卷性能限制:
- 每个卷有自己的性能上限
- 多个卷可以聚合性能
- RAID 0 提升吞吐量
优化策略
1. 预热卷:
# 从快照创建的卷需要预热
# 读取所有块以达到最佳性能
sudo fio --filename=/dev/xvdf \
--rw=read \
--bs=128k \
--iodepth=32 \
--ioengine=libaio \
--direct=1 \
--name=volume-initialize
2. 使用 EBS 优化实例:
- 专用 EBS 带宽
- 不与网络流量竞争
- 建议:所有生产实例启用
3. 选择合适的卷类型:
- 数据库:io2(一致性能)
- 通用应用:gp3(性价比)
- 大数据:st1(高吞吐量)
4. 监控性能:
关键指标:
├─ VolumeReadOps/WriteOps(IOPS)
├─ VolumeReadBytes/WriteBytes(吞吐量)
├─ VolumeThroughputPercentage(吞吐量使用率)
├─ VolumeIdleTime(空闲时间)
└─ BurstBalance(爆发余额,gp2)
EBS 快照
快照机制
增量备份:
第一次快照(完整备份)
├─ 复制所有数据块
├─ 存储在 S3(跨可用区)
└─ 持久化存储
后续快照(增量)
├─ 仅复制变更的块
├─ 引用之前快照的未变更块
└─ 节省存储成本
快照链:
Snap1(完整) → Snap2(增量) → Snap3(增量)
└─────────────┴─────────────┘
可以独立删除任意快照
跨区域复制:
- 灾难恢复
- 地理扩展
- 合规要求
快照策略
自动化快照:
AWS Data Lifecycle Manager (DLM)
├─ 定义快照策略
│ ├─ 创建频率(每小时/天/周)
│ ├─ 保留策略(7 天/30 天/1 年)
│ └─ 标签过滤
├─ 自动执行
└─ 跨区域复制
最佳实践:
- 生产环境:每日快照,保留 7-30 天
- 关键数据:每小时快照,跨区域复制
- 测试环境:每周快照,保留 7 天
- 重要变更前:手动快照
快照成本:
计费:$0.05/GB/月(标准存储)
示例:
- 100 GB 卷
- 每日快照,保留 30 天
- 平均变更率 10%
成本 = 100GB(首次)+ 10GB×29(增量)
= 390GB × $0.05 = $19.50/月
数据保护
加密
EBS 加密:
加密流程:
数据 → AES-256 加密 → 存储
↑
KMS 密钥管理
加密范围:
├─ 卷上的静态数据
├─ 卷与实例间的传输数据
├─ 快照
└─ 从快照创建的卷
默认加密:
- 可以在区域级别启用
- 新卷自动加密
- 无性能损失
密钥管理:
- AWS 托管密钥(免费)
- 客户管理密钥(KMS,$1/月)
- 细粒度权限控制
多附加(Multi-Attach)
io2 卷特性:
单个卷附加到多个实例
├─ 最多 16 个实例(同一可用区)
├─ 需要集群感知文件系统
│ └─ GFS2、OCFS2
├─ 用于共享存储
└─ 高可用集群
使用场景:
- 高可用数据库
- 共享应用服务器
- Teradata 等分析平台
成本优化
1. 选择合适的卷类型
场景分析:
小型数据库(< 500 IOPS)
→ gp3(成本最优)
大型数据库(> 5000 IOPS)
→ io2(性能保证)
日志存储(顺序写)
→ st1(吞吐量优化)
归档数据(很少访问)
→ sc1(最低成本)
2. 删除未使用的卷
# 查找未附加的卷
aws ec2 describe-volumes \
--filters Name=status,Values=available \
--query 'Volumes[*].[VolumeId,Size,CreateTime]' \
--output table
# 清理
aws ec2 delete-volume --volume-id vol-xxxxx
3. 快照管理
- 删除过期快照
- 使用 DLM 自动化
- 跨账户共享快照(避免重复)
4. 监控使用率
低使用率卷:
├─ VolumeIdleTime > 90%
├─ 考虑缩小容量
└─ 或更换为 sc1
故障排查
常见问题
1. 卷无法附加:
- 检查可用区是否匹配
- 验证卷状态(available)
- 检查设备名称冲突
- 查看 IAM 权限
2. 性能不足:
- 检查实例类型限制
- 验证 EBS 优化是否启用
- 查看 CloudWatch 指标
- 考虑升级卷类型
3. 空间不足:
# 在线扩容(无需停机)
aws ec2 modify-volume \
--volume-id vol-xxxxx \
--size 200
# 扩展文件系统
sudo growpart /dev/xvdf 1
sudo resize2fs /dev/xvdf1
4. 数据丢失风险:
- 启用自动快照
- 测试恢复流程
- 跨区域复制关键数据
EBS 是 AWS 上最常用的存储服务,理解其性能特性和最佳实践是运维的基础技能!