GlusterFS er et netværks filsystem, der blandt andet tillader os at holde mapper i sync på tværs af netværket, der er meget mere i Gluster end det … nok til at jeg kunne lave en hel måned kun med det … men vi holder os til emnet lidt endnu 🙂
Vi tager udgangpunkt i det CDN vi lavede igår, og lægger GlusterFS ovenpå det. Det giver muligvis ikke særlig meget mening når vi kun har 2 noder, men når vi kommer meget over 2 begynder det at være svært at holde styr på at de er i sync, og der er virkelig ingen forskel på at sætte GlusterFS op til to eller til tyve noder.
Gluster findes godtnok i Debian’s pakkesystem, mén det er for at sige det mildt en gammel og ikke særlig brugbar version derfor bruger vi den .deb pakke som Gluster selv stiller til rådighed, flg. udføres på begge noder (lab1 og lab2)
root@lab1:~# wget http://download.gluster.org/pub/gluster/glusterfs/3.1/3.1.7/Debian/glusterfs_3.1.7-1_amd64.deb root@lab1:~# apt-get install nfs-common libibverbs-dev fuse-utils root@lab1:~# dpkg -i glusterfs_3.1.7-1_amd64.deb root@lab1:~# update-rc.d glusterd defaults root@lab1:~# update-rc.d fuse defaults root@lab1:~# /etc/init.d/glusterd start root@lab1:~# echo fuse >> /etc/modules
Og det var faktisk det der skulle til for at installere Gluster, nu skal vi have sat en storage pool op, en storage pool er en fællesbetegnelse for en række sammenknyttede Gluster nodes med tilhørende diskplads.
Først opretter vi /data på begge maskiner:
root@lab1:~# mkdir /data root@lab2:~# mkdir /data
Dernæst beder vi de to maskiner forbinde til hinanden og dermed danner vi vores storage pool:
root@lab1:~# gluster peer probe lab2.mikjaer.com Probe successful
og for at verificerer kører vi:
root@lab2:~# gluster peer status Number of Peers: 1 Hostname: 109.202.159.61 Uuid: b11650fa-1a38-41ff-8f11-e681e93db4aa State: Peer in Cluster (Connected)
og får bekræftiget at maskinerne har fat i hinanden, så langt så godt 🙂
Nu skal vi have oprettet en gluster-volume og have den startet, og det er ligeså nemt som det hidtil har været:
root@lab1:~# gluster volume create cdn-data lab1.mikjaer.com:/data lab2.mikjaer.com:/data Creation of volume cdn-data has been successful. Please start the volume to access data. root@lab1:~# gluster volume start cdn-data Starting volume cdn-data has been successful
Jeg har valgt at kalde min volume for “cdn-data” og lade den benytte diskplads på hhv. lab1 og lab2 fra mappen /data, og så runder vi af med at starte den … hvilket vil sige at Gluster gør den tilgængelig til f.eks. at blive mounted, hvilket sjovt nok er næste skridt. Men lad os lige starte med at gemme vores gamle /var/www, just in case:
root@lab1:~# mv /var/www/ /var/www-old root@lab1:~# mkdir /var/www
og nu vil jeg mounte vores Gluster volume på den /var/www, det gøres således:
root@lab1:~# modprobe fuse root@lab1:~# mount -t glusterfs 127.0.0.1:/cdn-data /var/www
og på lab2:
root@lab2:~# modprobe fuse root@lab2:~# mount -t glusterfs 127.0.0.1:/cdn-data /var/www
og så flytter vi indholdet af lab1:/var/www-old til lab1:/var/www … som jo så nu burde være en mounted GlusterFS volume og dermed øjeblikkeligt være tilgængelig på den anden node også, nemlig lab2:/var/www, lad os se:
root@lab1:~# cp /var/www-old/test.iso /var/www root@lab2:~# ls /var/www/ test.iso root@lab1:~# md5sum /var/www/test.iso b663727d7f5b572c329cea8e2ff5e29c /var/www/test.iso root@lab2:~# md5sum /var/www/test.iso b663727d7f5b572c329cea8e2ff5e29c /var/www/test.iso
Og mindsanten om ikke det virker 🙂
Nu mangler vi bare lige at sikre opsætningen ved boot, og på grund af en mindre fejl i Debian pakkerne skal det gøres ved at tilføle linien “mount -a” i /etc/rc.local:
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. mount -a exit 0
Derudover skal dit nye share selvfølgelig tilføjes til /etc/fstab, den linie du skal tilføjes ser sådan her ud:
127.0.0.1:/cdn-data /var/www glusterfs defaults 0 0
Reboot begge maskiner og se det hele komme op af sig selv … du har nu et CDN der selv syncer web-root 🙂