GNU/Linux >> Znalost Linux >  >> Cent OS

Úložiště s vysokou dostupností s GlusterFS na CentOS 7 – zrcadlení mezi dvěma úložnými servery

Tento kurz ukazuje, jak nastavit úložiště s vysokou dostupností se dvěma úložnými servery (CentOS 7.2), 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 7.2) 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.

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)
  • klient1.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ě:

nano /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ě EPEL 7 na našich systémech CentOS:

yum -y install epel-release
yum -y install yum-priorities

Upravte /etc/yum.repos.d/epel.repo...

nano /etc/yum.repos.d/epel.repo

... a přidejte řádek priority=10 do sekce [epel]:

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[...]

Poté aktualizujeme naše stávající balíčky v systému:

yum -y update

3 Nastavení serverů GlusterFS

server1.example.com/server2.example.com:

GlusterFS je k dispozici v úložišti speciální zájmové skupiny úložiště CentOS. Nainstalujte úložiště pomocí tohoto příkazu:

yum -y install centos-release-gluster

Poté nainstalujte server GlusterFS následovně:

yum -y install glusterfs-server

Vytvořte spouštěcí odkazy systému pro démona Gluster a spusťte jej:

systemctl enable glusterd.service
systemctl start glusterd.service

Příkaz

glusterfsd --version

by nyní měla zobrazovat verzi GlusterFS, kterou jste právě nainstalovali (v tomto případě 3.7.12):

[[email protected] ~]# glusterfsd --version
glusterfs 3.7.12 built on Jun 24 2016 14:11:19
Repository revision: git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2013 Red Hat, Inc. <http://www.redhat.com/>
GlusterFS comes with ABSOLUTELY NO WARRANTY.
It is licensed to you under your choice of the GNU Lesser
General Public License, version 3 or any later version (LGPLv3
or later), or the GNU General Public License, version 2 (GPLv2),
in all cases as published by the Free Software Foundation.

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 se replikuje 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
peer probe: success.

Stav fondu důvěryhodného úložiště by nyní měl být podobný tomuto:

gluster peer status
[[email protected] ~]# gluster peer status
Number of Peers: 1
Hostname: server2.example.com
Uuid: 582e10da-aa1b-40b8-908c-213f16f57fe5
State: Peer in Cluster (Connected)

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 adresář /data (bude vytvořen, pokud neexistuje):

gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data force
[[email protected] ~]# gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data force
volume create: testvol: success: please start the volume to access data
[[email protected] ~]#

Spusťte hlasitost:

gluster volume start testvol

Výsledek by měl být:

[[email protected] ~]# gluster volume start testvol
volume start: testvol: success
[[email protected] ~]#

Je možné, že výše uvedený příkaz vám říká, že akce nebyla úspěšná:

[[email protected] ~]# gluster volume start testvol
Starting volume testvol has been unsuccessful
[[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...

[[email protected] ~]# netstat -tap | grep glusterfsd
tcp 0 0 0.0.0.0:49152 0.0.0.0:* LISTEN 22880/glusterfsd
tcp 0 0 server1.example.c:49152 server2.example.c:49148 ESTABLISHED 22880/glusterfsd
tcp 0 0 server1.example.c:49152 server1.example.c:49148 ESTABLISHED 22880/glusterfsd
tcp 0 0 server1.example.c:49150 server1.example.c:24007 ESTABLISHED 22880/glusterfsd
tcp 0 0 server1.example.c:49152 server2.example.c:49142 ESTABLISHED 22880/glusterfsd
tcp 0 0 server1.example.c:49152 server1.example.c:49149 ESTABLISHED 22880/glusterfsd
[[email protected] ~]#

... vše je v pořádku, ale pokud nedostanete žádný výstup...

[[email protected] ~]# netstat -tap | grep glusterfsd
[[email protected] ~]#

... restartujte démona GlusterFS na odpovídajícím serveru (v tomto případě server2.example.com):

server2.example.com:

systemctl restart glusterd.service

Poté zkontrolujte výstup...

netstat -tap | grep glusterfsd

... znovu na tom serveru - nyní by to mělo vypadat takto:

[[email protected] ~]# netstat -tap | grep glusterfsd
tcp 0 0 0.0.0.0:49152 0.0.0.0:* LISTEN 10971/glusterfsd
tcp 0 0 server2.example.c:49152 server1.example.c:49140 ESTABLISHED 10971/glusterfsd
tcp 0 0 server2.example.c:49152 server2.example.c:49149 ESTABLISHED 10971/glusterfsd
tcp 0 0 server2.example.c:49152 server2.example.c:49143 ESTABLISHED 10971/glusterfsd
tcp 0 0 server2.example.c:49152 server1.example.c:49142 ESTABLISHED 10971/glusterfsd
tcp 0 0 server2.example.c:49150 server2.example.c:24007 ESTABLISHED 10971/glusterfsd
[[email protected] ~]#

Nyní zpět na server1.example.com:

server1.example.com:

Stav svazku můžete zkontrolovat pomocí příkazu

gluster volume info

[[email protected] ~]# informace o objemu skupiny

Volume Name: testvol
Type: Replicate
Volume ID: e1f825ca-c9d9-4eeb-b6c5-d62c4aa02376
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: server1.example.com:/data
Brick2: server2.example.com:/data
Options Reconfigured:
performance.readdir-ahead: on
[[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.1.102), spusťte:

gluster volume set testvol auth.allow 192.168.1.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.1.102, 192.168.1.103).

Informace o svazku by nyní měly zobrazovat aktualizovaný stav:

gluster volume info
[[email protected] ~]# gluster volume info
Volume Name: testvol
Type: Replicate
Volume ID: e1f825ca-c9d9-4eeb-b6c5-d62c4aa02376
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: server1.example.com:/data
Brick2: server2.example.com:/data
Options Reconfigured:
auth.allow: 192.168.1.102
performance.readdir-ahead: on
[[email protected] ~]#

4 Nastavení klienta GlusterFS

client1.example.com:

Na klienta můžeme nainstalovat klienta GlusterFS následovně:

yum -y 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 protected] ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=930336k,nr_inodes=232584,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=34,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=188060k,mode=700)
server1.example.com:/testvol on /mnt/glusterfs type fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
[[email protected] ~]#

