GlusterFS Nedir?

Gluster, disk depolama kaynaklarını birden çok sunucudan tek bir genel ad alanında toplayan ölçeklenebilir, dağıtılmış bir dosya sistemidir.
Avantajları
- Birkaç petabayt ölçeklendirir
- Binlerce müşteriyi idare eder
- POSIX uyumlu
- Emtia donanımını kullanır
- Genişletilmiş öznitelikleri destekleyen herhangi bir ondisk dosya sistemini kullanabilir
- NFS ve SMB gibi endüstri standardı protokolleri kullanılarak erişilebilir
- Çoğaltma, kotalar, coğrafi çoğaltma, anlık görüntüler ve bitrot tespiti sağlar
- Farklı iş yükleri için optimizasyon sağlar
- Açık Kaynak

İşletmeler, şirket içi, genel bulut ve karma ortamlarda satıcı kilidi olmadan talep üzerine kapasite, performans ve kullanılabilirliği ölçeklendirebilir. Gluster, medya, sağlık, hükümet, eğitim, web 2.0 ve finansal hizmetleri kapsayan binlerce kuruluşta üretimde kullanılır.
Gluster Hacim (Volume) Tipleri
Saklama tiplerini açıklamadan önce brick (köprü) ve node (düğüm) arasındaki farka kısaca değinmek gerekiyor. Node’lar gluster ağımzıdaki sunculara işaret ediyor, yani gluster havuzumuza dahil ettiğimiz sunucular birer node. Köprü ise node’lar üzerinde tanımlanan dizinler. Yani her sunucu bir node iken, o node üzerinde birden fazla brick olabilir.
- Distributed: Dosyalar sunucular arasında dağıtılır. Örneğin 1TB + 1TB iki köprü ile toplam 2 TB veri saklanır. Bu yapılar, ölçeklendirme önemli, fakat yedeklilik şart değil ise kullanılması daha doğru olacaktır.
- Replicated: Aynı dosyanın kopyaları birden fazla sunucuda saklanır. Örneğin 1TB + 1TB iki köprüde 1TB verinin iki kopyasını tutarsınız. Bu yapılar kesintisiz ulaşılabilecek veriler saklayacaksanız kullanılır.
- Striped: Dosyalar parçalara bölünerek her bir parçası bir sunucuda saklanır. Örneğin 1TB x 3 köprünüz varsa 3TB’lık dosya 1TB’lık parçalara bölünerek saklanır. Yazma ve okuma performansı artmış olduğu gibi çok büyük ve anlık kullanım sayısı yüksek dosyalar olan ortamlarda kullanılır.
- Distributed Replicated: En az 4 köprü gerekir. Örneğin dosyalar köprülerin yarısı arasında dağıtık olarak saklanırken, diğer köprülerde bu köprülerin birebir kopyası olur. Bu yapılar ise, anlık kullanımı fazla, yüksek boyutlu dosyalar olan ve ölçeklendirme gerekecek sistemlerde kullanılmaktadır.
- Distributed Striped: Dosyalar iki veya daha fazla düğüm arasında parçalı olarak dağıtılır. Diğer yöntemlerden farkı dağıtım köprü değil düğümler arasındadır. Bu yapılar ise, ölçeklendirme ihtiyacı olan sistemlerde dağıtık çoğaltılmış hacimler kullanılmalıdır. Dağıtık çoğaltılmış hacimler çoğu durumda daha iyi okuma performansı sağlar.
GlusterFS varsayılan olarak Replicated volume tipini kullanacaktır.
Prerequisites
- "Sunucu1", "sunucu2" ve "sunucu3" adlı 3 düğüm
- Çalışan bir ağ bağlantısı.
- Bu sanal makinelerin her birinde biri işletim sistemi kurulumu için diğeri GlusterFS depolama alanına (sdb) hizmet vermek için kullanılacak en az iki sanal disk. Bu, GlusterFS depolamasını işletim sistemi kurulumundan ayırmak istediğiniz gerçek dünya dağıtımını taklit edecektir.
- Diskler formatlanmış ve bölümler oluşturulmalıdır.
- Dosya sisteminin üstündeki birçok uygulamanın düzgün çalışmasını sağlamak için ntp'yi bu sunucuların her birine kurun. Bu önemli bir gerekliliktir.
- root haklarına sahip bir kullanıcı (kurulumun tüm aşamalarını root kullanıcısında yapmak daha sağlıklıdır.)
Not: GlusterFS, dinamik olarak oluşturulan yapılandırma dosyalarını /var/lib/glusterd adresinde saklar. Herhangi bir zamanda GlusterFS bu dosyalara yazamıyorsa (örneğin, yedekleme dosya sistemi dolduğunda), en azından sisteminiz için düzensiz davranışlara neden olur; veya daha kötüsü, sisteminizi tamamen çevrimdışı duruma getirin. Bunun olma olasılığını azaltmak için /var/log gibi dizinler için ayrı bölümler oluşturmanız önerilir.
Daha fazla bilgi için bakınız:
https://docs.gluster.org/en/latest/Administrator-Guide/GlusterFS-Introduction/
Sunucuların İsim Çözümlemesi
Basitçe söylemek gerekirse, ana bilgisayar dosyası, ana bilgisayar adlarını IP adresleriyle eşlemenin bir yoludur. Bu, belirli kurulumlarda ve Linux'ta ağ oluşturmayı biraz daha kolaylaştırmak için çok önemlidir. Bir anlamda, hosts dosyası yerel bir DNS sunucusu görevi görür.
Öncelikle sunucular birbirinin adını çözebilmesi için tüm sunucuların hosts dosyasına ekleme yapıyoruz.
cat |sudo tee -a /etc/hosts <<EOF
10.106.250.108 glusterfs-01
10.106.250.109 glusterfs-02
10.106.250.110 glusterfs-03
EOF

