GlusterFS yazılım tabanlı opensource NAS çözümüdür. Bu yazımda 3 Server’dan oluşan bir Cluster kuracağız. İşletim sistemi olarak Ubuntu 20.04 kullanacağım. Gün sonunda belirlediğimiz bir dizin veya dizinler 3 sunucuda da eş zamanlı olarak senkronize olacak. Bunu yüksek erişilebilirlik (High Availability) için yapıyoruz.
GlusterFS’in önerilen kullanımı için Ubuntu üzerinde ayrı bir disk tanımladım. Eğer root partition’a brick yapmaya çalışırsanız alacağınız uyarı aşağıdaki gibi olacaktır. Bu uyarıyı “force” komutuyla geçebiliyorsunuz fakat önerilen bir kullanım değil.
It is recommended that you don’t use the system’s root partition for storage backend. Or use ‘force’ at the end of the command if you want to override this behavior.
3 sunucuda da disk yapıları aynıdır. Ayrı bir ikinci disk bulunmaktadır.
vda 252:0 0 100G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 1.5G 0 part /boot
└─vda3 252:3 0 98.5G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 98.5G 0 lvm /
vdb 252:16 0 2T 0 disk
Tüm sunucularımızda tek tek işletim sistemimizi güncelleyelim.
apt update -y && apt upgrade -y
Şimdi 3 sunucumuzda da hosts dosyasına aşağıdaki gibi tanımlarınızı ekleyin. Bunları kendinize göre elbette düzenleyin.
nano /etc/hosts
10.0.0.80 cdn1.sezer.test cdn1
10.0.0.81 cdn2.sezer.test cdn2
10.0.0.82 cdn3.sezer.test cdn3
3 sunucuya da aşağıdaki repoları ekliyoruz.
sudo add-apt-repository ppa:gluster/glusterfs-9
Ardından sitemlerimizi tekrardan update edelim.
sudo apt update -y
Sunucularımıza GlusterFS paketini kuralım.
sudo apt install glusterfs-server -y
Sunucularımızda GlusterFS servisini başlatalım.
sudo systemctl start glusterd.service
Sunucularımızda sistem reboot olduğunda servis otomatik başlasın diye enable edelim
sudo systemctl enable glusterd.service
Ardından servisimizi kontrol edelim.
sudo systemctl status glusterd.service
● glusterd.service - GlusterFS, a clustered file-system server
Loaded: loaded (/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2022-04-16 15:42:46 UTC; 1min 3s ago
Docs: man:glusterd(8)
Main PID: 12967 (glusterd)
Tasks: 9 (limit: 9441)
Memory: 6.7M
CGroup: /system.slice/glusterd.service
└─12967 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO
Apr 16 15:42:45 cdn1 systemd[1]: Starting GlusterFS, a clustered file-system server...
Apr 16 15:42:46 cdn1 systemd[1]: Started GlusterFS, a clustered file-system server.
Peer probe kısmında dış network kullanacaksanız UFW kuralları girmeyi ihmal etmeyin. İzin vereceğiniz portlar 24007 ve 49152 tcp protokolünde olacaktır.
Şimdi ilk sunucumuzdan aşağıdaki komutları girelim.
sudo gluster peer probe cdn2
sudo gluster peer probe cdn3
İşlem başarılı olduysa aşağıdaki gibi çıktı alacaksınız.
peer probe: success
Ardından tüm sunucularda kontrol edelim.
sudo gluster peer status
Şimdi 3 sunucuda da eklediğimiz 2. diski kalıcı olarak mount edelim. Bunu nasıl yapacağına dair bilgiyi bu yazıda vermeyeceğim. Zaten bunun için daha önce yazdığım bir doküman var. Aşağıdan ulaşabilirsiniz.
Ben disklerimi /mnt/glusterfs yoluna mount ettim. Ardından içerisinde “share” adlı bir klasör oluşturdum. Çünkü /mnt/glusterfs doğrudan mount edildiği için GlusterFS bunu önermiyor ve aşağıdaki uyarıyı veriyor. “Force” ile uyarıyı göz artı edebilirsiniz ama önerilmiyor.
Please create a sub-directory under the mount point and use that as the brick directory. Or use ‘force’ at the end of the command if you want to override this behavior.
/mnt
└── glusterfs
└── share
Şimdi test için her sunucunun ana dizinine “test_volume” klasörü oluşturalım.
mkdir /test_volume
Şimdi Volume oluşturalım. Bu komutu herhangi bir makinede çalıştırın.
sudo gluster volume create shared_volume replica 3 cdn1:/mnt/glusterfs/share cdn2:/mnt/glusterfs/share cdn3:/mnt/glusterfs/share
Şimdi herhangi bir sunucuda aşağıdaki komutu çalıştırarak volume’ü başlatın.
sudo gluster volume start shared_volume
Aşağıdaki gibi bir çıktı almanız gerekiyor.
volume start: shared_volume: success
Aşağıdaki komutla kontrol sağlayın.
sudo gluster volume status
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick cdn1:/mnt/glusterfs/share 49152 0 Y 2000
Brick cdn2:/mnt/glusterfs/share 49152 0 Y 1587
Brick cdn3:/mnt/glusterfs/share 49152 0 Y 1657
Artık NAS işlemlerimizi bitirdik. Şimdi ana dizine oluşturduğumuz /test_volume klasörüne bu NAS’ı mount edelim ve senkronizasyonu kontrol edelim.
#Server -1
sudo mount -t glusterfs cdn1:/shared_volume /test_volume
#Server -2
sudo mount -t glusterfs cdn2:/shared_volume /test_volume
#Server -3
sudo mount -t glusterfs cdn3:/shared_volume /test_volume
Şimdi test için 3. sunucuda /test_volume klasörümüzde sezer.txt adında dosya oluşturalım.
cdn3:/shared_volume 2.0T 20G 1.9T 2% /test_volume
root@cdn3:/test_volume# touch sezer.txt
root@cdn3:/test_volume# ls
sezer.txt
Diğer sunucularımızı kontrol edelim.
root@cdn2:/mnt/glusterfs# cd /test_volume/
root@cdn2:/test_volume# ls -la
total 8
drwxr-xr-x 4 root root 4096 Apr 16 17:43 .
drwxr-xr-x 20 root root 4096 Apr 16 16:58 ..
-rw-r--r-- 1 root root 0 Apr 16 17:43 sezer.txt
root@cdn1:/# cd /test_volume/
root@cdn1:/test_volume# ls -la
total 8
drwxr-xr-x 4 root root 4096 Apr 16 17:43 .
drwxr-xr-x 20 root root 4096 Apr 16 16:58 ..
-rw-r--r-- 1 root root 0 Apr 16 17:43 sezer.txt
Dışarıdan gelecek client isteklerini aşağıdaki komutla ip bazlı kısıtlayacağız.
#Server -1
sudo gluster volume set shared_volume auth.allow cdn2,cdn3
#Server -2
sudo gluster volume set shared_volume auth.allow cdn1,cdn3
#Server -3
sudo gluster volume set shared_volume auth.allow cdn1,cdn2
That’s all!