... a...

df -h
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 28G 1.3G 27G 5% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 919M 0 919M 0% /dev/shm
tmpfs 919M 8.6M 910M 1% /run
tmpfs 919M 0 919M 0% /sys/fs/cgroup
/dev/sda1 497M 192M 306M 39% /boot
tmpfs 184M 0 184M 0% /run/user/0
server1.example.com:/testvol 28G 12G 17G 41% /mnt/glusterfs
[[email protected] ~]#

Místo ručního připojení sdílené složky GlusterFS na klienta přidáte příkaz mount do souboru /etc/rc.local. Nepřidám jej do /etc/fstab, protože rc.local se vždy spustí po připojení sítě, což je vyžadováno pro síťový souborový systém

Otevřete /etc/rc.local a připojte následující řádek:

nano /etc/rc.local
[...]
/usr/sbin/mount.glusterfs server1.example.com:/testvol /mnt/glusterfs

(Opět, místo server1.example.com můžete také použít server2.example.com!)

Chcete-li otestovat, zda váš upravený soubor /etc/rc.local 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
total 0
-rw-r--r--. 2 root root 0 Jul 1 2016 test1
-rw-r--r--. 2 root root 0 Jul 1 2016 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

Spuštění příkazů může nějakou dobu trvat, protože Glusterfs se přepne na server2 poté, co již nemůže dosáhnout server1. Zde můžeme vidět odolnost systému proti chybám, protože stále můžeme pracovat na sdíleném úložišti dat, když je server1 offline. 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
total 8
-rw-r--r--. 2 root root 0 Jul 1 15:17 test1
-rw-r--r--. 2 root root 0 Jul 1 15:19 test3
-rw-r--r--. 2 root root 0 Jul 1 15:19 test4

Spusťte znovu server1.example.com a podívejte se na adresář /data:

server1.example.com:

ls -l /data
[[email protected] ~]# ls -l /data
total 8
-rw-r--r--. 2 root root 0 Jul 1 15:17 test1
-rw-r--r--. 2 root root 0 Jul 1 15:19 test2
[[email protected] ~]#

Jak vidíte, server1.example.com automaticky synchronizoval změněné. V případě, že změna ještě nebyla synchronizována, lze to snadno opravit, vše, co musíme udělat, je vyvolat příkaz read na sdílené složce GlusterFS na klient1.example.com, např.:

client1.example.com:

ls -l /mnt/glusterfs/
[[email protected] ~]# ls -l /data
total 8
-rw-r--r--. 2 root root 0 Jul 1 15:17 test1
-rw-r--r--. 2 root root 0 Jul 1 15:19 test3
-rw-r--r--. 2 root root 0 Jul 1 15:19 test4
[[email protected] ~]#

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
total 8
-rw-r--r--. 2 root root 0 Jul 1 15:17 test1
-rw-r--r--. 2 root root 0 Jul 1 15:19 test3
-rw-r--r--. 2 root root 0 Jul 1 15:19 test4
[[email protected] ~]#

  • 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/

Cent OS
  1. Úložiště s vysokou dostupností s GlusterFS na Debianu 8 – zrcadlení mezi dvěma úložnými servery

  2. Distribuované úložiště mezi čtyřmi uzly úložiště s GlusterFS 3.2.x na Ubuntu 12.10

  3. Distribuované replikované úložiště mezi čtyři uzly úložiště s GlusterFS 3.2.x na Ubuntu 12.10

  1. Pruhování přes čtyři uzly úložiště s GlusterFS 3.2.x na Ubuntu 12.10

  2. Automatická replikace souborů (zrcadlení) přes dva úložné servery s GlusterFS 3.2.x na Ubuntu 12.10

  3. Úložiště s vysokou dostupností s GlusterFS na Debianu Lenny – Automatická replikace souborů přes dva úložné servery

  1. Úložiště s vysokou dostupností s GlusterFS 3.0.x na Debian Squeeze – Automatická replikace souborů přes dva úložné servery

  2. Vysoce dostupné úložiště s GlusterFS 3.2.x na Debian Wheezy – automatická replikace souborů (zrcadlení) na dvou serverech úložiště

  3. Úložiště s vysokou dostupností s GlusterFS na CentOS 5.4 – Automatická replikace souborů (zrcadlení) mezi dvěma úložnými servery