メインコンテンツまでスキップ

Amazon Elastic Block Store (EBS)

1. Amazon EBS là gì?

Amazon Elastic Block Store (Amazon EBS) là dịch vụ lưu trữ (block storage) dễ dàng mở rộng và hiệu năng cao, được thiết kế để sử dụng cùng với Amazon EC2. Ngoài ra, EBS cũng được hỗ trợ bởi các dịch vụ container như Amazon EKSAmazon ECS để cung cấp lưu trữ bền vững (persistent storage) cho các ứng dụng.

EBS giống như một chiếc ổ cứng gắn ngoài (HDD/SSD) mà bạn có thể cắm vào máy chủ của mình. Bạn có thể lưu cài đặt hệ điều hành, cài database, hay lưu dữ liệu ứng dụng lên đó. Điểm đặc biệt là ổ cứng này kết nối qua mạng (network-attached) và nằm độc lập với vòng đời của máy chủ.

Các lợi ích chính

  • Lưu trữ bền vững (Persistent Storage): Dữ liệu vẫn còn nguyên ngay cả khi bạn stop hoặc reboot EC2 instance hoặc các dịch vụ container như EKS, ECS (khác với Instance Store).
  • Hiệu năng cao: Cung cấp độ trễ thấp (low-latency) và IOPS cao, phù hợp cho database và các ứng dụng enterprise.
  • Linh hoạt (Elastic): Có thể thay đổi loại ổ cứng (Volume Type), tăng dung lượng "nóng" (không cần tắt server) dễ dàng.
  • Bảo mật: Hỗ trợ mã hóa dữ liệu (Encryption) và kiểm soát truy cập.
  • Độ tin cậy (Reliability): Mỗi EBS Volume được tự động replicate (sao chép) trong cùng một Availability Zone để ngăn ngừa mất dữ liệu do lỗi phần cứng.

2. Core Concepts

  1. Block Storage:

    • Khác với S3 (Object Storage) quản lý data theo object (tên file), EBS quản lý data theo Block (khối). Hệ điều hành có thể format ổ đĩa, phân vùng và dùng như ổ cứng thông thường (như ổ C:, D: trên Windows hay /dev/xvda trên Linux).
  2. Volume:

    • Là đơn vị lưu trữ cơ bản của EBS.
    • Quan trọng: EBS Volume bị giới hạn trong Availability Zone (AZ). Nếu bạn tạo Volume ở us-east-1a, bạn chỉ có thể attach nó vào EC2 nằm ở us-east-1a. Để di chuyển sang AZ khác, bạn phải tạo Snapshot rồi restore sang AZ mới.
  3. Instance Store vs EBS:

    • EBS: Dữ liệu bền vững (Persistent), lưu qua mạng, có thể tách rời khỏi EC2 này và gắn sang EC2 khác.
    • Instance Store: Dữ liệu tạm thời (Ephemeral), gắn vật lý trực tiếp vào host server. Nếu stop/terminate EC2, dữ liệu Instance Store sẽ mất vĩnh viễn. Instance Store thường dùng cho cache, buffer, scratch data cần tốc độ cực cao.
  4. Performance Metrics:

    • IOPS (Input/Output Operations Per Second): Số lượng thao tác đọc/ghi ổ đĩa mỗi giây. Quan trọng cho database (MySQL, PostgreSQL).
    • Throughput (Băng thông): Lượng dữ liệu truyền tải mỗi giây (MB/s). Quan trọng cho Big Data, Log processing.
    • Latency (Độ trễ): Thời gian chênh lệch giữa khi yêu cầu I/O được gửi đi và khi nó hoàn thành. Càng thấp càng tốt.
  5. Root Volume vs Data Volume:

    • Root Volume: Chứa hệ điều hành (OS) để boot instance. Thường bị xóa khi terminate instance (trừ khi bỏ chọn Delete on Termination).
    • Data Volume: Chứa dữ liệu ứng dụng. Nên tách biệt với Root Volume để an toàn dữ liệu và dễ dàng backup/resize.
  6. EBS Encryption:

    • Mã hóa dữ liệu "Data-at-rest" (trên ổ cứng), "Data-in-transit" (khi truyền từ EC2 sang EBS) và cả các Snapshot tạo ra từ volume đó.
    • Tích hợp sâu với AWS KMS (Key Management Service) để quản lý key.
    • Hoàn toàn trong suốt (transparent) với người dùng và ứng dụng, không ảnh hưởng đáng kể đến hiệu năng.
  7. Elastic Volumes:

    • Tính năng cho phép bạn thay đổi loại volume (ví dụ: gp2 lên gp3), tăng dung lượng (size), hoặc thay đổi IOPS trong khi volume đang hoạt động.
    • Không cần stop instance, không gián đoạn dịch vụ.
  8. Multi-Attach:

    • Cho phép gắn một EBS Volume vào nhiều EC2 Instance cùng lúc (tối đa 16 instances).
    • Lưu ý: Chỉ hỗ trợ dòng Provisioned IOPS SSD (io1, io2). Cần dùng Cluster File System (như GFS2, OCFS2) để quản lý ghi dữ liệu đồng thời, tránh hỏng dữ liệu.
  9. Data Lifecycle Manager:

    • Dịch vụ giúp tự động hóa việc tạo, lưu giữ và xóa EBS Snapshots theo lịch trình (policy).
    • Giúp đảm bảo tuân thủ chính sách backup mà không cần chạy script thủ công.

