Tento kurz ukazuje, jak zkombinovat čtyři samostatné servery úložiště (se systémem CentOS 5.4) do distribuovaného replikovaného úložiště s GlusterFS. Uzly 1 a 2 (replikace1) a také 3 a 4 (replikace2) se budou vzájemně zrcadlit a replikace1 a replikace2 budou spojeny do jednoho většího úložného serveru (distribuce). V podstatě se jedná o RAID10 přes síť. Pokud ztratíte jeden server z replikace1 a jeden z replikace2, distribuovaný svazek bude nadále fungovat. Klientský systém (také CentOS 5.4) bude mít přístup k úložišti, jako by to byl místní souborový systém. GlusterFS je klastrovaný souborový systém schopný škálování na několik petabajtů. Sdružuje různé úložné bloky přes propojení Infiniband RDMA nebo TCP/IP do jednoho velkého paralelního síťového souborového systému. Úložné kostky mohou být vyrobeny z jakéhokoli běžného hardwaru, jako jsou servery x86_64 s SATA-II RAID a Infiniband HBA.
Neposkytuji žádnou záruku, že to pro vás bude fungovat!
1 předběžná poznámka
V tomto tutoriálu používám pět systémů, čtyři servery a klienta:
- server1.example.com:IP adresa 192.168.0.100 (server)
- server2.example.com:IP adresa 192.168.0.101 (server)
- server3.example.com:IP adresa 192.168.0.102 (server)
- server4.example.com:IP adresa 192.168.0.103 (server)
- client1.example.com:IP adresa 192.168.0.104 (klient)
Všech pět systémů by mělo být schopno rozlišit názvy hostitelů ostatních systémů. Pokud to nelze provést prostřednictvím DNS, měli byste upravit soubor /etc/hosts tak, aby na všech pěti systémech obsahoval následující řádky:
vi /etc/hosts
[...] 192.168.0.100 server1.example.com server1 192.168.0.101 server2.example.com server2 192.168.0.102 server3.example.com server3 192.168.0.103 server4.example.com server4 192.168.0.104 client1.example.com client1 [...] |
(V následujícím nastavení je také možné použít IP adresy místo názvů hostitelů. Pokud dáváte přednost použití IP adres, nemusíte se starat o to, zda lze názvy hostitelů přeložit nebo ne.)
2 Nastavení serverů GlusterFS
server1.example.com/server2.example.com/server3.example.com/server4.example.com:
GlusterFS není k dispozici jako balíček pro CentOS 5.4, proto si jej musíme vytvořit sami. Nejprve nainstalujeme předpoklady:
yum groupinstall 'Development Tools'
yum groupinstall 'Development Libraries'
yum install libibverbs-devel fuse-devel
Poté si stáhneme nejnovější verzi GlusterFS z http://www.gluster.org/download.php a sestavíme ji následovně:
cd /tmp
wget http://ftp.gluster.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.9.tar.gz
tar xvfz glusterfs-2.0.9.tar .gz
cd glusterfs-2.0.9
./configure
Na konci příkazu ./configure byste měli vidět něco takového:
[...]
Přehled konfigurace GlusterFS
============================
Klient FUSE :yes
Infiniband slovesa : ano
epoll IO multiplex : yes
Berkeley-DB : ano
libglusterfsclient : ano
argp-samostatný : ne
[[email protected] glusterfs-2.0.9]#
make &&make install
ldconfig
Poté zkontrolujte verzi GlusterFS (měla by být 2.0.9):
glusterfs --version
[[email protected] glusterfs-2.0.9]# glusterfs --version
glusterfs 2.0.9 vytvořeno 1. března 2010 15:34:50
Revize úložiště:v2.0.9
Autorská práva ( c) 2006-2009 Gluster Inc.
GlusterFS se dodává NAPROSTO ŽÁDNÁ ZÁRUKA.
Můžete redistribuovat kopie GlusterFS za podmínek GNU General Public License.
[[email protected] glusterfs-2.0.9]#
Dále vytvoříme několik adresářů:
mkdir /data/
mkdir /data/export
mkdir /data/export-ns
mkdir /etc/glusterfs
Nyní vytvoříme konfigurační soubor serveru GlusterFS /etc/glusterfs/glusterfsd.vol, který definuje, který adresář bude exportován (/data/export) a jaký klient se smí připojit (192.168.0.104 =client1.example.com):
vi /etc/glusterfs/glusterfsd.vol
volume posix type storage/posix option directory /data/export end-volume volume locks type features/locks subvolumes posix end-volume volume brick type performance/io-threads option thread-count 8 subvolumes locks end-volume volume server type protocol/server option transport-type tcp option auth.addr.brick.allow 192.168.0.104 subvolumes brick end-volume |
Upozorňujeme, že pro adresy IP je možné použít zástupné znaky (např. 192.168.*) a že můžete zadat více adres IP oddělených čárkou (např. 192.168.0.104, 192.168.0.105).
Poté vytvoříme následující symbolický odkaz...
ln -s /usr/local/sbin/glusterfsd /sbin/glusterfsd
... a poté odkazy pro spuštění systému pro server GlusterFS a spusťte jej:
chkconfig --levels 35 glusterfsd na
/etc/init.d/glusterfsd start
3 Nastavení klienta GlusterFS
client1.example.com:
GlusterFS není k dispozici jako balíček pro CentOS 5.4, proto si jej musíme vytvořit sami. Nejprve nainstalujeme předpoklady:
yum groupinstall 'Development Tools'
yum groupinstall 'Development Libraries'
yum install libibverbs-devel fuse-devel
Poté načteme modul fuse kernel...
modprobe fuse
... a vytvořte soubor /etc/rc.modules s následujícím obsahem, aby se modul fuse kernel automaticky načetl při každém spuštění systému:
vi /etc/rc.modules
modprobe fuse |
Nastavte soubor jako spustitelný:
chmod +x /etc/rc.modules
Poté si stáhneme zdrojové kódy GlusterFS 2.0.9 (upozorňujeme, že se jedná o stejnou verzi, která je nainstalována na serveru!) a sestavíme GlusterFS následovně:
cd /tmp
wget http://ftp.gluster.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.9.tar.gz
tar xvfz glusterfs-2.0.9.tar .gz
cd glusterfs-2.0.9
./configure
Na konci příkazu ./configure byste měli vidět něco takového:
[...]
Přehled konfigurace GlusterFS
============================
Klient FUSE :yes
Infiniband slovesa : ano
epoll IO multiplex : yes
Berkeley-DB : ano
libglusterfsclient : ano
argp-standalone : ne
make &&make install
ldconfig
Poté zkontrolujte verzi GlusterFS (měla by být 2.0.9):
glusterfs --version
[[email protected] glusterfs-2.0.9]# glusterfs --version
glusterfs 2.0.9 vytvořeno 1. března 2010 15:58:06
Revize úložiště:v2.0.9
Autorská práva ( c) 2006-2009 Gluster Inc.
GlusterFS se dodává NAPROSTO ŽÁDNÁ ZÁRUKA.
Můžete redistribuovat kopie GlusterFS za podmínek GNU General Public License.
[[email protected] glusterfs-2.0.9]#
Poté vytvoříme následující dva adresáře:
mkdir /mnt/glusterfs
mkdir /etc/glusterfs
Dále vytvoříme soubor /etc/glusterfs/glusterfs.vol:
vi /etc/glusterfs/glusterfs.vol
volume remote1 type protocol/client option transport-type tcp option remote-host server1.example.com option remote-subvolume brick end-volume volume remote2 type protocol/client option transport-type tcp option remote-host server2.example.com option remote-subvolume brick end-volume volume remote3 type protocol/client option transport-type tcp option remote-host server3.example.com option remote-subvolume brick end-volume volume remote4 type protocol/client option transport-type tcp option remote-host server4.example.com option remote-subvolume brick end-volume volume replicate1 type cluster/replicate subvolumes remote1 remote2 end-volume volume replicate2 type cluster/replicate subvolumes remote3 remote4 end-volume volume distribute type cluster/distribute subvolumes replicate1 replicate2 end-volume volume writebehind type performance/write-behind option window-size 1MB subvolumes distribute end-volume volume cache type performance/io-cache option cache-size 512MB subvolumes writebehind end-volume |
Ujistěte se, že používáte správné názvy serverů nebo IP adresy ve volbě vzdálené hostitelské řádky!
A je to! Nyní můžeme připojit souborový systém GlusterFS do /mnt/glusterfs jedním z následujících dvou příkazů:
glusterfs -f /etc/glusterfs/glusterfs.vol /mnt/glusterfs
nebo
mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs
Nyní byste měli vidět nový podíl ve výstupech...
mount
[[e-mail chráněno] ~]# připojení
/dev/mapper/VolGroup00-LogVol00 na / typ ext3 (rw)
proc na /proc typ proc (rw)
sysfs na /sys typ sysfs (rw)
devpts na /dev/pts typu devpts (rw,gid=5,mode=620)
/dev/sda1 na /boot typu ext3 (rw)
tmpfs na / dev/shm typ tmpfs (rw)
žádný na /proc/sys/fs/binfmt_misc typ binfmt_misc (rw)
sunrpc na /var/lib/nfs/rpc_pipefs typ rpc_pipefs (rw)
glusterfs#/etc/glusterfs/glusterfs.vol na pojistce typu /mnt/glusterfs (rw,allow_other,default_permissions,max_read=131072)
[[email protected] ~]#
... a...
df -h
[[email protected] ~]# df -h
Systém souborů Velikost Použitá Využití % Připevněno na
/dev/mapper/VolGroup00-LogVol00
G9 9 G 9 9 2 % /dev/sda1 99m 13m 82m 14%/boot
tmpfs 187m 0 187m 0%/dev/shm
glusterfs#/etc/glusterfs/glusterfs.vol
56g 2,3g 54g 4%/ mnt/glusterfs
[[email protected] ~]#
(Velikost distribuovaného úložiště se vypočítá jako replikace1 + replikace2, kde oba objemy replikace jsou velké jako nejmenší kostka.)
Místo ručního připojování sdílené složky GlusterFS na klienta můžete upravit /etc/fstab tak, aby se sdílená složka připojila automaticky, když se klient zavede.
Otevřete /etc/fstab a připojte následující řádek:
vi /etc/fstab
[...] /etc/glusterfs/glusterfs.vol /mnt/glusterfs glusterfs defaults 0 0 |
Chcete-li otestovat, zda váš upravený /etc/fstab funguje, restartujte klienta:
reboot
Po restartu byste měli najít podíl ve výstupech...
df -h
... a...
mount
4 testování
Nyní vytvoříme nějaké testovací soubory na sdílené složce GlusterFS:
client1.example.com:
dotkněte se /mnt/glusterfs/test1
dotkněte se /mnt/glusterfs/test2
dotkněte se /mnt/glusterfs/test3
dotkněte se /mnt/glusterfs/test4
dotkněte se /mnt/glusterfs/ test5
dotkněte se /mnt/glusterfs/test6
Nyní se podívejme na adresář /data/export na server1.example.com, server2.example.com, server3.example.com a server4.example.com. Všimnete si, že replikace1 i replikace2 obsahují pouze část souborů/adresářů, které tvoří sdílenou složku GlusterFS na klientovi, ale uzly tvořící replikaci1 (server1 a server2) nebo replikaci2 (server3 a server4) obsahují stejné soubory (zrcadlení):
server1.example.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
celkem 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test1
-rw-r--r-- 1 kořenový kořen 0 2010-02-23 15:41 test2
-rw-r--r-- 1 kořenový kořen 0 2010-02-23 15:41 test4
-rw-r--r-- 1 kořenový kořen 0 23.02.2010 15:41 test5
[[email protected] ~]#
server2.example.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
celkem 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test1
-rw-r--r-- 1 kořenový kořen 0 2010-02-23 15:41 test2
-rw-r--r-- 1 kořenový kořen 0 2010-02-23 15:41 test4
-rw-r--r-- 1 kořenový kořen 0 23.02.2010 15:41 test5
[[email protected] ~]#
server3.example.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
celkem 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test3
-rw-r--r-- 1 kořenový kořen 0 2010-02-23 15:41 test6
[[email protected] ~]#
server4.example.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
celkem 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test3
-rw-r--r-- 1 kořenový kořen 0 2010-02-23 15:41 test6
[[email protected] ~]#
Nyní vypneme server1.example.com a server4.example.com a přidáme/smažeme některé soubory ve sdílené složce GlusterFS na webu client1.example.com.
server1.example.com/server4.example.com:
shutdown -h now
client1.example.com:
rm -f /mnt/glusterfs/test5
rm -f /mnt/glusterfs/test6
Změny by měly být viditelné v adresáři /data/export na server2.example.com a server3.example.com:
server2.example.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
celkem 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test1
-rw-r--r-- 1 kořenový kořen 0 2010-02-23 15:41 test2
-rw-r--r-- 1 kořenový kořen 0 2010-02-23 15:41 test4
[[e-mail chráněný] ~]#
server3.example.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
celkem 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test3
[[e-mail chráněný] ~]#
Spusťte znovu server1.example.com a server4.example.com a podívejte se na adresář /data/export:
server1.example.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
celkem 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test1
-rw-r--r-- 1 kořenový kořen 0 2010-02-23 15:41 test2
-rw-r--r-- 1 kořenový kořen 0 2010-02-23 15:41 test4
-rw-r--r-- 1 kořenový kořen 0 23.02.2010 15:41 test5
[[email protected] ~]#
server4.example.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
celkem 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test3
-rw-r--r-- 1 kořenový kořen 0 2010-02-23 15:41 test6
[[email protected] ~]#
Jak vidíte, server1.example.com a server4.example.com si nevšimly změn, ke kterým došlo, když byly mimo provoz. To lze snadno opravit, vše, co musíme udělat, je vyvolat příkaz čtení na sdílené složce GlusterFS na klient1.example.com, např.:
client1.example.com:
ls -l /mnt/glusterfs/
[[email protected] ~]# ls -l /data/export
celkem 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test1
-rw-r--r-- 1 kořenový kořen 0 2010-02-23 15:41 test2
-rw-r--r-- 1 kořenový kořen 0 2010-02-23 15:41 test3
-rw-r--r-- 1 kořenový kořen 0 23.02.2010 15:41 test4
[[email protected] ~]#
Nyní se znovu podívejte na adresář /data/export na server1.example.com a server4.example.com a měli byste vidět, že změny byly replikovány do těchto uzlů:
server1.example.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
celkem 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test1
-rw-r--r-- 1 kořenový kořen 0 2010-02-23 15:41 test2
-rw-r--r-- 1 kořenový kořen 0 2010-02-23 15:41 test4
[[e-mail chráněný] ~]#
server4.example.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
celkem 0
-rw-r--r-- 1 root root 0 2010-02-23 15:41 test3
[[e-mail chráněný] ~]#
5 odkazů
- GlusterFS:http://www.gluster.org/
- CentOS:http://www.centos.org/