Đến nội dung chính
Infra Notes
DOCS / UTF-8
Reference // Tra cứu kỹ thuậtceph

Ceph — RADOS: cơ chế và quản lý dữ liệu

DOC PATH reference/ceph/rados-data-path

Doc Type
Reference
Technology
ceph
Status
Active
Version
20.2.x
Tags
CephRADOSStorage

Object, pool, PG, CRUSH, BlueStore và các thao tác quản lý RADOS. Đọc theo thứ tự các chương hoặc chọn mục cần tra cứu trong mục lục.

RADOS (Reliable Autonomic Distributed Object Store) là lớp lõi. Mọi dữ liệu cuối cùng được biểu diễn dưới dạng object nằm trong pool. RADOS chịu trách nhiệm placement, replication/EC, consistency, peering, recovery, scrub và failure handling.

  • Object có tên/ID, payload và metadata.
  • Pool là namespace và policy boundary: replication size, PG count, application tag, CRUSH rule.
  • PG là đơn vị logic dùng để gom object trước khi CRUSH ánh xạ xuống OSD.
  • Primary OSD của acting set điều phối ghi đến các replica khác.

Ceph chia dữ liệu thành các RADOS object. Với RBD, một RBD image được chia thành nhiều object có kích thước theo object order; với CephFS, file data được lưu trong data pool; với RGW, bucket index và object data nằm trong các pool RGW.

Pool định nghĩa policy cho một nhóm object. Hai pool khác nhau có thể dùng replication size khác nhau, CRUSH rule khác nhau hoặc application khác nhau.

Thuộc tính Pool Ý nghĩa
size Số replica mong muốn cho replicated pool.
min_size Số replica tối thiểu để cho phép I/O.
pg_num Số PG logic của pool.
pgp_num Số PG dùng cho placement; hiện thường được quản lý cùng pg_num.
crush_rule Quy tắc chọn OSD/failure domain.
application rbd, cephfs, rgw… giúp Ceph biết mục đích pool.

PG giúp Ceph quản lý placement theo nhóm thay vì duy trì bảng vị trí riêng cho từng object. Object được hash vào PG; CRUSH xác định up set, tức danh sách OSD mà PG nên sử dụng theo OSDMap hiện tại. Acting set là danh sách OSD đang chịu trách nhiệm cho PG. Hai tập thường trùng nhau nhưng có thể khác tạm thời khi placement thay đổi. Xem Placement Group Concepts.

Object -> hash -> PG -> CRUSH/OSDMap -> up set; kiểm tra acting set để biết OSD hiện chịu trách nhiệm cho PG.

CRUSH (Controlled Replication Under Scalable Hashing) là thuật toán placement. CRUSH dùng cluster topology, device weight, device class và rule để tính toán OSD mục tiêu theo cách xác định (deterministic).

  • Không cần metadata server trung tâm để tra object nằm ở đâu.
  • Có thể đặt failure domain là osd, host, rack, row, datacenter.
  • Weight phản ánh capacity tương đối; reweight có thể tạm điều chỉnh mức tham gia placement.
  • CRUSH map và OSD map thay đổi sẽ tạo remap/recovery theo policy.

RADOS là lớp distributed storage bên dưới RBD, CephFS và RGW. Trang này giải thích cách Ceph phân bố dữ liệu, phục vụ I/O và thực hiện recovery; phần Theory Handbook giới thiệu các daemon và thuật ngữ nền tảng.

Client → object trong pool → PG → CRUSH rule → tập OSD là chuỗi cần lần theo khi phân tích một I/O.

Lớp Vai trò Không nên hiểu nhầm
Object Đơn vị dữ liệu của RADOS; tên object kết hợp pool quyết định PG. Một file, RBD image hoặc S3 object không nhất thiết tương ứng đúng một RADOS object.
Pool Phạm vi áp dụng chính sách replication/EC, CRUSH rule và quản lý dữ liệu. Pool không phải một disk vật lý.
Placement Group (PG) Nhóm logic gom object để placement, peering và recovery. PG không phải phân vùng cố định trên disk.
CRUSH Tính vị trí mong muốn từ topology, weight, device class và rule. size = 3 chỉ trải qua ba host nếu rule chọn failure domain host và topology phản ánh hạ tầng thật.
OSD Daemon trực tiếp lưu object, phối hợp replica, scrub và recovery. Số hiệu OSD, tiến trình OSD và disk bên dưới là ba khái niệm khác nhau.

