Amazon EBS (Elastic Block Store)
Elastic Block Store, Volume Types, Snapshots, Encryption
EBS là gì?
Amazon Elastic Block Store (EBS) là dịch vụ block storage có hiệu suất cao, được thiết kế để sử dụng với Amazon EC2. EBS cho phép bạn tạo các storage volumes và attach vào EC2 instances.
Đặc điểm chính:
- Hoạt động như ổ cứng ảo (virtual hard drive) cho EC2
- Dữ liệu được lưu trữ độc lập với vòng đời của EC2 instance
- Có thể detach từ instance này và attach vào instance khác (cùng Availability Zone)
- Tự động replicate trong một Availability Zone để đảm bảo durability
📖 Nguồn: What is Amazon EBS?
Ví dụ thực tế: EBS dùng để làm gì?
Scenario 1: Web Server với Database
Lợi ích:
- Stop EC2 → dữ liệu MySQL vẫn còn
- Terminate EC2 → data volume vẫn giữ được (nếu set
DeleteOnTermination=false) - Tạo snapshot → backup database trước khi upgrade
Scenario 2: Disaster Recovery
Root Volume vs Data Volume
Root Volume là gì?
Khi launch EC2, AWS tự động tạo Root Volume từ AMI. Đây là EBS volume chứa toàn bộ hệ điều hành:
Ví dụ: Bạn launch EC2 Ubuntu, cài đặt nginx, nodejs, mysql → tất cả đều nằm trong root volume.
Tạo EBS Volume mới
Khi bạn tạo EBS volume mới (không từ snapshot) → ổ cứng trống với size bạn chọn.
2 cách tạo EBS Volume
| Cách tạo | Kết quả |
|---|---|
| Tạo mới (blank) | Ổ trống, cần format |
| Tạo từ Snapshot | Có sẵn data và filesystem |
So sánh Root Volume vs Data Volume
| Đặc điểm | Root Volume | Data Volume |
|---|---|---|
| Tạo bởi | AWS (khi launch EC2) | Bạn (tự tạo) |
| Nội dung ban đầu | OS từ AMI | Trống hoặc từ snapshot |
| Mount point | / | Bạn chọn (vd: /data) |
| DeleteOnTermination mặc định | true (bị xóa) | false (giữ lại) |
Stop vs Terminate EC2
| Hành động | Root Volume | Data Volume |
|---|---|---|
| Stop | ✅ Giữ nguyên | ✅ Giữ nguyên |
| Terminate | ❌ Mặc định bị XÓA | ✅ Mặc định giữ lại |
⚠️ Nếu muốn giữ root volume sau terminate → set
DeleteOnTermination=false
Best Practice: Tách data ra volume riêng
Tại sao không dùng root volume cho tất cả + snapshot?
Câu hỏi: "Chỉ cần root volume rồi snapshot là được, sao phải tách data volume?"
Trả lời: Có thể, nhưng có nhiều vấn đề:
1. Rủi ro DeleteOnTermination
2. Snapshot lớn hơn, tốn tiền hơn
3. Restore chậm hơn
4. Không thể attach vào instance khác
5. Không thể dùng volume type khác nhau
Khi nào dùng root volume cho tất cả?
| Scenario | Chỉ root volume | Tách data volume |
|---|---|---|
| Dev/test tạm thời | ✅ OK | Không cần |
| Stateless app | ✅ OK | Không cần |
| Production database | ❌ Rủi ro | ✅ Nên tách |
| Data quan trọng | ❌ Rủi ro | ✅ Nên tách |
EBS vs Instance Store
| Đặc điểm | EBS | Instance Store |
|---|---|---|
| Persistence | ✅ Persistent (dữ liệu giữ lại sau stop/terminate) | ❌ Ephemeral (mất khi stop/terminate) |
| Detach/Attach | ✅ Có thể | ❌ Không thể |
| Backup | ✅ Snapshots | ❌ Không có |
| Use case | Database, boot volumes | Cache, temporary data |
Root Volume: EBS-backed vs Instance Store-backed
EC2 instance có thể có root volume là EBS hoặc Instance Store, tùy vào AMI:
| EBS-backed Root | Instance Store-backed Root | |
|---|---|---|
| Stop instance | ✅ Có thể | ❌ Không (chỉ Terminate) |
| Data persistence | ✅ Tồn tại sau Stop | ❌ Mất khi Stop/Terminate |
| Boot time | Chậm hơn (network) | Nhanh hơn (local disk) |
| Resize | ✅ Có thể | ❌ Không |
| Snapshot | ✅ Có | ❌ Không |
| AMI support | Hầu hết AMIs | Một số AMIs cũ/đặc biệt |
💡 Thực tế: AWS mặc định tạo EBS-backed instances. Instance Store-backed chủ yếu cho workloads đặc biệt cần local disk performance.
Delete on Termination
| Volume Type | Default DeleteOnTermination | Terminate EC2 → EBS? |
|---|---|---|
| Root Volume | ✅ TRUE (bật) | Bị xóa |
| Additional Volumes | ❌ FALSE (tắt) | Giữ lại |
Cách giữ Root Volume sau Terminate:
⚠️ Tóm lại:
- Stop → EBS root volume vẫn còn ✅
- Terminate → EBS root volume bị xóa (mặc định)
- Muốn giữ sau Terminate → Tắt "Delete on Termination"
Các loại EBS Volume
IOPS vs Throughput là gì?
Trước khi xem các loại volume, cần hiểu 2 khái niệm:
IOPS (Input/Output Operations Per Second)
IOPS = số lần đọc/ghi mỗi giây
Đặc điểm: Nhiều thao tác nhỏ, truy cập ngẫu nhiên (random I/O)
Throughput (Băng thông)
Throughput = lượng data truyền mỗi giây (MB/s, MiB/s)
Đặc điểm: Ít thao tác nhưng data lớn, đọc tuần tự (sequential I/O)
So sánh IOPS vs Throughput
| IOPS | Throughput | |
|---|---|---|
| Đo gì | Số lần đọc/ghi | Lượng data/giây |
| Đơn vị | operations/s | MiB/s |
| Workload | Database, random access | Video streaming, big data |
| Ví dụ | 10,000 queries nhỏ/giây | Copy file 500MB/giây |
Ví dụ thực tế
SSD-backed Volumes (cho IOPS workloads)
| Type | Volume Type | Use Cases | Size | Max IOPS | Max Throughput |
|---|---|---|---|---|---|
| gp3 | General Purpose SSD | Boot volumes, dev/test, low-latency apps | 1 GiB - 64 TiB | 80,000 | 2,000 MiB/s |
| gp2 | General Purpose SSD | Boot volumes, virtual desktops | 1 GiB - 16 TiB | 16,000 | 250 MiB/s |
| io2 Block Express | Provisioned IOPS SSD | Critical databases, sub-millisecond latency | 4 GiB - 64 TiB | 256,000 | 4,000 MiB/s |
| io1 | Provisioned IOPS SSD | I/O-intensive databases | 4 GiB - 16 TiB | 64,000 | 1,000 MiB/s |
HDD-backed Volumes (cho throughput workloads)
| Type | Volume Type | Use Cases | Size | Max IOPS | Max Throughput |
|---|---|---|---|---|---|
| st1 | Throughput Optimized HDD | Big data, data warehouses, log processing | 125 GiB - 16 TiB | 500 | 500 MiB/s |
| sc1 | Cold HDD | Infrequent access, lowest cost | 125 GiB - 16 TiB | 250 | 250 MiB/s |
Lưu ý quan trọng
- Boot volume: Chỉ SSD volumes (gp2, gp3, io1, io2) được dùng làm boot volume
- gp3 vs gp2: gp3 mới hơn, cho phép configure IOPS và throughput độc lập
- io2 Block Express: Durability 99.999% (0.001% annual failure rate)
- Các loại khác: Durability 99.8%-99.9% (0.1%-0.2% annual failure rate)
📖 Nguồn: Amazon EBS volume types
EBS Snapshots
Snapshot là bản backup point-in-time của EBS volume, được lưu trữ trên Amazon S3.
Incremental Snapshots (chỉ backup phần thay đổi)
Lợi ích: Tiết kiệm storage cost, tạo snapshot nhanh hơn.
Snapshot vs Volume
| EBS Volume | EBS Snapshot | |
|---|---|---|
| Lưu ở đâu | Trong 1 AZ | S3 (across AZs) |
| Truy cập | Attach vào EC2 | Không truy cập trực tiếp |
| Dùng để | Đọc/ghi data | Backup, restore, copy |
| Giới hạn AZ | Bị lock trong 1 AZ | Có thể copy cross-region |
Use Cases
1. Backup trước khi làm gì đó nguy hiểm:
2. Migrate data sang AZ/Region khác:
3. Share data với account khác:
Các lệnh với Snapshot
Snapshot Lifecycle
Lưu ý quan trọng
| Điều cần biết | Chi tiết |
|---|---|
| Snapshot đang tạo | Volume vẫn dùng được bình thường |
| Consistency | Nên stop I/O hoặc unmount trước khi snapshot (đặc biệt với DB) |
| Xóa snapshot giữa | Không mất data, AWS tự merge |
| Encrypted volume | Snapshot cũng encrypted |
| Lazy loading | Volume từ snapshot có thể chậm lúc đầu (data load từ S3) |
EBS Snapshot Archive
- Tier lưu trữ giá rẻ hơn 75%
- Yêu cầu lưu tối thiểu 90 ngày
- Thời gian restore: 24-72 giờ
- Dùng cho: compliance, long-term backup
Fast Snapshot Restore (FSR)
Giải quyết vấn đề lazy loading:
Chi phí: ~$0.75/snapshot/AZ/giờ (đắt, chỉ dùng khi cần performance ngay)
EBS Encryption
Amazon EBS encryption sử dụng AWS KMS keys để mã hóa:
- Data at rest trong volume
- Data in transit giữa volume và instance
- Tất cả snapshots được tạo từ volume
- Tất cả volumes được tạo từ encrypted snapshots
Lưu ý:
- Encryption xảy ra trên EC2 host servers (transparent với instance)
- Minimal impact on latency
- Có thể enable encryption by default cho tất cả new volumes trong account
EBS Multi-Attach
Cho phép attach một io1/io2 volume vào nhiều EC2 instances cùng lúc (trong cùng AZ).
Tại sao cần Multi-Attach?
Vấn đề: Failover chậm khi không có Multi-Attach
Giải pháp: Multi-Attach
Ví dụ: Oracle RAC (Database Cluster)
Oracle RAC = nhiều servers chạy cùng 1 database
Tại sao RAC cần shared storage?
Các Database khác có cần Multi-Attach không?
KHÔNG! Đa số database dùng Replication, không cần shared storage.
So sánh các Database
| Database | Cách Clustering | Cần Multi-Attach? |
|---|---|---|
| Oracle RAC | Shared Storage | ✅ Cần |
| SQL Server FCI | Shared Storage | ✅ Cần |
| MySQL | Replication | ❌ Không |
| PostgreSQL | Replication | ❌ Không |
| MongoDB | Replica Set | ❌ Không |
| Redis | Replication | ❌ Không |
So sánh Shared Storage vs Replication
| Shared Storage (Oracle RAC) | Replication (MySQL, PostgreSQL) | |
|---|---|---|
| Write | Vào bất kỳ node | Chỉ vào Primary |
| Data | 1 bản, shared | Nhiều bản, copy |
| Độ trễ | Không có | Có (1-2 giây) |
| Cần Multi-Attach | ✅ Có | ❌ Không |
| Phổ biến | Enterprise (ngân hàng) | Đa số ứng dụng |
Giới hạn Multi-Attach
| Giới hạn | Chi tiết |
|---|---|
| Volume type | Chỉ io1 và io2 |
| Số instances | Tối đa 16 |
| AZ | Tất cả instances phải cùng AZ |
| OS | Chỉ Linux |
| File system | Cần cluster-aware FS (GFS2, OCFS2) |
Cách bật Multi-Attach
Khi nào dùng Multi-Attach?
| Scenario | Dùng Multi-Attach? |
|---|---|
| Oracle RAC, SQL Server FCI | ✅ Cần |
| MySQL, PostgreSQL cluster | ❌ Dùng Replication |
| AWS managed (RDS, Aurora) | ❌ AWS lo hết |
| Web app thông thường | ❌ Không cần |
Những điều cần AWARE khi dùng Multi-Attach
1. Data Corruption nếu không dùng đúng File System
Giải pháp: PHẢI dùng Cluster-aware File System:
| File System | Hỗ trợ Multi-Attach |
|---|---|
| ext4, xfs | ❌ KHÔNG - sẽ corrupt data |
| GFS2 (Red Hat) | ✅ Có |
| OCFS2 (Oracle) | ✅ Có |
2. Application phải hỗ trợ Shared Storage
Không phải app nào cũng dùng được Multi-Attach!
3. I/O Fencing (tránh Split-Brain)
4. Tất cả instances phải cùng AZ
→ Nếu cần cross-AZ → dùng EFS thay vì EBS Multi-Attach
5. Chi phí cao
6. Không tự động sync application state
Checklist trước khi dùng Multi-Attach
| Kiểm tra | Đã làm? |
|---|---|
| App hỗ trợ shared storage (Oracle RAC, SQL Server FCI)? | ☐ |
| Dùng cluster-aware file system (GFS2, OCFS2)? | ☐ |
| Tất cả instances cùng AZ? | ☐ |
| Đã cấu hình I/O fencing? | ☐ |
| Dùng Nitro-based instances? | ☐ |
| Chấp nhận chi phí io1/io2? | ☐ |
| Đã test failover scenario? | ☐ |
⚠️ Khuyến nghị: Nếu không chắc chắn, hãy dùng EFS hoặc Replication thay vì Multi-Attach. Multi-Attach phức tạp và dễ gây data corruption nếu config sai.
Elastic Volumes
Cho phép thay đổi volume configuration mà không cần downtime:
- Tăng size
- Thay đổi volume type (ví dụ: gp2 → gp3)
- Điều chỉnh IOPS và throughput (với gp3, io1, io2)
Sử dụng EBS Volume: Attach, Format, Mount
Device Name là gì?
Device Name = Tên đường dẫn để OS nhận diện ổ đĩa EBS trong EC2.
| Device Name | Ý nghĩa |
|---|---|
/dev/xvda | Root volume (OS) - luôn là volume đầu tiên |
/dev/xvdb, /dev/xvdc... | Data volumes bạn thêm vào |
/dev/sdf, /dev/sdg... | Cách đặt tên cũ (AWS tự convert thành xvdf, xvdg) |
💡 Device Name = "Địa chỉ" của ổ đĩa trong OS, giống như Disk 0, Disk 1 trong Windows!
Khi nào cần mount?
| Trường hợp | Cần mount tay? | Ghi chú |
|---|---|---|
| Root volume | ❌ Không | AWS tự động lo |
| Data volume lần đầu | ✅ Cần format + mount | Làm 1 lần duy nhất |
| Data volume attach lại | ✅ Cần mount (hoặc fstab) | Không cần format |
| Reboot EC2 | ❌ Nếu có fstab | Tự động mount |
Tự động mount với /etc/fstab:
Vòng đời của EBS Volume
Trạng thái 1: Mới tạo, chưa Attach
Ở trạng thái này:
- Volume tồn tại trong AWS, bạn đang trả tiền
- Nhưng chưa dùng được vì chưa gắn vào EC2 nào
- Giống như mua ổ cứng nhưng chưa cắm vào máy tính
Trạng thái 2: Đã Attach, chưa Format
Ở trạng thái này:
- EC2 thấy ổ cứng (
/dev/xvdb) - Nhưng chưa lưu file được vì chưa có filesystem
- Thử mount sẽ bị lỗi:
Cần làm: Format để tạo filesystem
Trạng thái 3: Đã Format, chưa Mount
Ở trạng thái này:
- Ổ cứng đã sẵn sàng lưu file
- Nhưng chưa truy cập được vì chưa có "cửa vào"
- Không có thư mục nào trỏ đến ổ này
Cần làm: Mount vào một thư mục
Trạng thái 4: Đã Mount (sử dụng được)
Ở trạng thái này:
- Truy cập
/data= truy cập ổ 100GB - Mọi file trong
/datanằm trên EBS volume
Tổng hợp các trạng thái
| Trạng thái | EC2 thấy không? | Lưu file được? | Cần làm gì? |
|---|---|---|---|
| Tạo mới, chưa attach | ❌ Không | ❌ Không | Attach vào EC2 |
| Attached, chưa format | ✅ Thấy /dev/xvdb | ❌ Không | Format (mkfs.ext4) |
| Formatted, chưa mount | ✅ Thấy /dev/xvdb | ❌ Không | Mount vào thư mục |
| Mounted | ✅ Thấy /dev/xvdb | ✅ Được | Dùng thôi! |
Lệnh đầy đủ từ đầu đến cuối
Lưu ý quan trọng
| Trường hợp | Cần Format? |
|---|---|
| Volume mới tạo (trống) | ✅ Cần |
| Volume từ Snapshot | ❌ Không (đã có filesystem + data) |
| Root volume | ❌ Không (AMI đã format sẵn) |
| Detach rồi attach lại | ❌ Không (filesystem vẫn còn) |
⚠️ CẢNH BÁO: Format volume đã có data → MẤT HẾT DATA!
Data Lifecycle Manager (DLM)
Automate việc tạo, retention, và deletion của EBS snapshots:
- Tạo backup policies dựa trên schedule
- Cross-region copy
- Retention rules (giữ X snapshots gần nhất)
EBS Pricing (Chi phí)
Cách tính phí EBS
EBS tính phí theo 3 thành phần chính:
[!IMPORTANT] Per-Second Billing (từ 10/2017):
- EBS Volume storage: Tính theo giây (minimum 1 phút)
- Provisioned IOPS (io1/io2): Tính theo giây
- EBS Snapshots: Vẫn tính theo giờ
1. Storage (dung lượng)
Tính theo GB-month (số GB × số tháng sử dụng).
| Volume Type | Giá tham khảo (us-east-1) | Ghi chú |
|---|---|---|
| gp3 | ~$0.08/GB-month | Rẻ nhất cho SSD |
| gp2 | ~$0.10/GB-month | Đắt hơn gp3 |
| io2 | ~$0.125/GB-month | + phí IOPS |
| io1 | ~$0.125/GB-month | + phí IOPS |
| st1 | ~$0.045/GB-month | HDD, throughput |
| sc1 | ~$0.015/GB-month | HDD, rẻ nhất |
2. IOPS (chỉ với io1, io2, gp3)
| Volume Type | Phí IOPS |
|---|---|
| gp3 | 3,000 IOPS miễn phí, thêm ~$0.005/IOPS-month |
| io1/io2 | ~$0.065/IOPS-month |
3. Throughput (chỉ với gp3)
- gp3: 125 MiB/s miễn phí, thêm ~$0.04/MiB/s-month
4. Snapshots
| Loại | Giá |
|---|---|
| Standard | ~$0.05/GB-month |
| Archive | ~$0.0125/GB-month (rẻ hơn 75%) |
Ví dụ tính chi phí
Scenario: Web server với database
Lưu ý quan trọng về chi phí
| Điều cần biết | Chi tiết |
|---|---|
| Trả tiền khi chưa dùng | Volume ở trạng thái available (chưa attach) vẫn tính phí |
| Stop EC2 vẫn trả tiền EBS | EC2 stop = không tính phí EC2, nhưng EBS vẫn tính |
| Snapshot incremental | Snapshot thứ 2 trở đi chỉ tính phần thay đổi |
| Delete volume | Xóa volume mới hết phí, chỉ stop EC2 thì không đủ |
So sánh chi phí các volume type
Tips tiết kiệm chi phí
- Dùng gp3 thay gp2 - Rẻ hơn 20% và performance tốt hơn
- Xóa volume không dùng - Kiểm tra volumes ở trạng thái
available - Xóa snapshots cũ - Dùng DLM để tự động xóa
- Dùng sc1/st1 cho data ít truy cập
- Archive snapshots cần giữ lâu (>90 ngày)
📖 Giá chính xác: Amazon EBS Pricing (giá thay đổi theo region và thời điểm)
Best Practices
-
Chọn đúng volume type theo workload:
- Boot volumes: gp3 (cost-effective)
- Databases: io2 Block Express (high IOPS, durability)
- Big data: st1 (throughput)
-
Enable encryption cho sensitive data
-
Regular snapshots với DLM policies
-
Monitor với CloudWatch: VolumeReadOps, VolumeWriteOps, BurstBalance
-
Sử dụng EBS-optimized instances để đạt full performance