Proxmox ortamında tek node üzerinde depolama yönetmek başlangıçta yeterli gibi görünse de üretim ortamlarında bu yaklaşım ciddi riskler barındırır. Disk arızası, tek nokta başarısızlığı, ölçeklenemeyen kapasite… Bunların hepsini çözmek için Ceph tam anlamıyla biçilmiş kaftan. Üstelik Proxmox, Ceph ile olan entegrasyonunu son sürümlerde o kadar olgunlaştırdı ki artık enterprise düzeyde dağıtık depolama kurmak gerçekten erişilebilir hale geldi.
Ceph Nedir ve Neden Proxmox ile Kullanmalısınız?
Ceph, açık kaynaklı bir dağıtık depolama sistemidir. Temel özelliği veriyi birden fazla fiziksel disk ve sunucu üzerine dağıtarak hem yüksek erişilebilirlik hem de ölçeklenebilirlik sağlamasıdır. RADOS (Reliable Autonomic Distributed Object Store) adlı alt yapısı üzerine inşa edilmiş olan Ceph, blok depolama (RBD), nesne depolama (RGW) ve dosya sistemi (CephFS) olarak üç farklı biçimde kullanılabilir.
Proxmox ile Ceph entegrasyonunun öne çıkan avantajları şunlardır:
- Yerleşik web arayüzü desteği: Proxmox GUI üzerinden Ceph kurulumu, izleme ve yönetim yapılabilir
- Düşük gecikme: RBD (RADOS Block Device) doğrudan VM disk imajlarını blok seviyesinde sunar
- Otomatik veri kopyalama: Varsayılan olarak 3 kopya (replica) tutar, bir node çökse bile veri erişilebilir kalır
- Canlı migrasyon: VM’ler shared storage üzerinde çalıştığı için node’lar arası canlı taşıma mümkün olur
- Hyper-converged altyapı: Hem compute hem de storage aynı sunucularda çalışır, maliyet düşer
Tipik bir senaryo düşünelim: 3 fiziksel sunucunuz var, her birinde 4 adet NVMe disk mevcut. Bu sunuculara hem Proxmox hem de Ceph kurarak hem sanallaştırma hem de dağıtık depolama ihtiyacını tek seferde çözebilirsiniz.
Donanım ve Ağ Gereksinimleri
Ceph’i verimli çalıştırmak için ağ altyapısı kritik önem taşır. İki farklı ağ segmenti kullanmanız şiddetle tavsiye edilir:
- Public Network (frontend): İstemcilerin ve Proxmox node’larının Ceph’e eriştiği ağ (genellikle 10GbE)
- Cluster Network (backend): OSD’ler arasındaki veri replikasyonu ve recovery için kullanılan ağ (genellikle 10GbE veya 25GbE)
Minimum önerilen donanım gereksinimleri:
- CPU: Her OSD için en az 1 çekirdek (NVMe diskler için 2 çekirdek önerilir)
- RAM: Her OSD başına 1-2 GB, MON süreçleri için ek 1-2 GB
- Disk: OSD’ler için ayrılmış diskler (OS diski ile karıştırmayın)
- Ağ: En az 10 Gbps bağlantı, production ortamda bonding/lacp önerilir
Bu yazıda kullanacağımız lab ortamı 3 node’dan oluşacak:
- pve1: 192.168.1.101 (public), 10.10.10.101 (cluster)
- pve2: 192.168.1.102 (public), 10.10.10.102 (cluster)
- pve3: 192.168.1.103 (public), 10.10.10.103 (cluster)
Her node’da 3 adet ek disk mevcut: /dev/sdb, /dev/sdc, /dev/sdd
Proxmox Üzerinde Ceph Kurulumu
Proxmox, Ceph paketlerini kendi deposundan sunar. Kuruluma başlamadan önce tüm node’larda /etc/hosts dosyasının doğru yapılandırıldığından emin olun.
# /etc/hosts dosyasını tüm node'larda düzenleyin
cat >> /etc/hosts << EOF
192.168.1.101 pve1
192.168.1.102 pve2
192.168.1.103 pve3
EOF
Ceph paketlerini kurmak için Proxmox GUI kullanabileceğiniz gibi komut satırı üzerinden de ilerleyebilirsiniz. Komut satırı yöntemini tercih ediyorum çünkü ne yaptığınızı daha iyi anlamanızı sağlar.
# Tüm node'larda Ceph paketlerini kur
pveceph install --repository no-subscription
# Kurulumun başarılı olduğunu doğrula
ceph --version
Şimdi Ceph cluster’ını başlatmamız gerekiyor. Bu adım sadece ilk node’da yapılır:
# pve1 üzerinde Ceph cluster'ı başlat
pveceph init --network 192.168.1.0/24 --cluster-network 10.10.10.0/24
# Oluşturulan konfigürasyonu kontrol et
cat /etc/ceph/ceph.conf
Tipik bir ceph.conf çıktısı şöyle görünür:
[global]
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
cluster network = 10.10.10.0/24
public network = 192.168.1.0/24
keyring = /etc/pve/priv/$cluster.$name.keyring
log to syslog = true
osd journal size = 5120
osd pool default size = 3
osd pool default min size = 2
Monitor (MON) Kurulumu
Ceph Monitor servisleri cluster durumunu takip eder ve quorum sağlar. En az 3 MON gerekir, her zaman tek sayıda olmalıdır (3, 5, 7…).
# pve1 üzerinde ilk MON'u oluştur
pveceph createmon
# pve2 üzerinde ikinci MON'u oluştur
# pve2'ye SSH ile bağlandıktan sonra:
pveceph createmon
# pve3 üzerinde üçüncü MON'u oluştur
# pve3'e SSH ile bağlandıktan sonra:
pveceph createmon
# MON durumunu kontrol et (herhangi bir node'dan)
ceph mon stat
ceph quorum_status --format json-pretty | python3 -m json.tool
MON’lar kurulduktan sonra Manager (MGR) servislerini de oluşturmanız gerekir. MGR, Ceph’in dashboard ve telemetri fonksiyonlarını yönetir:
# Her node'da MGR oluştur
pveceph createmgr
# MGR durumunu kontrol et
ceph mgr stat
OSD (Object Storage Daemon) Ekleme
OSD’ler gerçek veriyi saklayan servislerin ta kendisidir. Her disk için bir OSD oluşturulur. Bu adım her node’da ilgili diskler için tekrarlanmalıdır.
# pve1 üzerindeki diskleri OSD olarak ekle
pveceph createosd /dev/sdb
pveceph createosd /dev/sdc
pveceph createosd /dev/sdd
# pve2 ve pve3 üzerinde de aynı işlemi tekrarla
# (o sunucularda da çalıştırılmalı)
# OSD durumunu kontrol et
ceph osd stat
ceph osd tree
ceph osd tree komutu size cluster’ın CRUSH haritasını gösterir. Her node altındaki OSD’leri ve bunların durumlarını (up/down, in/out) listeler. Sağlıklı bir çıktı şöyle görünmelidir:
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.52734 root default
-3 0.17578 host pve1
0 hdd 0.05859 osd.0 up 1.00000 1.00000
1 hdd 0.05859 osd.1 up 1.00000 1.00000
2 hdd 0.05859 osd.2 up 1.00000 1.00000
-5 0.17578 host pve2
3 hdd 0.05859 osd.3 up 1.00000 1.00000
...
NVMe diskler kullanıyorsanız bluestore WAL ve DB için ayrı diskler (genellikle hızlı SSD) belirtebilirsiniz:
# NVMe OSD için WAL ve DB disklerini ayrı belirt
pveceph createosd /dev/nvme0n1 --wal-dev /dev/nvme1n1 --db-dev /dev/nvme1n1
Ceph Pool Oluşturma ve Proxmox’a Ekleme
Cluster hazır olduğunda storage pool oluşturmanız gerekir. VM disklerini saklamak için replicated pool kullanacağız.
# VM imajları için pool oluştur
pveceph createpool vm-disks --add_storages 1 --pg_num 128 --size 3 --min_size 2
# CephFS için metadata ve data pool'ları oluştur
pveceph createpool cephfs-meta --pg_num 32
pveceph createpool cephfs-data --pg_num 128
# Pool listesini kontrol et
ceph osd pool ls detail
PG (Placement Group) sayısını doğru seçmek performans açısından kritiktir. Genel kural şudur: toplam OSD sayısı 100 / replica sayısı. 9 OSD ve 3 replica için: 9 100 / 3 = 300, en yakın 2’nin kuvveti olan 256 uygun olur. Ancak küçük lab ortamlarında 128 de kabul edilebilir.
Proxmox web arayüzünden Datacenter > Storage > Add > RBD yolunu izleyerek Ceph storage’ı ekleyebilirsiniz. Komut satırından yapmak isterseniz:
# Proxmox storage konfigürasyonuna Ceph ekle
pvesm add rbd ceph-vms
--monhost "192.168.1.101,192.168.1.102,192.168.1.103"
--pool vm-disks
--content images,rootdir
--username admin
--keyring /etc/pve/priv/ceph.client.admin.keyring
# Storage durumunu kontrol et
pvesm status
CephFS ile Shared Dosya Sistemi
RBD blok depolama dışında CephFS ile paylaşımlı dosya sistemi de oluşturabilirsiniz. Bu özellikle ISO imajları, container template’leri ve backup dosyaları için çok kullanışlıdır.
# CephFS oluştur
pveceph fs create --name cephfs --add-storage 1 --pg_num 128
# CephFS durumunu kontrol et
ceph fs status
ceph fs ls
# Mount etmek için gerekli bilgileri al
ceph auth get-key client.admin
CephFS’i Proxmox’a eklerken:
# CephFS storage ekle
pvesm add cephfs cephfs-storage
--server 192.168.1.101
--path /mnt/pve/cephfs
--content iso,vztmpl,backup
--username admin
--subdir /
Gerçek Dünya Senaryosu: VM Migration ve Yüksek Erişilebilirlik
Ceph’in en büyük avantajı canlı migrasyon ve HA (High Availability) desteğidir. Şöyle bir senaryo düşünelim: pve1 sunucusunda bakım yapmanız gerekiyor, üzerinde çalışan 5 adet kritik VM var.
# pve1 üzerindeki tüm VM'leri listele
qm list
# VM 100'ü pve2'ye canlı olarak taşı
qm migrate 100 pve2 --online 1
# Migration durumunu takip et
qm status 100
# pve1'i maintenance moduna al
ha-manager crm-command node-maintenance-enable pve1
HA grubu oluşturarak VM’lerin otomatik olarak başka node’lara taşınmasını sağlayabilirsiniz:
# HA grubu oluştur
ha-manager groupadd production-vms --nodes "pve1:2,pve2:2,pve3:1"
# VM'i HA yönetimine ekle
ha-manager add vm:100 --group production-vms --state started --max_restart 3
# HA durumunu kontrol et
ha-manager status
Bir node çöktüğünde Ceph’in durumunu izlemek için:
# Cluster sağlık durumu
ceph health detail
# Hangi PG'ler degraded durumda?
ceph pg dump | grep -E "degraded|incomplete"
# Recovery işleminin ilerleme durumu
ceph status
watch -n 5 ceph status
Performans Ayarları ve Optimizasyon
Varsayılan Ceph ayarları çoğu ortam için yeterli olsa da production ortamlarında birkaç optimizasyon büyük fark yaratır.
# OSD başına işlemci thread sayısını artır
ceph config set osd osd_op_num_threads_per_shard 2
# NVMe diskler için read-ahead değerini optimize et
ceph config set osd bluestore_cache_size_ssd 3221225472
# Client cache boyutunu ayarla (RBD için)
ceph config set global rbd_cache_size 134217728
ceph config set global rbd_cache_max_dirty 100663296
# Değişiklikleri kontrol et
ceph config dump | grep -E "osd|rbd"
Network performansı için Jumbo Frame kullanımı çok önemlidir. Tüm node’larda ve switch’lerde MTU 9000 ayarlanmalıdır:
# Cluster network interface için MTU ayarla (tüm node'larda)
ip link set enp3s0 mtu 9000
echo 'MTU=9000' >> /etc/network/interfaces.d/cluster-net
# MTU'nun doğru çalıştığını test et
ping -M do -s 8972 10.10.10.102
Scrubbing işlemleri disk I/O’sunu meşgul edebilir. Bunu iş saatlerine göre kısıtlamak mantıklıdır:
# Scrubbing'i gece yarısı ile sabah 6 arasına kısıtla
ceph config set osd osd_scrub_begin_hour 0
ceph config set osd osd_scrub_end_hour 6
# Deep scrub sıklığını azalt (saniye cinsinden, varsayılan 7 gün)
ceph config set osd osd_deep_scrub_interval 1209600
İzleme ve Bakım Operasyonları
Ceph cluster’ının sağlığını sürekli izlemek kritik öneme sahiptir. Birkaç temel komut ve senaryo:
# Kapsamlı cluster raporu
ceph report | python3 -m json.tool | head -100
# Disk doluluk oranlarını kontrol et
ceph df detail
# OSD başına I/O istatistikleri
ceph osd perf
# Yavaş OSD'leri tespit et
ceph osd blocked-by
Bir OSD arızalandığında prosedürü şöyle işleyin:
# Arızalı OSD'yi cluster'dan çıkar (örneğin osd.3)
ceph osd out osd.3
# Recovery'nin tamamlanmasını bekle
watch -n 10 "ceph status | grep -E 'health|recovery'"
# OSD servisini durdur
systemctl stop ceph-osd@3
# OSD'yi tamamen sil
ceph osd purge osd.3 --yes-i-really-mean-it
# Disk formatlanıp yeni OSD eklenebilir
pveceph createosd /dev/sdc
Disk boyutu büyüdüğünde kapasite artırmak çok basittir. Yeni sunucu veya disk eklemek için:
# Yeni node pve4 eklendiğinde, o node üzerinde:
pveceph install --repository no-subscription
pveceph createmon
pveceph createmgr
pveceph createosd /dev/sdb
pveceph createosd /dev/sdc
# Cluster otomatik olarak rebalance yapar
# İlerlemeyi izle
watch -n 5 ceph status
Backup ve Snapshot Yönetimi
Ceph RBD’nin snapshot özelliği Proxmox backup stratejisiyle güzel entegre olur:
# Manuel RBD snapshot al
rbd snap create vm-disks/vm-100-disk-0@backup-$(date +%Y%m%d)
# Mevcut snapshot'ları listele
rbd snap ls vm-disks/vm-100-disk-0
# Snapshot'tan clone oluştur (test ortamı için)
rbd snap protect vm-disks/vm-100-disk-0@backup-20240115
rbd clone vm-disks/vm-100-disk-0@backup-20240115 vm-disks/vm-100-test-clone
# Proxmox backup job'u oluştur (Proxmox Backup Server ile)
vzdump 100 --storage pbs-storage --mode snapshot --compress zstd
Proxmox’un yerleşik backup sistemi Ceph storage üzerindeki VM’leri snapshot modunda yedekler, bu sayede backup sırasında VM durdurulmadan veri tutarlılığı sağlanır.
Güvenlik: CephX Kimlik Doğrulama
Production ortamında her uygulama veya kullanıcı için kısıtlı yetkilere sahip ayrı Ceph kullanıcıları oluşturun:
# Sadece belirli pool'a erişebilen kullanıcı oluştur
ceph auth get-or-create client.proxmox-ro
mon 'allow r'
osd 'allow r pool=vm-disks' > /etc/ceph/ceph.client.proxmox-ro.keyring
# Tam yetkili bir kullanıcı oluştur (yazma dahil)
ceph auth get-or-create client.proxmox-rw
mon 'allow r'
osd 'allow rwx pool=vm-disks' > /etc/ceph/ceph.client.proxmox-rw.keyring
# Mevcut kullanıcıları listele
ceph auth ls
Sorun Giderme: Sık Karşılaşılan Durumlar
HEALTH_WARN: clock skew detected durumunda tüm node’larda NTP senkronizasyonunu kontrol edin:
# Chrony durumunu kontrol et
chronyc tracking
chronyc sources -v
# Gerekirse yeniden sync yap
chronyc makestep
PG stuck inactive durumunda:
# Hangi PG'ler etkilenmiş?
ceph pg dump_stuck inactive
# OSD haritasını zorla güncelle
ceph osd force-create-pg <pg-id>
Full OSD uyarısında acil kapasite açmak için:
# Full ratio'yu geçici olarak artır
ceph osd set-full-ratio 0.97
ceph osd set-backfillfull-ratio 0.92
# Sonra kalıcı çözüm olarak disk ekle veya eski verileri temizle
ceph df detail
Sonuç
Ceph ile Proxmox entegrasyonu, başlangıçta karmaşık görünse de adım adım ilerlediğinizde gayet yönetilebilir bir yapı ortaya çıkıyor. Hyper-converged yaklaşımın en güzel tarafı ekstra SAN veya NAS donanımı olmaksızın enterprise seviyesinde bir depolama altyapısı elde etmeniz. 3 node ve birkaç disk ile başlayıp ihtiyaç arttıkça yeni node ve disk ekleyerek ölçekleyebilirsiniz.
Şunu özellikle vurgulamak isterim: Ceph production’a almadan önce lab ortamında en az bir node arızası, disk arızası ve network bölünmesi (split-brain) senaryolarını test edin. Ceph bu durumları teorik olarak iyi yönetse de sizin ortamınızdaki davranışı değişkenlik gösterebilir. Monitoring altyapısını (Prometheus + Grafana veya en azından Ceph Dashboard) kurulmadan production’a geçmeyin.
Son olarak PG sayısı ve replika sayısı gibi temel parametreleri işe başlamadan doğru hesaplayın. Bu değerleri sonradan değiştirmek veri rebalancing nedeniyle ciddi I/O yüküne sebep olur. Doğru planlamayla Ceph, Proxmox ortamlarının en güçlü depolama çözümlerinden biri olmaya devam ediyor.