MON cung cấp cluster map, quorum và thông tin xác thực để client tìm đúng OSD; MON không chuyển tiếp payload của I/O thông thường. MGR cung cấp chức năng quản lý, metrics và các module; MGR không thay thế OSD trên data path. Xem thêm PG concepts.

OSDMap có epoch để đánh dấu phiên bản của trạng thái cluster, không phải dấu thời gian. Với một PG, Up Set là tập vị trí CRUSH mong muốn theo map, còn Acting Set là các OSD hiện tham gia phục vụ PG; OSD đầu tiên trong acting set thường là primary. Hai tập có thể khác nhau tạm thời trong quá trình thay đổi placement. Chữ “up” trong Up Set không đồng nghĩa với trạng thái daemon up.

Trạng thái up/down nói về khả năng OSD được nhìn thấy; in/out nói về việc OSD có được tính vào placement hay không. Một OSD có thể up nhưng out.

Với replicated pool, client xác định PG và gửi yêu cầu ghi đến primary OSD của acting set. Primary phối hợp ghi tới các replica, rồi trả kết quả theo yêu cầu về consistency và durability của thao tác. Một replica chậm có thể kéo dài thời gian ghi dù client không giao tiếp trực tiếp với replica đó.

Đọc thường đi tới primary OSD của PG. Một số client, chẳng hạn RBD, có thể chọn đọc replica theo chính sách riêng; chọn nơi đọc không làm đổi primary của PG. Với EC pool, dữ liệu được chia thành data chunk và coding chunk; đọc khi thiếu chunk phải tái dựng từ các chunk còn lại. Đường đi chính xác còn tùy cache, loại request và trạng thái cluster.

Với size=3, mỗi object logic có ba replica trên ba OSD/failure domain theo CRUSH rule. Primary OSD chịu trách nhiệm điều phối transaction tới replica peers.

Thông số Ví dụ Ý nghĩa
size 3 Mục tiêu 3 replica.
min_size 2 Cho phép I/O khi còn ít nhất 2 replica khả dụng.
failure domain host Không đặt hai replica cùng một host nếu rule đủ host.

EC chia dữ liệu thành k data chunks và m coding chunks. Ví dụ k=4, m=2 tạo 6 chunks; có thể mất tối đa 2 chunks mà vẫn tái dựng dữ liệu.

  • Ưu điểm: hiệu quả dung lượng tốt hơn replication.
  • Nhược điểm: CPU và network overhead cao hơn, write path phức tạp hơn, recovery có thể nặng.
  • EC phù hợp workload ưu tiên dung lượng; replicated pool thường phù hợp metadata, database hoặc workload nhạy với latency.
Chính sách Chi phí dung lượng Điểm cần nhớ
Replication size = 3 Dữ liệu payload cần khoảng 3 lần raw capacity, trước overhead khác. Ba bản sao mong muốn; min_size quy định ngưỡng tối thiểu để tiếp tục I/O.
EC k = 4, m = 2 Overhead payload lý thuyết (4 + 2) / 4 = 1,5 lần. Cần đủ chunk để tái dựng dữ liệu, nhưng ngưỡng I/O còn phụ thuộc min_size.

Ví dụ replicated size = 3, min_size = 2: ba replica là trạng thái đủ redundancy; còn hai replica có thể tiếp tục phục vụ nhưng PG bị degraded; xuống dưới hai thì I/O bị chặn theo chính sách pool. Degraded không có nghĩa dữ liệu đã hỏng. Với EC 4+2 và min_size = 5, bốn chunk có thể đủ để tái dựng dữ liệu nhưng vẫn không đạt ngưỡng I/O của pool. Khả năng chịu lỗi host còn phụ thuộc CRUSH failure domain, không thể suy ra chỉ từ số coding chunk.

EC tiết kiệm raw capacity cho dữ liệu lớn, nhưng các thao tác ghi nhỏ hoặc ghi đè có chi phí tính toán và I/O khác replication. RBD hoặc CephFS có thể dùng EC cho data pool khi đã bật hỗ trợ overwrite và đáp ứng điều kiện của backend; metadata pool cần replication vì EC pool không hỗ trợ OMAP. Xem Erasure coding.

OSD (Object Storage Daemon) là daemon đại diện cho storage device và thực hiện phần lớn công việc trên data plane: lưu object, replication, recovery, scrub, heartbeat và peering.

