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-server

O comando

glusterfs --version

deve 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-ns

Agora 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 start

3 Configurando O Cliente GlusterFS

client1.example.com:

No cliente, podemos instalar o cliente GlusterFS da seguinte forma:

apt-get install glusterfs-client

Em seguida, criamos o seguinte diretório:

mkdir /mnt/glusterfs

Em 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/glusterfs

ou

mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs

Agora você deve ver o novo compartilhamento nas saídas de…

mount
root@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 -h
root@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:

reboot

Após a reinicialização, você deve encontrar o compartilhamento nas saídas de…

df -h

… e…

mount

Se 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/test2

Agora 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/export
root@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 now

client1.example.com:

touch /mnt/glusterfs/test3  
touch /mnt/glusterfs/test4  
rm -f /mnt/glusterfs/test2

As alterações devem ser visíveis no diretório /data/export em server2.example.com:

server2.example.com:

ls -l /data/export
root@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/export
root@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/export
root@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

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.