OSD, Pool & PG on Ceph Proxmox



This content originally appeared on DEV Community and was authored by Fega Suseno

Oke kita akan bahas perbedann dari istilah-istilah di atas.

OSD = 1 HDD (atau SSD)

OSD (Object Storage Daemon) adalah service Ceph yang bertugas menyimpan data pada satu perangkat fisik (biasanya HDD/SSD/NVMe).
Jadi kalau kamu punya 1 HDD = 1 OSD. Kalau 1 node punya 4 HDD, berarti node itu biasanya akan jalan dengan 4 OSD. OSD ini yang langsung menyimpan data, melakukan replikasi, balancing, dll.

Pool itu apanya?

Pool = wadah/logical storage di atas OSD. Kalau OSD itu level fisik, pool itu level logis. Misalnya,kamu bikin pool rbd untuk virtual disk VM Proxmox. Bikin pool cephfs_data untuk CephFS dan pool backups khusus untuk backup. Setiap pool bisa punya setting berbeda, misalnya:

  • size (jumlah replika): default 3 → artinya setiap data di pool itu disalin ke 3 OSD berbeda.
  • min_size: minimal replika aktif supaya Ceph tetap izinkan IO.
  • crush_rule: aturan di mana replika boleh ditempatkan (misal beda node/rack).

Hubungan OSD ↔ Pool

Data tidak ditulis langsung ke OSD, tapi ke pool. Pool kemudian membagi data ke PG (Placement Group). PG inilah yang disebar ke OSD sesuai aturan replikasi.

Contoh:
Kamu punya pool rbd dengan size=3. Saat VM tulis data ke rbd, Ceph bikin 1 objek → disimpan di 3 OSD berbeda (karena size=3).
Jadi walaupun ada 1 HDD/OSD mati, data tetap aman (asal masih sesuai min_size).

Singkatnya:

  • OSD = harddisk/SSD (fisik, penyimpanan nyata).
  • Pool = wadah logis tempat data ditulis, yang aturannya bisa berbeda-beda (berapa replika, penempatan, dll).

kira-kira seperti ini diagram singkatnya

Apa itu PG (Placement Group)

PG adalah “wadah kecil” (unit logis) yang menampung objek-objek data sebelum disebar ke OSD. Jadi, saat kamu simpan data di pool, Ceph tidak langsung taruh objek di OSD, tapi objek dimasukkan dulu ke dalam PG. Setiap PG kemudian dipetakan ke beberapa OSD sesuai aturan replikasi (size).

Bayangkan kalau Ceph langsung hitung tiap objek → OSD mana? Itu akan jadi sangat berat. Dengan PG, data dikelompokkan ke dalam PG. Lalu PG-lah yang dipetakan ke OSD, ini bikin Ceph lebih cepat dan scalable.

Hubungan Pool, PG, OSD

Pool punya sekian banyak PG (jumlahnya bisa ratusan/ribuan tergantung setting). Setiap PG akan dipetakan ke beberapa OSD (sesuai size/replika). Objek data masuk ke dalam PG, lalu otomatis tersebar ke OSD yang memegang PG itu.

Contoh sederhana
Pool rbd dibuat dengan size=3 (3 replika). Kamu set pg_num = 128. Maka pool rbd punya 128 PG. Setiap PG akan ditempatkan ke 3 OSD berbeda (karena size=3). Jadi kalau ada ribuan objek, mereka akan tersebar rata ke 128 PG → lalu ke OSD-OSD sesuai mapping.

Ilustrasi singkat

  • Pool → punya banyak PG
  • PG → tersebar ke beberapa OSD
  • Data/objek → masuk ke PG → lalu disimpan di OSD

Singkatnya:

  • OSD = harddisk penyimpan data nyata.
  • Pool = wadah logis tempat user simpan data.
  • PG = penghubung/perantara agar data dari pool bisa disebar merata ke OSD.

Semoga bermanfaat.


This content originally appeared on DEV Community and was authored by Fega Suseno