BlueStore là object store backend mặc định hiện đại của Ceph. Nó ghi trực tiếp lên block device thay vì đặt object trên filesystem trung gian.

  • block: device chứa object data.
  • block.db: RocksDB/WAL metadata nếu dùng device riêng.
  • block.wal: WAL riêng trong một số thiết kế.
  • Một lab nhỏ có thể dùng single-device BlueStore: data, DB và WAL trên cùng disk.
State Ý nghĩa Ví dụ
UP Daemon có heartbeat và liên lạc được. Process hoạt động và giao tiếp được.
DOWN Không liên lạc được với daemon. Service dừng, mất host hoặc disk hỏng.
IN OSD được CRUSH chọn cho placement. Weight/reweight cho phép tham gia placement.
OUT OSD bị loại khỏi placement mới. Dùng khi OSD hỏng lâu hoặc chuẩn bị thay thế.

BlueStore quản lý không gian vật lý bên trong một OSD, sau khi CRUSH đã chọn OSD. block chứa payload và có thể chứa metadata; RocksDB lưu metadata/OMAP, BlueFS là lớp file nội bộ phục vụ RocksDB — không phải CephFS. block.db trên thiết bị nhanh có thể giảm độ trễ metadata, nhưng khi không đủ chỗ, metadata có thể tràn sang thiết bị block. Nó không biến I/O payload trên HDD thành I/O NVMe. Xem BlueStore configuration.

Checksum giúp phát hiện lỗi dữ liệu. Scrub kiểm tra tính nhất quán của object/metadata; deep scrub đọc và kiểm tra thêm payload. active+clean không chứng minh deep scrub vừa chạy, còn degraded không đồng nghĩa inconsistent. CephX kiểm soát xác thực và quyền truy cập, không tự mã hóa dữ liệu lưu trên disk (encryption at rest).

PG state Ý nghĩa
active+clean PG phục vụ I/O và đủ replica, không cần recovery.
active+degraded PG đang active nhưng một số object chưa đủ replica; cần đọc kèm các trạng thái khác để đánh giá I/O.
active+undersized Số replica hiện tại thấp hơn size mong muốn.
remapped PG tạm thời dùng tập OSD khác với placement do CRUSH xác định.
recovering OSD đang khôi phục object bị thiếu giữa các replica.
backfilling Di chuyển/copy lượng dữ liệu lớn để đáp ứng mapping mới.
peering OSD của PG đang trao đổi lịch sử để xác định authoritative state.
scrubbing Kiểm tra consistency metadata/object; deep-scrub kiểm tra data sâu hơn.

degraded chỉ mô tả mức thiếu replica, không tự xác nhận I/O đang hoạt động. PG phải đáp ứng min_size để trở thành active; các trạng thái bổ sung như laggy hoặc wait vẫn có thể tạm dừng I/O. Đối chiếu PG states và tham số pool.

Recovery thường nói đến khôi phục object missing/inconsistent theo log khi OSD quay lại hoặc replica thiếu. Backfill thường dùng khi placement thay đổi đáng kể và cần copy tập object để đưa PG sang OSD mới.

Một PG có thể degraded nhưng chưa recovering nếu chưa có OSD đích phù hợp. Ví dụ cluster size=3 nhưng chỉ còn hai OSD usable: Ceph biết thiếu replica nhưng không có nơi để tạo replica thứ ba.

Peering đối chiếu thông tin và lịch sử PG giữa các OSD để xác định phiên bản dữ liệu chuẩn (authoritative) trước khi PG trở lại active. Peering hoàn tất không có nghĩa đã khôi phục đủ replica. Các trạng thái PG có thể xuất hiện đồng thời, chẳng hạn active+undersized+degraded+remapped+backfilling: I/O vẫn có thể chạy nhưng chưa khôi phục đủ redundancy.

Khái niệm Ý nghĩa
active PG có thể phục vụ I/O theo điều kiện hiện tại.
clean Bản sao/chunk đã đồng bộ theo placement hiện hành.
degraded hoặc undersized Thiếu dữ liệu sao chép hoặc thiếu thành viên so với chính sách mong muốn.
remapped Acting set chưa trùng vị trí mong muốn.
Recovery Đồng bộ dữ liệu thiếu/lỗi thời, thường tận dụng lịch sử PG.
Backfill Chuyển tập dữ liệu lớn hơn khi OSD mới hoặc PG đổi vị trí.
incomplete Chưa có đủ lịch sử/dữ liệu để xác định bản authoritative; cần phân tích riêng.

