Hold dit CDN i sync med GlusterFS

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 🙂

Dette indlæg blev udgivet i Apache, Knowledge Base, Linux, Networking, Old Base. Bogmærk permalinket.

Skriv et svar