Tento kurz ukazuje, jak nastavit úložiště s vysokou dostupností se dvěma úložnými servery (CentOS 6.3), které používají GlusterFS. Každý úložný server bude zrcadlem druhého úložného serveru a soubory budou automaticky replikovány přes oba úložné servery. Klientský systém (také CentOS 6.3) 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 tři systémy, dva servery a klienta:
- server1.example.com:IP adresa 192.168.0.100 (server)
- server2.example.com:IP adresa 192.168.0.101 (server)
- client1.example.com:IP adresa 192.168.0.102 (klient)
Všechny tři systémy by měly být schopny 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 třech systémech vypadal následovně:
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 192.168.0.100 server1.example.com server1 192.168.0.101 server2.example.com server2 192.168.0.102 client1.example.com client1 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 |
(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 Povolit další úložiště
server1.example.com/server2.example.com/klient1.example.com:
Nejprve importujeme klíče GPG pro softwarové balíčky:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
Poté povolíme úložiště EPEL6 na našich systémech CentOS:
rpm --import https://fedoraproject.org/static/0608B895.txt
cd /tmp
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
rpm -ivh epel-release-6- 7.noarch.rpm
yum install yum-priorities
Upravte /etc/yum.repos.d/epel.repo...
vi /etc/yum.repos.d/epel.repo
... a přidejte řádek priority=10 do sekce [epel]:
[epel] name=Extra Packages for Enterprise Linux 6 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch failovermethod=priority enabled=1 priority=10 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 [...] |
3 Nastavení serverů GlusterFS
server1.example.com/server2.example.com:
GlusterFS je k dispozici jako balíček pro EPEL, proto jej můžeme nainstalovat následovně:
yum install glusterfs-server
Vytvořte spouštěcí odkazy systému pro démona Gluster a spusťte jej:
chkconfig --levels 235 glusterd na
/etc/init.d/glusterd start
Příkaz
glusterfsd --version
by nyní měla zobrazovat verzi GlusterFS, kterou jste právě nainstalovali (v tomto případě 3.2.7):
[[email protected] ~]# glusterfsd --version
glusterfs 3.2.7 vytvořeno 11. června 2012 13:22:28
Revize úložiště:git://git.gluster.com/glusterfs.git
Autorská práva (c) 2006-2011 Gluster Inc.
GlusterFS se nevztahuje ABSOLUTNĚ ŽÁDNÁ ZÁRUKA.
Můžete redistribuovat kopie GlusterFS za podmínek GNU General Public License.
[[email protected] ~]#
Pokud používáte firewall, ujistěte se, že jsou na server1.example.com a server2.example.com otevřené porty TCP 111, 24007, 24008, 24009-(24009 + počet bloků na všech svazcích).
Dále musíme přidat server2.example.com do důvěryhodného úložiště (upozorňujeme, že všechny konfigurační příkazy GlusterFS spouštím ze serveru server1.example.com, ale můžete je spouštět také ze serveru server2.example.com, protože konfigurace je replikovány mezi uzly GlusterFS – jen se ujistěte, že používáte správné názvy hostitelů nebo IP adresy):
server1.example.com:
Na server1.example.com spusťte
gluster peer probe server2.example.com
[[email protected] ~]# gluster peer probe server2.example.com
Probe úspěšný
[[email protected] ~]#
Stav fondu důvěryhodného úložiště by nyní měl být podobný tomuto:
gluster peer status
[[e-mail chráněn] ~Stav # skupinového partnera
Počet kolegů:1
Název hostitele:server2.example.com
Uuid:7cd93007-fccb-4fcb-8063-133e6ba81cd9
Stav:Peer in Cluster (připojeno)
[[e-mail chráněný] ~]#
Dále vytvoříme sdílení s názvem testvol se dvěma replikami (upozorňujeme, že počet replik se v tomto případě rovná počtu serverů, protože chceme nastavit zrcadlení) na server1.example.com a server2.example.com v /data adresář (bude vytvořen, pokud neexistuje):
gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data
[[email protected] ~]# svazek clusteru vytvořit testvol repliku 2 transport tcp server1.example.com:/data server2.example.com:/data
Vytvoření svazku testvol bylo úspěšné. Pro přístup k datům spusťte svazek.
[[email protected] ~]#
Spusťte hlasitost:
gluster volume start testvol
Je možné, že výše uvedený příkaz vám říká, že akce nebyla úspěšná:
[[email protected] ~]# gluster volume start testvol
Spuštění objemu testvol se nezdařilo
[[email protected] ~]#
V tomto případě byste měli zkontrolovat výstup...
server1.example.com/server2.example.com:
netstat -tap | grep glusterfsd
na obou serverech.
Pokud získáte výstup takto...
[[e-mail chráněn] ~]# netstat -tap | Grep glusterfsd
tcp 0 0*:24009*:*Poslouchejte 1365 /glusterfsd
TCP 0 0 localhost:1023 Localhost:24007 Zavedeno 1365 /glusterfsd
tcp 0 0 server1.example.com:24009 server1.example.com:1023 ESTABLISHED 1365/glusterfsd
[[e-mail chráněný] ~]#
... vše je v pořádku, ale pokud nedostanete žádný výstup...
[[e-mail chráněný] ~]# netstat -tap | grep glusterfsd
[[e-mail chráněný] ~]#
... restartujte démona GlusterFS na odpovídajícím serveru (v tomto případě server2.example.com):
server2.example.com:
/etc/init.d/glusterfsd restart
Poté zkontrolujte výstup...
netstat -tap | grep glusterfsd
... znovu na tom serveru - nyní by to mělo vypadat takto:
[[e-mail chráněn] ~]# netstat -tap | Grep glusterfsd
tcp 0 0*:24010*:*Poslouchejte 1458 /glusterfsd
tcp 0 0 localhost.localdom:1021 localhost.localdo:24007 zavedeno 1458 /glusterfsd
[[e -mailem] ~ ~ #
Nyní zpět na server1.example.com:
server1.example.com:
Stav svazku můžete zkontrolovat příkazem
gluster volume info
[[email protected] ~]# gluster volume info
Název svazku:testvol
Typ:Replikovat
Stav:Spuštěno
Počet cihel:2
Typ dopravy:tcp
Bricky:
Brick1:server1. example.com:/data
Brick2:server2.example.com:/data
[[email protected] ~]#
Ve výchozím nastavení se ke svazku mohou připojit všichni klienti. Pokud chcete udělit přístup pouze k client1.example.com (=192.168.0.102), spusťte:
gluster volume set testvol auth.allow 192.168.0.102
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.102, 192.168.0.103).
Informace o svazku by nyní měly zobrazovat aktualizovaný stav:
gluster volume info
[[email protected] ~]# gluster volume info
Název svazku:testvol
Typ:Replikovat
Stav:Spuštěno
Počet cihel:2
Typ dopravy:tcp
Bricky:
Brick1:server1. example.com:/data
Brick2:server2.example.com:/data
Překonfigurované možnosti:
auth.allow:192.168.0.102
[[email chráněný] ~]#
4 Nastavení klienta GlusterFS
client1.example.com:
Na klienta můžeme nainstalovat klienta GlusterFS následovně:
yum install glusterfs-client
Poté vytvoříme následující adresář:
mkdir /mnt/glusterfs
A je to! Nyní můžeme připojit souborový systém GlusterFS do /mnt/glusterfs pomocí následujícího příkazu:
mount.glusterfs server1.example.com:/testvol /mnt/glusterfs
(Místo server1.example.com můžete také použít server2.example.com ve výše uvedeném příkazu!)
Nyní byste měli vidět nový podíl ve výstupech...
mount
[[email chráněno] ~]# připojení
/dev/mapper/vg_client1-LogVol00 na / typ ext4 (rw)
proc na /proc typ proc (rw)
sysfs na /sys typ sysfs (rw)
devpts na /dev/pts typ devpts (rw,gid=5,mode=620)
tmpfs na /dev/shm typ tmpfs (rw)
/dev/sda1 na /boot typ ext4 (rw)
žádný na /proc/sys/fs/binfmt_misc typ binfmt_misc (rw)
sunrpc na /var/lib/nfs/rpc_pipefs typ rpc_pipefs (rw)
server1.example.com:/testvol na /mnt/glusterfs typu fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)
[[email protected] ~]#
... a...
df -h
[[email protected] ~]# df -h
Souborový systém Velikost Použitá Dostupnost Využití % Připevněno na
/dev/mapper/vg_client1-LogVol00
< 7 9. 1 G. 1. /> tmpfs 499m 0 499m 0%/dev/shm
/dev/sda1 504m 39m 440m 9%/boot
server1.example.com:/testvol
29G 1.1G 27G 4%/ mnt/glusterfs
[[email protected] ~]#
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
[...] server1.example.com:/testvol /mnt/glusterfs glusterfs defaults,_netdev 0 0 |
(Opět, místo server1.example.com můžete také použít server2.example.com!)
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
5 testování
Nyní vytvoříme nějaké testovací soubory na sdílené složce GlusterFS:
client1.example.com:
touch /mnt/glusterfs/test1
touch /mnt/glusterfs/test2
Nyní se podívejme na adresář /data na server1.example.com a server2.example.com. Soubory test1 a test2 by měly být přítomny na každém uzlu:
server1.example.com/server2.example.com:
ls -l /data
[[email protected] ~]# ls -l /data
celkem 8
-rw-r--r-- 1 kořenový adresář 0 2012-12-17 11:17 test1
- rw-r--r-- 1 root root 0 2012-12-17 11:17 test2
[[email protected] ~]#
Nyní vypneme server1.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:
shutdown -h now
client1.example.com:
touch /mnt/glusterfs/test3
touch /mnt/glusterfs/test4
rm -f /mnt/glusterfs/test2
Změny by měly být viditelné v adresáři /data na server2.example.com:
server2.example.com:
ls -l /data
[[email protected] ~]# ls -l /data
celkem 8
-rw-r--r-- 1 kořenový adresář 0 2012-12-17 11:17 test1
- rw-r--r-- 1 kořen kořen 0 2012-12-17 11:38 test3
-rw-r--r-- 1 kořen kořen 0 2012-12-17 11:38 test4
[[e-mail chráněn] ~]#
Spusťte znovu server1.example.com a podívejte se do adresáře /data:
server1.example.com:
ls -l /data
[[email protected] ~]# ls -l /data
celkem 8
-rw-r--r-- 1 kořenový kořen 0 2012-12-17 11:17 test1
- rw-r--r-- 1 root root 0 2012-12-17 11:17 test2
[[email protected] ~]#
Jak vidíte, server1.example.com si nevšiml změn, ke kterým došlo, když byl mimo provoz. To je snadné 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 /mnt/glusterfs/
celkem 8
-rw-r--r-- 1 kořenový kořen 0 2012-12-17 11:17 test1
-rw-r--r-- 1 kořenový kořen 0 2012-12-17 11:38 test3
-rw-r--r-- 1 kořenový kořen 0 2012-12-17 11:38 test4
[[e-mail chráněn] ~]#
Nyní se znovu podívejte na adresář /data na server1.example.com a měli byste vidět, že změny byly replikovány do tohoto uzlu:
server1.example.com:
ls -l /data
[[email protected] ~]# ls -l /data
celkem 4
-rw-r--r-- 1 kořenový kořen 0 2012-12-17 11:17 test1
- rw-r--r-- 1 kořenový kořen 0 2012-12-17 11:38 test3
-rw-r--r-- 1 kořenový kořen 0 2012-12-17 11:38 test4
[[e-mail chráněn] ~]#
6 odkazů
- GlusterFS:http://www.gluster.org/
- Dokumentace GlusterFS 3.2:http://download.gluster.com/pub/gluster/glusterfs/3.2/Documentation/AG/html/index.html
- CentOS:http://www.centos.org/
-
Úložiště s vysokou dostupností s GlusterFS na Debianu 8 – zrcadlení mezi dvěma úložnými servery
-
Úložiště s vysokou dostupností s GlusterFS 3.0.x na Debian Squeeze – Automatická replikace souborů přes dva úložné servery
-
Vysoce dostupné úložiště s GlusterFS 3.2.x na Debian Wheezy – automatická replikace souborů (zrcadlení) na dvou serverech úložiště