3. EBS Lifecycle

Để sử dụng một EBS Volume mới, bạn thường trải qua các bước sau:

  1. Create Volume: Chọn loại volume (VD: gp3), kích thước (VD: 100GB) và Availability Zone.
  2. Attach Volume: Gắn volume vào một EC2 Instance đang chạy (hoặc đang stop) trong cùng AZ.
  3. Format & Mount (Bước quan trọng trên OS):
    • Sau khi attach, volume sẽ xuất hiện như một thiết bị vật lý chưa định dạng (raw device, VD: /dev/xvdf).
    • Bạn cần SSH vào EC2, dùng lệnh mkfs (VD: mkfs.xfs hoặc mkfs.ext4) để định dạng.
    • Tạo thư mục gắn kết (mount point) và dùng lệnh mount để sử dụng.
  4. Modify (Optional): Khi đầy ổ cứng, bạn có thể tăng dung lượng trên AWS Console, sau đó dùng lệnh growpartxfs_growfs (hoặc resize2fs) trên OS để mở rộng partition.
  5. Detach & Delete: Khi không dùng nữa, cần umount trên OS trước, sau đó Detach trên AWS Console và cuối cùng là Delete Volume để dừng tính tiền.

4. EBS Volume Types

AWS cung cấp các loại ổ đĩa chính như sau:

LoạiTên mãUse CaseMax IOPS/VolMax ThroughputĐặc điểm nổi bật
General Purpose SSDgp3Mặc định. Web, App, Dev/Test.16,0001,000 MiB/sGiá rẻ hơn gp2 tới 20%. Tách biệt IOPS và Throughput (không cần mua thêm dung lượng để tăng tốc độ).
Provisioned IOPS SSDio2 Block ExpressDatabase lớn (Oracle, SAP HANA), Core Banking.256,0004,000 MiB/sĐộ bền (Durability) 99.999%. Độ trễ sub-millisecond. Hỗ trợ Multi-Attach.
Throughput Optimized HDDst1Big Data, Data Warehouse, Log Processing.500500 MiB/sTối ưu cho tuần tự (Sequential I/O). Không thể làm ổ Boot.
Cold HDDsc1File Server ít dùng, Archive.250250 MiB/sRẻ nhất. Tối ưu chi phí lưu trữ lớn. Không thể làm ổ Boot.

Chi tiết kỹ thuật

  1. Durability:
    • gp3/st1/sc1: 99.8% - 99.9% (Tỷ lệ lỗi hàng năm 0.1% - 0.2%).
    • io2 Block Express: 99.999% (Tỷ lệ lỗi cực thấp 0.001%, bền gấp 100 lần ổ thường).
  2. Boot:
    • SSD (gp3, io2): Hỗ trợ Boot Volume (Cài Win/Linux được).
    • HDD (st1, sc1): KHÔNG hỗ trợ làm ổ boot. Chỉ dùng để chứa dữ liệu.
  3. I/O Pattern:
    • SSD: Tối ưu cho Random I/O (các operation nhỏ, ngẫu nhiên như Database).
    • HDD: Tối ưu cho Sequential I/O (các operation lớn, tuần tự như Big Data, Log streaming).
Lưu ý về hiệu năng
  • Với gp2, hiệu năng bị trói vào dung lượng (3 IOPS/GB).
  • Với gp3, bạn có thể cấu hình 3,000 IOPS miễn phí mà không cần tăng dung lượng.