Rebalance là quá trình cân bằng lại placement; recovery và backfill thực hiện việc truyền dữ liệu để đạt placement mong muốn. Chúng dùng chung disk, CPU và mạng với client I/O, nên cluster có thể chậm trong khi thực hiện recovery. Xem PG states.

Các lệnh dưới đây chạy trong admin environment Ceph Tentacle 20.2.3. Thay pool, device và các giá trị mẫu theo inventory; kiểm tra tác động trước thao tác ghi hoặc xóa.

Pool xác định storage policy; object map vào PG, rồi CRUSH chọn OSD theo rule/failure domain. Với replicated pool, size là số replica mục tiêu, min_size là ngưỡng replica cho phép I/O. Ví dụ ba host dùng size=3, min_size=2.

Terminal window
ceph osd pool get <pool> all
ceph osd pool application get <pool>
ceph osd crush rule dump <crush-rule>
ceph osd pool autoscale-status
ceph pg map <pg-id>
ceph osd map <pool> <object>

Rule chooseleaf_firstn type host phân phối replica qua host failure domains. Trong rule chọn replica, num=0 nghĩa chọn theo replica count của pool, không phải chọn zero host. Phần tử đầu tiên trong acting set là primary OSD của PG; kiểm tra up/acting set khi theo dõi recovery.

.mgr là system pool phục vụ Manager. Vài object hoặc raw usage còn lại sau cleanup không phải lý do để xóa pool này.

Nếu Dashboard Cluster > Pools > Create chỉ hiển thị application selector CephFS/RBD/RGW, hãy tạo Generic RADOS pool bằng CLI và application label riêng, thay vì gắn sai nhãn ứng dụng.

Terminal window
ceph osd pool create <pool> <initial-pg> <initial-pgp> replicated <crush-rule> --autoscale-mode=on
ceph osd pool application enable <pool> <application-label>
ceph osd pool set <pool> size <replica-count>
ceph osd pool set <pool> min_size <minimum-replicas>
ceph osd pool get <pool> all
ceph osd pool autoscale-status

Chọn replication và failure domain trước khi ghi dữ liệu. PG autoscaler điều chỉnh theo dung lượng, tỷ lệ sử dụng và topology; không cố định số PG theo một ví dụ. Chờ convergence và active+clean; NEW PG_NUM trống nghĩa không có đề xuất thay đổi đang chờ tại thời điểm kiểm tra.

Dùng object test có tên riêng trong pool được phép thử. PUT/GET và checksum kiểm chứng data path rõ hơn việc chỉ nhìn daemon state.

Terminal window
# Admin environment truy cập được cả input và output file
sha256sum <source-file>
rados -p <pool> put <test-object> <source-file>
rados -p <pool> stat <test-object>
ceph osd map <pool> <test-object>
rados -p <pool> get <test-object> <readback-file>
sha256sum <source-file> <readback-file>
cmp <source-file> <readback-file>

Nếu dùng cephadm container, bind mount file từ host vào container:

Terminal window
cephadm shell --mount <source-file> -- \
rados -p <pool> put <test-object> /mnt/<source-file-name>

GET cũng cần output path có thể truy cập từ môi trường đang chạy CLI. Kết quả mong đợi: checksum khớp, cmp exit code 0, object map ra PG/acting set phù hợp. Sau validation, chỉ xóa object test đã xác định:

Terminal window
rados -p <pool> rm <test-object>
rados -p <pool> stat <test-object>

No such file or directory sau bước xóa là kết quả mong đợi.

Dashboard: Cluster > Pools > <pool> > Edit. Chọn quota theo nhu cầu ứng dụng và dự phòng dung lượng.

Terminal window
ceph osd pool get-quota <pool>
ceph osd pool get <pool> all
ceph config get mon mon_allow_pool_delete

Quota giới hạn logical usage, không đặt trước dung lượng vật lý. Khi chọn compression, cân nhắc CPU và khả năng nén của dữ liệu.

noscrub=false nghĩa scrub không bị chặn. Tương tự với nodelete, nopgchange, nosizechange. Pool nodelete=false và cluster mon_allow_pool_delete là các lớp kiểm soát khác nhau; trạng thái của một flag chưa đủ kết luận có thể delete pool.