1. Tổng quan
Trong Ceph, layout chassis/hostgroup là cách tổ chức cây CRUSH nhằm xác định vùng chịu lỗi (failure domain) — tức là giới hạn mà trong đó dữ liệu có thể mất khi một thành phần (node, rack, nhóm host...) bị sự cố. Việc thiết kế layout này ảnh hưởng trực tiếp đến khả năng chịu lỗi, phân bố dữ liệu, hiệu suất, và khả năng mở rộng của cụm Ceph.
Mục tiêu chính của việc dùng chassis hoặc hostgroup là:
- Gom các host có chung rủi ro (chung rack, nguồn điện, switch, zone...) vào cùng một nhóm.
- Đảm bảo dữ liệu được đặt ở các nhóm khác nhau để giảm nguy cơ mất dữ liệu hàng loạt khi một nhóm hỏng hoàn toàn.
2. Cấu trúc logic trong CRUSH map
Cấu trúc CRUSH logic điển hình khi dùng hostgroup hoặc chassis:
root nvme-01
├── chassis hostgroup-01
│ ├── host node01
│ │ ├── osd.0
│ │ └── osd.1
│ ├── host node02
│ └── ...
└── chassis hostgroup-02
├── host node51
├── host node52
└── ...
- root: nhóm đỉnh chứa toàn bộ cluster hoặc nhóm lưu trữ cùng loại (SSD/HDD/NVMe).
- chassis/hostgroup: thể hiện vùng chịu lỗi lớn hơn host (ví dụ rack, switch domain, zone).
- host: máy vật lý (node Ceph).
- osd.N: ổ đĩa thật.
3. Khi replication = 2
Giả sử có 2 hostgroup (hostgroup-01 và hostgroup-02):
- Mỗi PG có 2 bản sao.
- CRUSH rule cấu hình:
take nvme-01
chooseleaf firstn 2 type chassis
emit
* Ceph đảm bảo: mỗi bản sao nằm ở 2 chassis khác nhau.
3.1. Khi mất một hostgroup (50% node)
- Cụm ở trạng thái degraded nhưng không mất dữ liệu, vì mỗi PG còn lại 1 replica ở hostgroup còn lại.
- Hiệu năng giảm, và nếu
min_size=1, cụm vẫn ghi được; nếumin_size=2, cụm dừng ghi.
3.2. Khi mất hai host khác nhau trong cùng một hostgroup
- Không ảnh hưởng đến toàn vẹn dữ liệu vì bản sao còn lại nằm ở group kia.
3.3. Khi mất 1 node ở mỗi hostgroup trùng đúng cặp replica
- Chỉ PG nằm trên đúng cặp đó bị mất. Xác suất này thấp nhưng tồn tại.
3.4. Tóm tắt cấu trúc lưu trữ (replicated=2)
| Tình huống | Trạng thái | Dữ liệu an toàn |
|---|---|---|
| Mất 1 OSD | OK | Có |
| Mất 1 host | OK | Có |
| Mất 1 hostgroup (nửa cụm) | OK (degraded) | Có |
| Mất 2 node ở 2 group khác nhau | Có thể mất một phần | Không đảm bảo |
4. Khi replication = 3
Nếu cụm vẫn có 2 hostgroup, rule sẽ tự động đặt 2 replica ở group khác nhau, còn replica thứ 3 ngẫu nhiên quay lại 1 trong 2 group (vì chỉ có 2 lựa chọn). => Độ bền chỉ tốt hơn chút, chưa tối ưu.
4.1. Giải pháp đúng cho replication=3 Để tận dụng đúng 3 replica, nên có 3 hostgroup hoặc 3 failure domain khác nhau.
Ví dụ layout:
root ssd-01
├── chassis hostgroup-01
├── chassis hostgroup-02
└── chassis hostgroup-03
CRUSH rule:
take ssd-01
chooseleaf firstn 3 type chassis
emit
→ Mỗi replica ở một hostgroup riêng biệt → cụm chịu được mất hẳn 1 hostgroup và vẫn an toàn khi mất thêm 1 node khác.
4.2. Tóm tắt cấu trúc lưu trữ (replicated=3)
| Tình huống | Trạng thái | Dữ liệu an toàn |
|---|---|---|
| Mất 1 OSD | OK | Có |
| Mất 1 host | OK | Có |
| Mất 1 hostgroup | OK (degraded, còn 2 bản) | Có |
| Mất 2 hostgroup | Mất dữ liệu | Không |
5. Ví dụ minh họa logic hoạt động
POOL size=2, failure-domain=chassis
┌──────────────┬────────────────────────────┐
│ hostgroup-01 │ hostgroup-02 │
├──────────────┼────────────────────────────┤
│ osd.0 │ osd.5 │ ← PG #1 replica
│ osd.1 │ osd.6 │ ← PG #2 replica
│ osd.2 │ osd.7 │ ← PG #3 replica
└──────────────┴────────────────────────────┘
Tổng dung lượng usable ≈ dung lượng của hostgroup nhỏ hơn (vì mỗi object phải có 1 bản ở mỗi group).
6. Lời khuyên
-
Nếu chỉ có 2 nhóm vật lý (2 rack / 2 DC) → nên dùng replica=2, failure-domain=chassis.
-
Ưu tiên an toàn theo vùng.
-
Dễ mở rộng: thêm node theo cặp để cân dung lượng.
-
Nếu cụm lớn hoặc yêu cầu độ bền cực cao → chia thành 3 hostgroup và dùng replica=3.
-
Luôn kiểm tra:
-
ceph osd crush rule dump <rule>để xác nhậntype: chassis -
ceph osd find <osd.id>để xác nhận OSD nằm ở hostgroup đúng. -
Theo dõi cân bằng:
-
Dùng
ceph osd df treeđể xem tổng weight giữa các hostgroup. - Nếu lệch quá nhiều, nhóm nhỏ sẽ full sớm → cần thêm node hoặc weight lại.
7. Kết luận
Việc định nghĩa chassis/hostgroup trong Ceph giúp tăng khả năng chịu lỗi ở cấp vùng hoặc rack, không chỉ ở cấp host.
- Với replica=2, thiết kế hai hostgroup là tối ưu nhất, chịu được mất 1 nửa cụm mà vẫn an toàn dữ liệu.
- Với replica=3, cần 3 group độc lập để đạt mức an toàn thực sự. Layout này đặc biệt phù hợp cho các môi trường có hai khu vật lý (two-room, two-rack, dual power domain) hoặc triển khai cross-site. Khi thiết kế hợp lý, Ceph sẽ đạt cả hiệu năng tốt, độ bền dữ liệu cao, và mở rộng dễ dàng mà không cần tăng replica không cần thiết.