5. EBS Snapshots

EBS Snapshot là bản sao lưu (backup) tại một thời điểm (point-in-time) của EBS Volume, được lưu trữ trên Amazon S3.

Các tính năng Snapshot

  1. Incremental Backup: Chỉ backup phần dữ liệu thay đổi. Ví dụ: ổ 1TB nhưng chỉ thay đổi 10GB thì snapshot chỉ tốn dung lượng 10GB.
  2. Crash-consistent: Snapshot chụp lại dữ liệu tại thời điểm bấm nút. Để đảm bảo an toàn tuyệt đối cho Database (Application-consistent), nên stop I/O hoặc stop instance trước khi chụp.
  3. Fast Snapshot Restore (FSR): Tính năng giúp restore volume từ snapshot cực nhanh, không cần chờ "làm nóng" (initialization) dữ liệu. Tốn phí cao, dùng cho Disaster Recovery (DR).
  4. EBS Snapshot Archive: Lưu trữ snapshot lâu dài (>90 ngày) với chi phí rẻ hơn 75% so với snapshot thường (Tier Archive). Thời gian lấy lại mất 24-72h.
  5. Recycle Bin: Lỡ tay xóa snapshot quan trọng? Recycle Bin giữ lại snapshot đã xóa trong khoảng thời gian quy định (VD: 30 ngày) để bạn khôi phục.

6. Các tính năng nâng cao

Elastic Volumes

Bạn có thể thay đổi cấu hình volume trong khi đang sử dụng (live) mà không cần tắt server:

  • Tăng dung lượng: Chỉ có thể tăng, không thể giảm.
  • Đổi loại volume: Chuyển từ io1 -> gp3 để tiết kiệm tiền lúc thấp điểm.
  • Tăng hiệu năng: Mua thêm IOPS cho sale mùa Black Friday.

Encryption

  • Mã hóa toàn diện: Data at-rest, Data in-transit, và tất cả Snapshot tạo ra từ volume đó.
  • Tích hợp AWS KMS.
  • Zero impact: Không ảnh hưởng hiệu năng nhờ phần cứng chuyên dụng (Nitro Card).

Multi-Attach

  • Cho phép gắn một EBS Volume vào nhiều EC2 Instance cùng lúc (lên đến 16 instances).
  • Chỉ áp dụng cho io2 Block Express.
  • Cảnh báo: Chỉ dùng cho các ứng dụng Cluster-aware (biết cách quản lý ghi đồng thời) như GFS2, OCFS2. Không dùng cho ext4, xfs, ntfs vì sẽ gây mất dữ liệu ngay.

Recycle Bin

  • "Thùng rác" cho EBS Snapshots (và AMIs).
  • Giúp khôi phục lại các Snapshot đã bị xóa nhầm.

Torn Write Prevention (TWP)

  • Chuyên sâu cho Database: Tính năng giúp đảm bảo toàn vẹn dữ liệu khi ghi (write operations).
  • Tăng hiệu năng: Cho phép tắt chức năng "Double Write Buffer" của MySQL/MariaDB, giúp tăng throughput lên đến 30% mà không sợ mất dữ liệu khi crash.
  • Yêu cầu io2 Block Express hoặc gp3, và instance dòng Nitro.

Integration with Containers (EKS/ECS)

  • Amazon EBS CSI Driver: Plugin quan trọng giúp EKS/K8s có thể giao tiếp và điều khiển EBS.
  • Dynamic Provisioning:
    • Thay vì tạo volume thủ công trên AWS Console, bạn chỉ cần tạo PersistentVolumeClaim (PVC) trong Kubernetes.
    • EBS CSI Driver sẽ tự động gọi AWS API để tạo EBS Volume và mount vào Pod tương ứng.
  • Lưu ý quan trọng (Topology Awareness):
    • EBS thuộc AZ cụ thể (Zonal).
    • Bắt buộc: Pod phải được schedule chạy trên Node cùng AZ với EBS Volume. Nếu không, Pod sẽ bị lỗi Pending (do volume nằm một nơi, node nằm một nẻo).

7. Pricing & Cost Optimization

Bạn trả tiền cho 3 phần riêng biệt:

  1. Volume Storage: Tính theo $/GB-tháng. Khai báo bao nhiêu trả bấy nhiêu (kể cả không dùng).
  2. Snapshot Storage: Tính theo $/GB-tháng. Chỉ tính dung lượng thực tế đã nén trên S3.
  3. Provisioned Performance:
    • gp3: Miễn phí 3,000 IOPS125 MB/s. Nếu cấu hình cao hơn sẽ tính thêm phí.
    • io2: Cực đắt, tính phí trên mỗi IOPS provisioned.

