Cách phân bổ Object trong Object Storage và Block Storage trong Ceph

1. Giới Thiệu Về Cách Ceph Lưu Trữ Dữ Liệu

Ceph là một hệ thống lưu trữ phân tán mạnh mẽ, hỗ trợ Object Storage, Block Storage và File Storage. Khi sử dụng Ceph, dữ liệu được chia nhỏ thành các object và phân bố trên nhiều OSD (Object Storage Daemon) để đảm bảo tính sẵn sàng và khả năng kháng lỗi.

Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết cách Ceph phân chia object trong Object Storage và Block Storage khi sử dụng pool loại replication, ví dụ bài này sẽ lấy replication size = 2.

2. Ceph Chia Object Storage Như Thế Nào?

2.1. Cách Ceph Làm Việc Trong Object Storage

Khi một file (file) được tải lên Ceph Object Storage (S3 API, Swift API), Ceph không lưu trữ file nguyên vẹn mà chia nhỏ nó thành nhiều object nhỏ và phân bố trên các OSD.

  • Mỗi object sẽ được gán một PG (Placement Group).
  • PG quản lý việc phân bố object trên OSD.
  • Pool replicated size = 2 sẽ tạo 2 bản sao (replica) mỗi object.

2.2. Ví dụ Object Storage

Giả sử bạn tải lên một file video “movie.mp4” có dung lượng 4GB. Ceph sẽ chia file này thành các object nhỏ với kích thước 4MB mỗi object.

  • Tổng số object = 4GB / 4MB = 1,024 object.
  • Mỗi object được sao lưu trên 2 OSD (do pool có size=2).
  • Giả sử object “movie.001” được gán vào PG 2.4b, Ceph quẳng bố nó trên OSD 10 và 25.

Lệnh dùng để kiểm tra object:

ceph osd map POOL-LAB-01 movie.001

Output:

osdmap e1234 pool 'POOL-LAB-01' object 'movie.001' -> pg 2.4b -> up [10,25] acting [10,25]

Giải thích: Object “movie.001” đang được lưu trữ trên OSD 10 và OSD 25.

Dưới đây là sơ đồ biểu diễn cách Ceph phân tán dữ liệu của file movie.mp4 thành nhiều object, sau đó gán vào các Placement Group (PG) và cuối cùng lưu trữ trên các OSD.

File movie.mp4 (4GB)  
    |
    |-- Chia thành 1024 object (4MB mỗi object)
    |
    |-- Object 001  ---> PG 2.4b  ---> OSD 10, OSD 25
    |-- Object 002  ---> PG 2.3c  ---> OSD 5, OSD 12
    |-- Object 003  ---> PG 2.a1  ---> OSD 18, OSD 32
    |-- Object 004  ---> PG 2.b3  ---> OSD 7, OSD 20
    |-- Object 005  ---> PG 2.c4  ---> OSD 11, OSD 22
    |-- Object ...  ---> PG ...   ---> OSD ..., OSD ...

💡 Lưu ý:

  • PG (Placement Group) đóng vai trò như nhóm trung gian giúp phân tán object trên OSD.
  • Object của file sẽ không chỉ nằm trên 2 OSD mà được phân tán trên nhiều OSD khác nhau.
  • Replica đảm bảo mỗi object có ít nhất 2 bản sao (với size=2).

Khi một file rất nhỏ (1-2KB) được lưu vào Ceph Object Storage, nó không cần chia nhỏ nữa vì kích thước file đã nhỏ hơn kích thước object mặc định của Ceph (thường là 4MB).

🔍 Ceph xử lý file nhỏ trong Object Storage như thế nào?

  • File nhỏ được lưu trữ nguyên vẹn trong một object, không bị chia nhỏ thêm.
  • Dữ liệu metadata vẫn được Ceph quản lý trong PG (Placement Group) để biết object đó nằm ở đâu.
  • Replication vẫn diễn ra: Nếu pool có size=2, Ceph sẽ lưu 2 bản sao của object trên 2 OSD khác nhau.

📌 Ví dụ cụ thể:

Giả sử bạn upload 3 file nhỏ vào Ceph Object Storage:

file1.txt (2KB)
file2.log (1.5KB)
file3.json (1KB)

Ceph sẽ xử lý như sau:

S3 Bucket: my-bucket
    |
    |-- file1.txt (2KB)  ---> Object: file1.txt  ---> PG 2.a3  ---> OSD 10, OSD 25
    |-- file2.log (1.5KB) ---> Object: file2.log ---> PG 2.f8  ---> OSD 7, OSD 21
    |-- file3.json (1KB)  ---> Object: file3.json ---> PG 2.c9  ---> OSD 13, OSD 30

🔹 Những điểm quan trọng khi lưu file nhỏ trong Ceph:

