Armazenamento · 6 min read · Jan 12, 2026
Armazenamento de Alta Disponibilidade Com GlusterFS 3.0.x No Debian Squeeze - Replicação Automática de Arquivos Entre Dois Servidores de Armazenamento
Este tutorial mostra como configurar um armazenamento de alta disponibilidade com dois servidores de armazenamento (Debian Squeeze) que utilizam GlusterFS. Cada servidor de armazenamento será um espelho do outro servidor de armazenamento, e os arquivos serão replicados automaticamente entre os dois servidores de armazenamento. O sistema cliente (Debian Squeeze também) poderá acessar o armazenamento como se fosse um sistema de arquivos local. GlusterFS é um sistema de arquivos em cluster capaz de escalar para vários petabytes. Ele agrega vários blocos de armazenamento sobre Infiniband RDMA ou TCP/IP em um grande sistema de arquivos de rede paralelo. Os blocos de armazenamento podem ser feitos de qualquer hardware comum, como servidores x86_64 com RAID SATA-II e HBA Infiniband.
Não dou nenhuma garantia de que isso funcionará para você!
1 Nota Preliminar
Neste tutorial, uso três sistemas, dois servidores e um cliente:
- server1.example.com: endereço IP 192.168.0.100 (servidor)
- server2.example.com: endereço IP 192.168.0.101 (servidor)
- client1.example.com: endereço IP 192.168.0.102 (cliente)
Todos os três sistemas devem ser capazes de resolver os nomes dos outros sistemas. Se isso não puder ser feito através do DNS, você deve editar o arquivo /etc/hosts para que fique assim em todos os três sistemas:
vi /etc/hosts| 127.0.0.1 localhost.localdomain localhost 192.168.0.100 server1.example.com server1 192.168.0.101 server2.example.com server2 192.168.0.102 client1.example.com client1 # As linhas a seguir são desejáveis para hosts compatíveis com IPv6 ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts |
(É também possível usar endereços IP em vez de nomes de host na configuração a seguir. Se você preferir usar endereços IP, não precisa se preocupar se os nomes dos hosts podem ser resolvidos ou não.)
2 Configurando Os Servidores GlusterFS
server1.example.com/server2.example.com:
GlusterFS está disponível como um pacote para Debian Squeeze, portanto, podemos instalá-lo da seguinte forma:
apt-get install glusterfs-serverO comando
glusterfs --versiondeve agora mostrar a versão do GlusterFS que você acabou de instalar (3.0.5 neste caso):
root@server1:~# glusterfs --version
glusterfs 3.0.5 built on Jul 13 2010 16:44:21
Repository revision: v3.0.5
Copyright (c) 2006-2009 Gluster Inc.
GlusterFS vem com ABSOLUTAMENTE NENHUMA GARANTIA.
Você pode redistribuir cópias do GlusterFS sob os termos da Licença Pública Geral GNU.
root@server1:~# Em seguida, criamos alguns diretórios:
mkdir /data/
mkdir /data/export
mkdir /data/export-nsAgora criamos o arquivo de configuração do servidor GlusterFS /etc/glusterfs/glusterfsd.vol (fazemos um backup do arquivo original /etc/glusterfs/glusterfsd.vol primeiro) que define qual diretório será exportado (/data/export) e qual cliente está autorizado a se conectar (192.168.0.102 = client1.example.com):
cp /etc/glusterfs/glusterfsd.vol /etc/glusterfs/glusterfsd.vol_orig
cat /dev/null > /etc/glusterfs/glusterfsd.vol
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.102 subvolumes brick end-volume |
Observe que é possível usar curingas para os endereços IP (como 192.168.*) e que você pode especificar vários endereços IP separados por vírgula (por exemplo, 192.168.0.102,192.168.0.103).
Depois, iniciamos o servidor GlusterFS:
/etc/init.d/glusterfs-server start3 Configurando O Cliente GlusterFS
client1.example.com:
No cliente, podemos instalar o cliente GlusterFS da seguinte forma:
apt-get install glusterfs-clientEm seguida, criamos o seguinte diretório:
mkdir /mnt/glusterfsEm seguida, criamos o arquivo /etc/glusterfs/glusterfs.vol (fazemos um backup do arquivo original /etc/glusterfs/glusterfs.vol primeiro):
cp /etc/glusterfs/glusterfs.vol /etc/glusterfs/glusterfs.vol_orig
cat /dev/null > /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 replicate type cluster/replicate subvolumes remote1 remote2 end-volume volume writebehind type performance/write-behind option window-size 1MB subvolumes replicate end-volume volume cache type performance/io-cache option cache-size 512MB subvolumes writebehind end-volume |
Certifique-se de usar os nomes de host ou endereços IP corretos dos servidores nas linhas de opção remote-host!
É isso! Agora podemos montar o sistema de arquivos GlusterFS em /mnt/glusterfs com um dos seguintes dois comandos:
glusterfs -f /etc/glusterfs/glusterfs.vol /mnt/glusterfsou
mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfsAgora você deve ver o novo compartilhamento nas saídas de…
mountroot@client1:~# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
/etc/glusterfs/glusterfs.vol on /mnt/glusterfs type fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)
root@client1:~#… e…
df -hroot@client1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 29G 778M 27G 3% /
tmpfs 249M 0 249M 0% /lib/init/rw
udev 244M 100K 244M 1% /dev
tmpfs 249M 0 249M 0% /dev/shm
/etc/glusterfs/glusterfs.vol
18G 848M 16G 5% /mnt/glusterfs
root@client1:~#( server1.example.com e server2.example.com cada um tem 18GB de espaço para o sistema de arquivos GlusterFS, mas como os dados são espelhados, o cliente não vê 36GB (2 x 18GB), mas apenas 18GB.)
Em vez de montar o compartilhamento GlusterFS manualmente no cliente, você poderia modificar /etc/fstab para que o compartilhamento seja montado automaticamente quando o cliente inicializa.
Abra /etc/fstab e adicione a seguinte linha:
vi /etc/fstab| [...] /etc/glusterfs/glusterfs.vol /mnt/glusterfs glusterfs defaults,_netdev 0 0 |
Para testar se sua modificação em /etc/fstab está funcionando, reinicie o cliente:
rebootApós a reinicialização, você deve encontrar o compartilhamento nas saídas de…
df -h… e…
mountSe modificar /etc/fstab não ajudar, desfaça sua alteração em /etc/fstab e adicione esta linha em /etc/rc.local em vez disso (antes da linha exit 0):
vi /etc/rc.local| [...] /bin/mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs [...] |
Isso garante que o compartilhamento seja montado após a rede estar ativa.
4 Testando
Agora vamos criar alguns arquivos de teste no compartilhamento GlusterFS:
client1.example.com:
touch /mnt/glusterfs/test1
touch /mnt/glusterfs/test2Agora vamos verificar o diretório /data/export em server1.example.com e server2.example.com. Os arquivos test1 e test2 devem estar presentes em cada nó:
server1.example.com/server2.example.com:
ls -l /data/exportroot@server1:~# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test2
root@server1:~#Agora desligamos server1.example.com e adicionamos/removemos alguns arquivos no compartilhamento GlusterFS em client1.example.com.
server1.example.com:
shutdown -h nowclient1.example.com:
touch /mnt/glusterfs/test3
touch /mnt/glusterfs/test4
rm -f /mnt/glusterfs/test2As alterações devem ser visíveis no diretório /data/export em server2.example.com:
server2.example.com:
ls -l /data/exportroot@server2:~# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test3
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test4
root@server2:~#Vamos reiniciar server1.example.com e dar uma olhada no diretório /data/export:
server1.example.com:
ls -l /data/exportroot@server1:~# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test2
root@server1:~#Como você pode ver, server1.example.com não notou as alterações que ocorreram enquanto estava desligado. Isso é fácil de corrigir, tudo o que precisamos fazer é invocar um comando de leitura no compartilhamento GlusterFS em client1.example.com, por exemplo:
client1.example.com:
ls -l /mnt/glusterfs/root@client1:~# ls -l /mnt/glusterfs/
total 8
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test3
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test4
root@client1:~#Agora dê uma olhada no diretório /data/export em server1.example.com novamente, e você deve ver que as alterações foram replicadas para aquele nó:
server1.example.com:
ls -l /data/exportroot@server1:~# ls -l /data/export
total 8
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test3
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test4
root@server1:~#5 Links
- GlusterFS: http://www.gluster.org/
- Debian: http://www.debian.org/
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.