Tag: qdevice

  • Menambahkan Ceph MON Eksternal dan QDevice pada Proxmox Cluster 2 Node

    Menambahkan Ceph MON Eksternal dan QDevice pada Proxmox Cluster 2 Node

    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

    HostLayanan
    pveceph1PVE, MON, MGR, 3 OSD
    pveceph2PVE, MON, MGR, 3 OSD
    cephmon3Debian, 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 pveceph1 dan pveceph2.
    • MGR pada pveceph1 dan pveceph2, 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:

    PortArahFungsi
    TCP 3300 dan 6789Antara ketiga host MONKomunikasi Ceph MON
    TCP 5403pveceph1/pveceph2 ke cephmon3Corosync qnetd
    TCP 22Jaringan administrator ke cephmon3SSH 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: