GlusterFS ile Dağıtık Depolama Kurulumu ve Yapılandırması

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.

Yorum yapın