AWS Free Tier (12 tháng đầu):

  • 30 GB Storage (gp2 hoặc gp3).
  • 1 GB Snapshot storage.
  • 2,000,000 I/Os (với ổ Magnetic - ít gặp).

Các loại phí nâng cao cần lưu ý:

  • Fast Snapshot Restore (FSR): Tính tiền theo phút/AZ (Đơn vị DSU). Rất tốn kém nếu bật quên tắt.
  • Recycle Bin: Snapshot trong thùng rác vẫn tính tiền lưu trữ như bình thường.
  • Public Snapshots: Nếu để public và bị copy dữ liệu quá nhiều qua region khác, bạn chịu phí Data Transfer.

Ví dụ giá tham khảo (Region us-east-1):

  • gp3: ~$0.08 / GB-tháng.
  • io2: ~$0.125 / GB-tháng + $0.065 / provisioned IOPS-tháng.

8. Best Practices

1. Performance Optimization

  • Use EBS-Optimized Instances: Luôn đảm bảo EC2 Instance hỗ trợ EBS-optimized để có băng thông dành riêng cho storage.
  • Pre-warming (Initialization): Volume mới tạo từ Snapshot sẽ bị chậm khi truy cập lần đầu vào mỗi block. Nếu cần hiệu năng ngay lập tức, hãy dùng FSR hoặc đọc quét qua toàn bộ ổ đĩa một lần (dd hoặc fio).
  • RAID Configuration:
    • RAID 0 (Striping): Gộp nhiều volume để tăng IOPS/Throughput. Rủi ro: Mất 1 volume là mất hết dữ liệu.
    • RAID 1 (Mirroring): Tăng độ an toàn, dữ liệu được ghi song song 2 nơi.
  • Queue Depth: Đảm bảo ứng dụng gửi đủ số lượng I/O request song song để tận dụng hết IOPS của ổ đĩa.

2. Cost Optimization

  • Delete on Termination Flag: Kiểm tra kỹ cờ này. Volume Root thường tự xóa, nhưng Volume Data thường bị giữ lại khi Terminate EC2 -> Trở thành Orphaned Volume (Volume mồ côi) gây tốn tiền vô ích.
  • Right Sizing: Đừng mua io2 nếu gp3 đã đủ dùng. Đừng provision 10,000 IOPS nếu app chỉ dùng 500 IOPS.
  • Snapshot Management: Xóa các snapshot cũ hoặc dùng Data Lifecycle Manager để tự động hóa vòng đời (VD: xóa sau 30 ngày).

3. Data Protection & Security

  • Encryption by Default: Bật tính năng này ở cấp độ Account (Region settings) để đảm bảo mọi volume tạo mới đều được mã hóa tự động.
  • Automated Backup: Sử dụng Data Lifecycle Manager (DLM) hoặc AWS Backup để lập lịch chụp snapshot hàng ngày/hàng giờ.
  • Chaos Engineering: Thử nghiệm kịch bản Volume bị detach đột ngột để xem ứng dụng có tự hồi phục được không.

4. Monitoring

  • Theo dõi các chỉ số CloudWatch quan trọng:
    • VolumeQueueLength: Nếu cao liên tục nghĩa là ổ đĩa bị quá tải (IOPS không đủ).
    • VolumeIdleTime: Thời gian ổ rảnh rỗi.
    • BurstBalance (chỉ với gp2/st1/sc1): Nếu về 0%, hiệu năng sẽ bị giảm thê thảm.
  1. Tags: Luôn gắn Tag (Name, Environment, Project) để dễ quản lý chi phí.
  2. Stop Instances: Khi Stop EC2, bạn không tốn tiền EC2 nhưng vẫn tốn tiền EBS Volume. Nếu không dùng lâu dài, hãy Snapshot lại và xóa Volume đi.
警告

Delete on Termination: Mặc định, volume gốc (Root Volume) sẽ bị xóa khi bạn Terminate EC2. Tuy nhiên, các volume data gắn thêm sẽ không bị xóa. Hãy chú ý tích chọn "Delete on Termination" hoặc dọn dẹp thủ công để tránh mất tiền cho "orphaned volumes".