Saya memiliki Proxmox cluster yang terdiri dari pveceph1 dan pveceph2, dengan tiga OSD Ceph pada setiap node. Agar cluster tetap dapat dikelola dan storage Ceph tetap melayani I/O ketika salah satu node mati, saya menambahkan server Debian eksternal bernama cephmon3.
Server tersebut menjalankan dua layanan berbeda:
- Ceph MON ketiga untuk menjaga quorum Ceph.
- Corosync qnetd untuk memberikan vote QDevice kepada cluster PVE.
Ceph MON tidak menggantikan QDevice karena keduanya menangani quorum yang berbeda.
Topologi
| Host | Layanan |
|---|---|
pveceph1 | PVE, MON, MGR, 3 OSD |
pveceph2 | PVE, MON, MGR, 3 OSD |
cephmon3 | Debian, MON, qnetd, tanpa OSD |
cephmon3 harus berada pada server atau hypervisor independen. Jangan menyimpannya pada pveceph1, pveceph2, atau pool Ceph yang sama.
1. Memastikan MON dan MGR pada kedua node
Dari GUI Proxmox, buka node > Ceph > Monitor. Pastikan layanan berikut sudah terdaftar:
- MON pada
pveceph1danpveceph2. - MGR pada
pveceph1danpveceph2, dengan satu active dan satu standby.
Jika ada yang belum tersedia, pilih node terkait lalu klik Create pada bagian Monitor atau Manager.
Lanjutkan ketika kedua MON PVE sudah berada dalam quorum.

