Dağıtık depolama sistemleri, özellikle büyüyen altyapılarda tek nokta arıza riskini ortadan kaldırmanın ve kapasiteyi esnek biçimde artırmanın en etkili yollarından biri. GlusterFS tam da bu noktada devreye giriyor: açık kaynaklı, ölçeklenebilir ve kurumsal düzeyde güvenilir bir dağıtık dosya sistemi. Ben de geçmişte birden fazla müşteri projesinde GlusterFS kullandım ve şunu söyleyebilirim: doğru kurulup yapılandırıldığında gerçekten hayat kurtarıyor.
Bu yazıda sıfırdan bir GlusterFS kümesi kuracağız, farklı volume tiplerini inceleyeceğiz ve gerçek dünya senaryolarında nasıl kullanılacağını göreceğiz.
Ortam Tanımı ve Gereksinimler
Önce ne üzerinde çalışacağımızı netleştirelim. Bu yazı boyunca aşağıdaki senaryoyu kullanacağız:
- gluster01: 192.168.10.101 – Birinci storage node
- gluster02: 192.168.10.102 – İkinci storage node
- gluster03: 192.168.10.103 – Üçüncü storage node
- client01: 192.168.10.200 – GlusterFS’i mount edecek istemci
Her node üzerinde ayrı bir disk var (/dev/sdb), bu diski GlusterFS için kullanacağız. İşletim sistemi olarak Ubuntu 22.04 LTS kullanıyorum ama Debian, Rocky Linux veya CentOS üzerinde de adımlar büyük ölçüde aynı.
Minimum sistem gereksinimleri:
- Her node için en az 2 GB RAM
- Özel bir network arayüzü (storage trafiği için production’da ayrı NIC önerilir)
- Tüm node’larda senkronize sistem saati (NTP şart!)
- Node’lar arası hostname çözümleme
Ön Hazırlık: Tüm Node’larda Yapılacaklar
Her üç storage node’unda da şu adımları uygulamanız gerekiyor. Ansible veya benzeri bir araç kullanıyorsanız bu adımları kolayca otomatize edebilirsiniz.
Hosts Dosyasını Düzenleme
DNS yoksa en basit çözüm /etc/hosts dosyasını düzenlemek:
cat >> /etc/hosts << 'EOF'
192.168.10.101 gluster01
192.168.10.102 gluster02
192.168.10.103 gluster03
EOF
NTP Senkronizasyonu
Dağıtık sistemlerde zaman senkronizasyonu kritik. Birkaç saniyelik sapma bile sorun çıkarabilir:
apt update && apt install -y chrony
systemctl enable chrony --now
chronyc tracking
GlusterFS Kurulumu
Ubuntu 22.04 üzerinde GlusterFS paketleri doğrudan depoda mevcut:
apt install -y glusterfs-server
systemctl enable glusterd --now
systemctl status glusterd
Rocky Linux / AlmaLinux kullanıyorsanız:
dnf install -y centos-release-gluster
dnf install -y glusterfs glusterfs-server
systemctl enable glusterd --now
Disk Hazırlığı
Her node’da /dev/sdb diskini XFS olarak formatlayacağız. GlusterFS resmi olarak XFS’i öneriyor çünkü büyük dosyalarda performansı daha iyi:
# Önce diskte partition oluştur
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart primary xfs 0% 100%
# XFS formatla
mkfs.xfs /dev/sdb1
# Mount noktası oluştur
mkdir -p /data/glusterfs/brick1
# fstab'a ekle (UUID kullanmak daha güvenli)
UUID=$(blkid -s UUID -o value /dev/sdb1)
echo "UUID=$UUID /data/glusterfs/brick1 xfs defaults,noatime 0 2" >> /etc/fstab
# Mount et
mount -a
df -h /data/glusterfs/brick1
Dikkat: noatime mount opsiyonu, her dosya erişiminde access time güncellemesini devre dışı bırakır. Dağıtık depolama için bu opsiyonu her zaman kullanın, disk I/O’nuz ciddi ölçüde azalır.
GlusterFS Küme Kurulumu
Peer Ekleme (Trusted Pool)
GlusterFS’de node’lar bir “trusted pool” oluştururlar. Bu işlemi sadece bir node’dan yapmanız yeterli, ben gluster01 üzerinden yapıyorum:
# gluster01 üzerinde:
gluster peer probe gluster02
gluster peer probe gluster03
# Küme durumunu kontrol et
gluster peer status
Çıktı şöyle görünmeli:
Number of Peers: 2
Hostname: gluster02
Uuid: a1b2c3d4-...
State: Peer in Cluster (Connected)
Hostname: gluster03
Uuid: e5f6g7h8-...
State: Peer in Cluster (Connected)
Eğer “Peer in Cluster (Disconnected)” görüyorsanız firewall kurallarını kontrol edin. GlusterFS 24007 ve 24008 portlarını, ayrıca brick portları için 49152+ aralığını kullanır.
# UFW kullanıyorsanız:
ufw allow from 192.168.10.0/24 to any port 24007:24008 proto tcp
ufw allow from 192.168.10.0/24 to any port 49152:49251 proto tcp
Volume Tipleri ve Oluşturma
GlusterFS’in güzelliği farklı ihtiyaçlara göre farklı volume tipleri sunması. Her birini açıklayalım ve ne zaman kullanacağımızı belirleyelim.
Replicated Volume (En Yaygın Kullanılan)
Verinin tüm node’lara aynı anda yazılmasını sağlar. Yüksek erişilebilirlik için ideal. Node sayısı kadar kopya tutarsanız herhangi bir node çökse bile veri kaybolmaz:
# Brick dizinlerini oluştur (tüm node'larda)
mkdir -p /data/glusterfs/brick1/replvol
# gluster01 üzerinde volume oluştur
gluster volume create repvol replica 3
gluster01:/data/glusterfs/brick1/replvol
gluster02:/data/glusterfs/brick1/replvol
gluster03:/data/glusterfs/brick1/replvol
# Volume'ü başlat
gluster volume start repvol
# Durumu kontrol et
gluster volume info repvol
Bu yapıda her dosya 3 node’a da yazılır. Herhangi bir node’un gitmesi durumunda veri erişimi devam eder. Ancak kapasiteyi 3 katlamaz; toplam kapasite tek bir node’un kapasitesine eşit olur. Bu çok sık yapılan bir yanlış anlama.
Distributed Volume
Veriyi node’lar arasında dağıtır (RAID 0 benzeri). Kapasite toplamı elde edilir ama redundancy yoktur:
mkdir -p /data/glusterfs/brick1/distvol
gluster volume create distvol
gluster01:/data/glusterfs/brick1/distvol
gluster02:/data/glusterfs/brick1/distvol
gluster03:/data/glusterfs/brick1/distvol
gluster volume start distvol
Bunu production’da tek başına kullanmayın. Yedek depolama veya geçici veri için uygun olabilir.
Distributed-Replicated Volume (Production Favorisi)
Hem dağıtım hem de replikasyonu bir arada sunar. 6 node ile 2 replikalı distributed-replicated volume şöyle kurulur. Ama bizim 3 node’umuz var, o yüzden şöyle yapalım:
mkdir -p /data/glusterfs/brick1/distrepvol
# 3 node, replica 3 = pure replicated (aslında aynı şey)
# Gerçek distributed-replicated için en az 6 node lazım
# Ama 2 node + replica 2 de mümkün:
gluster volume create distrepvol replica 2
gluster01:/data/glusterfs/brick1/distrepvol
gluster02:/data/glusterfs/brick1/distrepvol
gluster volume start distrepvol
gluster volume info distrepvol
Production’da 6 node ile şöyle kullanırsınız:
gluster volume create prod-vol replica 3
gluster01:/brick gluster02:/brick gluster03:/brick
gluster04:/brick gluster05:/brick gluster06:/brick
Bu yapıda veriler iki gruba dağıtılır (distribute), her grup 3 replika tutar.
Volume Ayarlarını Optimize Etme
Volume oluşturduktan sonra bazı performans parametrelerini ayarlamak önemli:
# Okuma performansı için read-ahead'i aktif et
gluster volume set repvol performance.read-ahead on
# Write-back cache
gluster volume set repvol performance.write-behind on
# Cache boyutunu artır (RAM'e göre ayarlayın)
gluster volume set repvol performance.cache-size 512MB
# Küçük dosyalar için io-cache
gluster volume set repvol performance.io-cache on
# Network timeout
gluster volume set repvol network.ping-timeout 20
# Tüm ayarları görüntüle
gluster volume get repvol all | grep -v "^$"
İstemci Tarafında Mount Etme
Native GlusterFS Client
En iyi performans için native GlusterFS client kullanılır:
# client01 üzerinde:
apt install -y glusterfs-client
# Mount noktası oluştur
mkdir -p /mnt/gluster/repvol
# Test için manuel mount
mount -t glusterfs gluster01:/repvol /mnt/gluster/repvol
# Bağlantıyı test et
df -h /mnt/gluster/repvol
touch /mnt/gluster/repvol/test_file
ls -la /mnt/gluster/repvol/
Kalıcı mount için /etc/fstab:
echo "gluster01:/repvol /mnt/gluster/repvol glusterfs defaults,_netdev,backup-volfile-servers=gluster02:gluster03 0 0" >> /etc/fstab
mount -a
_netdev opsiyonu çok önemli! Bu olmadan sistem boot sırasında network hazır olmadan mount etmeye çalışır ve donabilir. backup-volfile-servers ise gluster01 cevap vermediğinde diğer node’lardan volfile almayı sağlar.
NFS ile Mount (Eski İstemciler İçin)
GlusterFS kendi NFS sunucusunu içeriyor (Ganesha tabanlı). Eski sistemler veya NFS zorunluluğu varsa:
# Volume üzerinde NFS'i aktif et
gluster volume set repvol nfs.disable off
# İstemcide mount
mount -t nfs -o vers=3 gluster01:/repvol /mnt/nfs-gluster
Gerçek Dünya Senaryosu: Web Sunucuları için Paylaşımlı Storage
Diyelim ki 5 web sunucunuz var ve bunların hepsi aynı medya dosyalarına erişmesi gerekiyor. Klasik çözüm NFS ama single point of failure. GlusterFS ile şöyle yaparsınız:
# Storage node'larında:
mkdir -p /data/glusterfs/brick1/webmedia
gluster volume create webmedia replica 3
gluster01:/data/glusterfs/brick1/webmedia
gluster02:/data/glusterfs/brick1/webmedia
gluster03:/data/glusterfs/brick1/webmedia
# Web sunucuları için optimize et (çok küçük dosya yok, büyük medya var)
gluster volume set webmedia performance.cache-max-file-size 100MB
gluster volume set webmedia performance.cache-min-file-size 1MB
gluster volume set webmedia performance.cache-size 1GB
gluster volume start webmedia
Her web sunucusunda:
apt install -y glusterfs-client
cat >> /etc/fstab << 'EOF'
gluster01:/webmedia /var/www/media glusterfs defaults,_netdev,backup-volfile-servers=gluster02:gluster03 0 0
EOF
mkdir -p /var/www/media
mount -a
Artık bir web sunucusuna yüklenen dosya otomatik olarak tüm sunucularda görünür. Load balancer arkasında hangi sunucuya istek giterse gitsin dosya orada olur.
İzleme ve Yönetim
Volume Durumunu İzleme
# Genel durum
gluster volume status repvol
# Detaylı brick bilgisi
gluster volume status repvol detail
# Healing durumu (replicated volume'lerde önemli)
gluster volume heal repvol info
# Peer listesi
gluster peer status
# Tüm volume'leri listele
gluster volume list
Split-Brain Durumunu Çözme
Replicated volume’lerde en çok karşılaşılan sorun split-brain. İki node farklı versiyona sahip olduğunda GlusterFS hangisinin doğru olduğunu bilemez:
# Hangi dosyalar split-brain'de?
gluster volume heal repvol info split-brain
# Dosya bazında çözüm - kaynak node'u belirt
gluster volume heal repvol split-brain source-brick gluster01:/data/glusterfs/brick1/replvol /path/to/file
# Tüm dosyaları heal et
gluster volume heal repvol
# Healing tamamlandı mı?
gluster volume heal repvol info healed
Kapasite ve Performans İzleme
# Disk kullanımı
df -h /mnt/gluster/repvol
# Her brick'in doluluk oranı
gluster volume status repvol
# Profiling aktif et
gluster volume profile repvol start
# Bir süre bekle, sonra istatistikleri gör
gluster volume profile repvol info
# Profiling'i kapat
gluster volume profile repvol stop
Node Ekleme ve Çıkarma
Yeni Brick Ekleme
Volume’e yeni storage eklemek için:
# Yeni node'u peer olarak ekle
gluster peer probe gluster04
# Replicated volume'e 3'lü grup ekle (replica count'a dikkat!)
gluster volume add-brick repvol replica 3
gluster04:/data/glusterfs/brick1/replvol
# Rebalance başlat (veriler yeni brick'e dağıtılır)
gluster volume rebalance repvol start
# Durumu takip et
gluster volume rebalance repvol status
Brick Çıkarma
# Brick'i çıkar ve verileri başka brick'lere taşı
gluster volume remove-brick repvol
gluster03:/data/glusterfs/brick1/replvol start
# Durumu kontrol et
gluster volume remove-brick repvol
gluster03:/data/glusterfs/brick1/replvol status
# Tamamlandıktan sonra onayla
gluster volume remove-brick repvol
gluster03:/data/glusterfs/brick1/replvol commit
Snapshot Alma
GlusterFS 3.6 ve sonrasında snapshot desteği var:
# Snapshot al
gluster snapshot create snap1 repvol no-timestamp
# Snapshotları listele
gluster snapshot list
# Snapshot bilgisi
gluster snapshot info snap1
# Snapshot'tan geri yükle (volume durdurulmalı)
gluster volume stop repvol
gluster snapshot restore snap1
gluster volume start repvol
# Gereksiz snapshot'ı sil
gluster snapshot delete snap1
Yaygın Sorunlar ve Çözümleri
Problem: Brick’ler başlamıyor
# Log dosyasına bak
tail -100 /var/log/glusterfs/glusterd.log
tail -100 /var/log/glusterfs/bricks/data-glusterfs-brick1-replvol.log
# Genellikle port çakışması veya stale PID dosyası olur
rm -f /var/lib/glusterd/vols/repvol/run/*.pid
systemctl restart glusterd
Problem: Mount sonrası “Transport endpoint is not connected”
# İstemci tarafında:
umount -f /mnt/gluster/repvol
pkill -f glusterfs
mount -t glusterfs gluster01:/repvol /mnt/gluster/repvol
Problem: Performans düşüklüğü
# Jumbo frame aktif et (network ekipmanı destekliyorsa)
ip link set eth1 mtu 9000
# gluster volume ayarlarını kontrol et
gluster volume get repvol performance.io-thread-count
gluster volume set repvol performance.io-thread-count 32
Problem: Quorum hatası
3 node’dan biri çöktüğünde 2 node’un yazmaya devam etmesi için:
# Quorum tipini kontrol et
gluster volume get repvol cluster.quorum-type
# Auto quorum ile devam et
gluster volume set repvol cluster.quorum-type auto
Güvenlik Önlemleri
Production ortamında mutlaka uygulayın:
# Volume'e sadece belirli IP'lerden erişim
gluster volume set repvol auth.allow "192.168.10.*"
# TLS aktif et (GlusterFS 3.5+)
# /etc/ssl/glusterfs.pem ve /etc/ssl/glusterfs.key oluştur
gluster volume set repvol client.ssl on
gluster volume set repvol server.ssl on
# Volume'ü durdur/başlat
gluster volume stop repvol
gluster volume start repvol
Sonuç
GlusterFS, doğru yapılandırıldığında kurumsal SAN/NAS çözümlerine gerçek anlamda rakip olabilen, açık kaynaklı ve oldukça olgun bir platform. Kendi deneyimlerimden şunları söyleyebilirim: replicated volume kurulumu oldukça basit ve hemen production’a alınabilir, ancak distributed-replicated yapılar biraz daha planlama istiyor. Node sayısını baştan doğru belirleyin, çünkü sonradan ekleme yapmak (rebalance süreci) zaman alıyor.
Split-brain olaylarına karşı hazırlıklı olun ve düzenli olarak gluster volume heal info çalıştırın. İzleme tarafında Prometheus’un GlusterFS exporter’ı gayet iyi çalışıyor, Grafana dashboard’larıyla volume durumunu gerçek zamanlı takip edebilirsiniz.
Son olarak, GlusterFS’i büyük dosyalar için kullanıyorsanız (video, yedek dosyaları vb.) harika performans alırsınız. Çok sayıda küçük dosya (milyonlarca dosya) söz konusuysa Ceph veya HDFS daha uygun bir alternatif olabilir. İş yükünüzü iyi tanıyın ve doğru aracı seçin.