Mengukur dan mendesain performa Ceph: benchmark block dan object storage dengan fio dan s3cmd, memahami failureDomain host rack dan region, memilih mode RBD data pool untuk mengoptimalkan latensi, serta menghadirkan NVMe-oF sebagai jalur low-latency.

Ceph sudah dimonitor (episode 18). Episode 19 menjawab pertanyaan yang selalu muncul saat storage produktif digunakan: "seberapa kencang? dan bagaimana memastikan data aman saat satu host/rack mati?" Dua konsep: performance dan failure domain.
Mengapa penting? Sebuah storage yang lambat atau yang silaht donasi data saat rack mati adalah kewajiban yang gagal. Memahami domain kegagalan menentukan redundancy menyeluruh; memahami pola I/O menentukan optimasi. Keduanya menciptakan storage yang benar-benar "tinggal pakai".
kubectl exec -it deploy/bench -- fio --name=test \
--filename=/mnt/bench/testfile \
--rw=randwrite --bs=4k --numjobs=4 --iodepth=32 \
--runtime=30 --time_based --group_reporting| Mode | Read | Write | Keterangan |
|---|---|---|---|
| Replicated (RBD) | Tinggi | Tinggi | Contoh PV production |
| EC (RBD pool EC) | Bisa lebih lambat (CPU paritas) | Menurun saat write | Hemat disk, kost CPU |
Untuk workload database (PostgreSQL, episode 10), replicated RBD biasanya pilihan tepat.
fio menampilkan IOPS & bandwidth (4k randwrite, sequential read, dll). Simpan baseline untuk dibandingkan setelah tuning.
aws --endpoint-url http://rook-ceph-rgw-my-store:8080 \
s3 cp --recursive /tmp/big-files s3://bench-bucket/Atau dengan presigned URL (repo benchmark) untuk download parallel.
failureDomain: host | rack | regionPool menentukan di mana data boleh "jangan bersama". Contoh:
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
name: replicated-pool
namespace: rook-ceph
spec:
failureDomain: host
replicated:
size: 3host — replika minimal di host yang berbeda (bila ada banyak OSD per node).rack / failure domain rack — replika antar rack berbeda.region (data center) — replika lintas DC.Kompromi:
| failureDomain | Tahan pada | Kerugian |
|---|---|---|
| host | 1 host mati | Bandwidth intra-node tinggi |
| rack | 1 rack mati | Jadi terbentang antar-node → latency lebih |
| region | 1 DC mati | Latency lintas DC; butuh bandwidth ekstra |
Untuk DB production, pilih setidaknya host (dan bila menekan rack bila punya 3+ rack).
dataPool terpisah untuk WAL/DBUntuk beban sync-heavy (DB), pisahkan journal/data:
spec:
blockSize: 4m
replicated:
size: 3
dataPool:
replicated:
size: 3Ini membuat RBD memisahkan data segar (memakai recovery pool terpisah) & memungkinkan melakukan fragmen. Tidak wajib untuk semua workload — tetapi penting untuk latency rendah DB.
Sejak Ceph v20 (didukung Rook v1.20), RBD bisa diekspos sebagai NVMe-oF — client attach volume sebagai NVMe drive lewat TCP. Keuntungan:
Setup: CephBlockPool ekspos dengan endpoint NVMe-oF (lihat dokumentasi Rook) dan driver client. Untuk lab, benchmarking dengan replicated RBD biasa sudah cukup — NVMe-oF adalah optimasi lanjutan.
Warning
fio di cluster tanpa beban ≠ fio di cluster production. Untuk nilai yang dapat dipercaya, jalankan benchmark saat ada workload riil (atau di maintenance window), dan gunakan baseline berkala untuk melihat degradasi OSD/net.
Inti yang harus dibawa pulang:
failureDomain: host/rack/region menentukan toleransi kehilangan rack/DC sempurna.dataPool terpisah dapat membantu latency DB; NVMe-oF (Ceph v20) untuk jalur low-latency.Di episode 20 selanjutnya kita akan membahas volume expansion & allowVolumeExpansion — memperbesar PVC PostgreSQL tanpa downtime saat database membesar, dan bagaimana Ceph menangani penambahan kapasitas secara live. Sampai jumpa di episode 20!