2. Menyiapkan server cephmon3
Saya menggunakan Debian 13 minimal dengan 2 vCPU, RAM 4 GB, disk lokal 32 GB, IP statis, SSH server, dan tanpa desktop environment.
Pastikan hostname konsisten:
hostnamectl set-hostname cephmon3
hostnamectl
Tambahkan resolusi hostname ketiga server melalui DNS internal atau /etc/hosts. Pastikan waktu tersinkronisasi:
apt update
apt install -y chrony
systemctl enable --now chrony
Jika Debian dipasang menggunakan ISO DVD, nonaktifkan sumber deb cdrom: dan pastikan repository online Debian Trixie sudah aktif sebelum menjalankan apt update.
3. Mengatur firewall (untuk production)
Untuk lingkungan produksi, firewall sebaiknya tetap aktif dan hanya membuka koneksi yang diperlukan:
| Port | Arah | Fungsi |
| TCP 3300 dan 6789 | Antara ketiga host MON | Komunikasi Ceph MON |
| TCP 5403 | pveceph1/pveceph2 ke cephmon3 | Corosync qnetd |
| TCP 22 | Jaringan administrator ke cephmon3 | SSH administrasi |
Jika menggunakan Proxmox Firewall, tambahkan rule Ceph pada kedua node PVE dan izinkan IP cephmon3. Pada server Debian, izinkan IP kedua node PVE menuju port MON dan qnetd.
Untuk lab lokal yang terisolasi, firewall dapat dinonaktifkan sementara agar pengujian lebih mudah. Namun, jangan menggunakan cara tersebut pada lingkungan produksi dan aktifkan kembali firewall setelah pengujian selesai.
4. Menginstal Ceph dan qnetd
Jalankan pada cephmon3:
apt update
apt install -y wget ca-certificates corosync-qnetd
wget https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg \
-O /usr/share/keyrings/proxmox-archive-keyring.gpg
Buat /etc/apt/sources.list.d/ceph.sources:
Types: deb
URIs: http://download.proxmox.com/debian/ceph-squid
Suites: trixie
Components: no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
Kemudian instal paket Ceph:
apt update
apt install -y ceph-common ceph-mon
systemctl enable --now corosync-qnetd
ceph --version
Pastikan versi major Ceph sama dengan kedua node PVE, yaitu Squid 19.2.x.
5. Melakukan bootstrap MON eksternal
Buat direktori transfer pada cephmon3:
install -d -m 700 /root/cephmon3-bootstrap
install -d -m 755 /etc/ceph
Kemudian jalankan pada pveceph1:
install -d -m 700 /root/cephmon3-bootstrap
cp /etc/pve/ceph.conf /root/cephmon3-bootstrap/ceph.conf
ceph auth get mon. -o /root/cephmon3-bootstrap/ceph.mon.keyring
ceph mon getmap -o /root/cephmon3-bootstrap/monmap
scp /root/cephmon3-bootstrap/* root@<IP-CEPHMON3>:/root/cephmon3-bootstrap/
Kembali ke cephmon3:
install -m 644 /root/cephmon3-bootstrap/ceph.conf /etc/ceph/ceph.conf
nano /etc/ceph/ceph.conf
Tambahkan konfigurasi berikut:
[mon.cephmon3]
public_addr = <IP-CEPHMON3>
ID MON harus konsisten. Karena service bernama ceph-mon@cephmon3, direktori datanya harus bernama ceph-cephmon3 dan konfigurasi menggunakan [mon.cephmon3].
Inisialisasi data MON:
install -d -o ceph -g ceph -m 0750 /var/lib/ceph/mon/ceph-cephmon3
ceph-mon -i cephmon3 --mkfs \
--monmap /root/cephmon3-bootstrap/monmap \
--keyring /root/cephmon3-bootstrap/ceph.mon.keyring
chown -R ceph:ceph /var/lib/ceph/mon/ceph-cephmon3
systemctl enable --now ceph-mon@cephmon3
systemctl status ceph-mon@cephmon3 --no-pager
6. Memperbarui konfigurasi Ceph pada PVE
Setelah MON eksternal berhasil menyala, edit /etc/pve/ceph.conf dari salah satu node PVE:
nano /etc/pve/ceph.conf
Tambahkan IP cephmon3 pada baris mon_host yang sudah ada:
mon_host = <IP-PVECEPH1> <IP-PVECEPH2> <IP-CEPHMON3>
Tambahkan juga:
[mon.cephmon3]
public_addr = <IP-CEPHMON3>
Salin konfigurasi final ke server MON eksternal:
scp /etc/pve/ceph.conf root@<IP-CEPHMON3>:/etc/ceph/ceph.conf
Verifikasi dari node PVE:
ceph -s
ceph mon stat
ceph quorum_status --format json-pretty
Targetnya adalah tiga MON berada dalam quorum:
pveceph1, pveceph2, cephmon3

7. Menambahkan QDevice
Instal package QDevice pada kedua node PVE:
apt update
apt install -y corosync-qdevice
Pastikan corosync-qnetd aktif pada cephmon3:
systemctl status corosync-qnetd --no-pager
Kemudian jalankan satu kali dari pveceph1:
pvecm qdevice setup <IP-CEPHMON3>
pvecm status
Hasil yang diharapkan:
Expected votes: 3
Total votes: 3
Quorum: 2
Flags: Quorate Qdevice
Dengan QDevice, pvecm expected 1 tidak perlu digunakan sebagai konfigurasi permanen.
8. Memeriksa konfigurasi pool
Untuk cluster dengan OSD hanya pada dua host, pool dibuat terlebih dahulu dengan size 3/min_size 2, kemudian diedit menjadi size 2/min_size 1 pada pvecephpool dan .mgr.
ceph osd pool get pvecephpool size
ceph osd pool get pvecephpool min_size
ceph osd pool get .mgr size
ceph osd pool get .mgr min_size
Nilai min_size 1 membuat storage tetap menerima I/O dari satu replika ketika satu node OSD mati, tetapi Ceph akan berada dalam kondisi degraded dan risiko kehilangan data meningkat.
9. Melakukan pengujian
Matikan salah satu node PVE melalui GUI, kemudian periksa dari node yang masih hidup:
pvecm status
ceph -s
ceph mon stat
Hasil yang diharapkan:
- PVE tetap quorate menggunakan satu node dan QDevice.
- Ceph tetap memiliki quorum melalui satu MON PVE dan
cephmon3. - VM pada node yang masih hidup tetap berjalan.
- Storage tetap dapat menerima I/O, tetapi berstatus degraded sampai node kedua kembali.
VM pada node yang mati hanya dapat otomatis menyala di node lainnya jika telah dikonfigurasi sebagai resource HA dan kapasitas node yang tersisa mencukupi.
Kesimpulan
Penambahan cephmon3 menyelesaikan dua kebutuhan pada cluster dua node: Ceph memperoleh MON ketiga, sedangkan Proxmox memperoleh vote tambahan dari QDevice. Solusi ini dapat menggunakan Debian ringan tanpa menambah node PVE ketiga, tetapi tetap merupakan desain kompromi karena data OSD hanya tersimpan pada dua host.
Referensi:
- Ceph — Adding/Removing Monitors: https://docs.ceph.com/en/squid/rados/operations/add-or-rm-mons/
- Proxmox VE — Corosync External Vote Support: https://pve.proxmox.com/pve-docs/chapter-pvecm.html

