Logo

Personal Ops Runbook

Personal runbook covering infrastructure operations for Cloud, Kubernetes, OpenStack, and Ceph environments. Includes deployment and teardown procedures, node management, cluster monitoring setup, and incident response workflows compiled from day-to-day operational work. Intended strictly for personal reference — configurations and scripts are environment-specific and not guaranteed to work as-is elsewhere.

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ếu min_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
Mất 1 host OK
Mất 1 hostgroup (nửa cụm) OK (degraded)
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 hostgroupvẫ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
Mất 1 host OK
Mất 1 hostgroup OK (degraded, còn 2 bản)
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

  1. Nếu chỉ có 2 nhóm vật lý (2 rack / 2 DC) → nên dùng replica=2, failure-domain=chassis.

  2. Ưu tiên an toàn theo vùng.

  3. Dễ mở rộng: thêm node theo cặp để cân dung lượng.

  4. 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.

  5. Luôn kiểm tra:

  6. ceph osd crush rule dump <rule> để xác nhận type: chassis

  7. ceph osd find <osd.id> để xác nhận OSD nằm ở hostgroup đúng.

  8. Theo dõi cân bằng:

  9. Dùng ceph osd df tree để xem tổng weight giữa các hostgroup.

  10. 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.