Không bị chia nhỏ: Ceph lưu nguyên file vào một object.
Có thể gây lãng phí dung lượng:

  • Nếu object size mặc định là 4MB, nhưng file chỉ có 2KB, Ceph vẫn chiếm 4MB trên OSD.
  • Tuy nhiên, Ceph có cơ chế BlueStore giúp tối ưu lưu trữ file nhỏ hơn 4MB.
    Tốc độ truy xuất nhanh vì file nhỏ dễ đọc/ghi hơn trên cluster.
    Hỗ trợ nén dữ liệu: Nếu bật compression, Ceph có thể giảm lãng phí dung lượng khi lưu file nhỏ.

📌 Lưu ý: Nếu hệ thống lưu trữ quá nhiều file nhỏ, có thể gây tăng overhead cho metadata trong MON và OSD. Khi đó, bạn có thể:

  • Dùng erasure coding (EC) thay vì replication để tối ưu lưu trữ.
  • Tăng object size nếu thấy cần thiết để giảm số lượng object quá nhỏ.
  • Sử dụng CephFS thay vì Object Storage nếu lưu nhiều file nhỏ.

3 Ceph Chia Block Storage Như Thế Nào?

3.1. Cách Ceph Làm Việc Trong Block Storage

Block Storage trong Ceph (RBD – RADOS Block Device) hoạt động giống như một disk.

  • Khi tạo một disk ảo (VD: 100GB RBD volume), Ceph chia nó thành nhiều block nhỏ (object).
  • Kích thước block thường là 4MB.
  • Mỗi object cũng được phân bố và nhân bản trên các OSD theo PG.

3.2. Ví dụ Block Storage.

Giả sử ta tạo một volume RBD 100GB cho VM:

rbd create POOL-LAB-01/my-rbd --size 100G

Ceph sẽ chia volume này thành 25,600 object (vì 100GB / 4MB = 25,600 object).

Mỗi object cũng được sao lưu trên 2 OSD (do pool replication size=2).

Kiểm tra volume đang nằm trên OSD nào:

rbd map POOL-LAB-01/my-rbd

Dưới đây là sơ đồ biểu diễn cách Ceph phân tán dữ liệu của một RBD volume 100GB thành nhiều object, sau đó gán vào các Placement Group (PG) và cuối cùng lưu trữ trên các OSD.

RBD Volume 100GB (POOL-LAB-01/my-rbd)
    |
    |-- Chia thành 25,600 object (4MB mỗi object)
    |
    |-- Object 00001  ---> PG 3.7a  ---> OSD 10, OSD 25
    |-- Object 00002  ---> PG 3.4f  ---> OSD 7, OSD 21
    |-- Object 00003  ---> PG 3.2d  ---> OSD 13, OSD 30
    |-- Object 00004  ---> PG 3.9c  ---> OSD 4, OSD 19
    |-- Object 00005  ---> PG 3.b2  ---> OSD 9, OSD 28
    |-- Object ...    ---> PG ...   ---> OSD ..., OSD ...

💡 Lưu ý:

  • Ceph không lưu toàn bộ volume trên 1 OSD mà chia thành nhiều object nhỏ.
  • Mỗi object được đặt vào một PG, sau đó PG quyết định OSD nào sẽ lưu trữ object đó.
  • Replica (size=2) đảm bảo mỗi object có ít nhất 2 bản sao trên 2 OSD khác nhau.
  • Lệnh rbd map POOL-LAB-01/my-rbd kiểm tra volume RBD đang nằm trên OSD nào.

🔧 Điều này giúp Ceph đạt được:
✅ Phân tán dữ liệu → Giảm tải cho từng OSD.
✅ Khả năng chịu lỗi cao → Nếu 1 OSD hỏng, dữ liệu vẫn còn trên OSD khác.
✅ Tăng tốc độ truy xuất dữ liệu → Nhiều OSD có thể phục vụ cùng lúc. 🚀

4. So Sánh Object Storage và Block Storage Trong Ceph

Tiêu chíObject StorageBlock Storage
Dạng dữ liệuFile (S3, Swift)Disk (VM, Container)
Cách lưu trữChia file thành object nhỏChia disk thành block (object)
Kích thước objectTùy chỉnh (thường 4MB – 128MB)Mặc định 4MB
Phân bố objectPhân tán trên các OSDPhân tán trên các OSD
Replica (size=2)Mỗi object có 2 bản saoMỗi block có 2 bản sao
Truy cậpHTTP APIBlock device

5. Kết Luận

  • Trong Object Storage, file được chia thành object nhỏ và phân tán trên OSD.
  • Trong Block Storage, mỗi disk ảo được chia thành block và phân tán trên OSD.
  • Với replica size = 2, mỗi object/block được lưu trữ trên 2 OSD, giúp bảo vệ dữ liệu tốt hơn.

Bài viết gần đây

spot_img

Related Stories

Leave A Reply

Please enter your comment!
Please enter your name here

Đăng ký nhận thông tin bài viết qua email