Ping aracı ile herhangi bir sunucudan diğer sunuculara ping atıp test edelim.

Disk Biçimlendirme ve Mount Etme
Tüm işlemleri, tüm düğümlerde gerçekleştirin, "sunucu { 1,2,3 }" Arka uç bricks'ler için XFS dosya sistemini kullanacağız. Ancak Gluster, genişletilmiş nitelikleri destekleyen herhangi bir dosya sisteminin üstünde çalışacak şekilde tasarlanmıştır.
Aşağıdaki örnekler /dev/sdb1 üzerinde kalacağını varsaymaktadır.
sudo mkfs.xfs -i size=512 /dev/sdb1
sudo mkdir -p /data/brick
echo '/dev/sdb1 /data/brick xfs defaults 1 2' |sudo tee -a /etc/fstab
sudo mount -a && mount

Şimdi sdb1'in /data/brick'e monte edildiğini görmelisiniz. Yapılan işlemleri doğrulayın.
lsblk |grep -w sdb1
df -hT|grep -w sdb1

GlusterFS'yi Yükleme
Tüm sunucularda, depodan GlusterFS yazılımını yükleyin.
sudo apt install -y glusterfs-server

GlusterFS yönetim arka plan programını başlatın ve Daemon'un durumunu kontrol edin:
sudo service glusterd start
service glusterd status
Böyle bir şey görmelisiniz:

Güvenlik Duvarını Yapılandırın
Düğümlerdeki gluster işlemlerinin birbirleriyle iletişim kurabilmesi gerekir. Bu kurulumu basitleştirmek için, her düğümdeki güvenlik duvarını diğer düğümden gelen tüm trafiği kabul edecek şekilde yapılandırın.
sudo iptables -I INPUT -p all -s 10.106.250.108 -j ACCEPT
sudo iptables -I INPUT -p all -s 10.106.250.109 -j ACCEPT
sudo iptables -I INPUT -p all -s 10.106.250.110 -j ACCEPT

Güvenilir havuzu yapılandırın
Server1'den aşağıdaki komutu çalıştırın.
sudo gluster peer probe glusterfs-02
sudo gluster peer probe glusterfs-03

Server2'den aşağıdaki komutu çalıştırın.
sudo gluster peer probe glusterfs-01
Sunucudaki eş durumunu kontrol edin
sudo gluster peer status

GlusterFS Birimi Ayarlama
Tüm sunucularda bir klasör oluşturalım.
sudo mkdir -p /data/brick/gv0

Şimdi herhangi bir sunucudan aşağıdaki komut satırını çalıştırın. Başarılı bir işlemde volume alanının başlatılması gerektiği ile ilgili bir çıktı görmelisiniz.
sudo gluster volume create gv0 replica 3 glusterfs-01:/data/brick/gv0 glusterfs-02:/data/brick/gv0 glusterfs-03:/data/brick/gv0

Ardından yeni oluşturulan birimi başlatın.
gluster volume start gv0

Birimin "Başlatıldı" gösterdiğini doğrulayın":
sudo gluster volume info

Not: Birim "Başlatıldı" göstermezse /var/log/glusterfs/glusterd.log hata ayıklamak için kontrol edilmelidir ve durumu teşhis edin. Bu günlüklere bir veya tüm sunucular yapılandırıldı.
GlusterFS Volume Seviyesini Test Etme
Bu adımda, birimi bağlamak için tüm sunucularda mount işlemleri isimlerini değiştirerek gerçekleştirelim.
sudo mount -t glusterfs glusterfs-01:/gv0 /mnt

Şimdi istediğiniz bir sunucu üzerinde root kullanıcısına geçin ve aşağıdaki komut satırını çalıştırarak 100 tane dosya oluşturun. Ben sunucu 2 üzerinden bu işlemi gerçekleştiriyorum ve dosyaların oluştuğunu kontrol ediyorum.
for i in `seq -w 1 100`; do cp -rp /var/log/dmesg /mnt/copy-test-$i; done

Şimdi sunucu3 üzerinden, 100 adet dosya geldiğini kontrol ediyorum.
ls -lA /mnt/copy* | wc -l

Sunucu1 üzerinden de 100 adet dosya geldiğini kontrol edelim.

Son olarak, sunucu1 üzerinden dosyaları silelim ve diğer sunuculardan da silindiğini doğrulayalım.

ÖNEMLİ
- Herhangi bir sunucu üzerinde dosya oluşturduğunuz zaman tüm sunucularda oluşur.
- Herhangi bir sunucu üzerinde dosyayı sildiğiniz zaman tüm sunuculardan silinir.
- Herhangi bir sunucu üzerinde dosyanın üzerine yazdığınız zaman tüm sunuculara yazılır.
Artık kalıcı olarak kullanmak için, mount işlemlerini fstab dosyasında gerçekleştirmeniz gerekir. NFS, Samba gibi paylaşımlar ile kullanabilir veya Docker Swarm, K8s gibi ürünler üzerinde 2. diskler oluşturup direk mount işlemleri gerçekleştirebilirsiniz.
NFS Cluster için bakınız.
https://wiki.samba.org/index.php/Setting_up_CTDB_for_Clustered_NFS