Armazenamento · 7 min read · Jan 10, 2026

Armazenamento de Alta Disponibilidade Com GlusterFS 3.2.x No Debian Wheezy - Replicação Automática de Arquivos (Espelho) Entre Dois Servidores de Armazenamento

Este tutorial mostra como configurar um armazenamento de alta disponibilidade com dois servidores de armazenamento (Debian Wheezy) que usam 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 Wheezy 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 Wheezy, portanto, podemos instalá-lo da seguinte forma:

apt-get install glusterfs-server

O comando

glusterfsd --version

deve agora mostrar a versão do GlusterFS que você acabou de instalar (3.2.7 neste caso):

root@server1:~# glusterfsd --version  
glusterfs 3.2.7 built on Nov 12 2012 19:30:08  
Repository revision: git://git.gluster.com/glusterfs.git  
Copyright (c) 2006-2011 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:~#

Se você usar um firewall, certifique-se de que as portas TCP 111, 24007, 24008, 24009-(24009 + número de blocos em todos os volumes) estejam abertas em server1.example.com e server2.example.com.

Em seguida, devemos adicionar server2.example.com ao pool de armazenamento confiável (observe que estou executando todos os comandos de configuração do GlusterFS a partir de server1.example.com, mas você também pode executá-los a partir de server2.example.com porque a configuração é replicada entre os nós do GlusterFS - apenas certifique-se de usar os nomes de host ou endereços IP corretos):

server1.example.com:

Em server1.example.com, execute

gluster peer probe server2.example.com
root@server1:~# gluster peer probe server2.example.com  
Probe successful  
root@server1:~#

O status do pool de armazenamento confiável deve agora ser semelhante a isto:

gluster peer status
root@server1:~# gluster peer status  
Number of Peers: 1
Hostname: server2.example.com  
Uuid: d19cb707-7b23-4d11-8e9c-183cd0a18d96  
State: Peer in Cluster (Connected)  
root@server1:~#

Em seguida, criamos o compartilhamento chamado testvol com duas réplicas (observe que o número de réplicas é igual ao número de servidores neste caso porque queremos configurar o espelhamento) em server1.example.com e server2.example.com no diretório /data (este será criado se não existir):

gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data
root@server1:~# gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data  
Creation of volume testvol has been successful. Please start the volume to access data.  
root@server1:~#

Inicie o volume:

gluster volume start testvol

É possível que o comando acima informe que a ação não foi bem-sucedida:

root@server1:~# gluster volume start testvol  
Starting volume testvol has been unsuccessful  
root@server1:~#

Nesse caso, você deve verificar a saída de…

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

netstat -tap | grep glusterfsd

em ambos os servidores.

Se você obtiver uma saída como esta…

root@server1:~# netstat -tap | grep glusterfsd  
tcp        0      0 *:24009                 *:*                     LISTEN      1548/glusterfsd  
tcp        0      0 localhost.localdom:1019 localhost.localdo:24007 ESTABLISHED 1548/glusterfsd  
root@server1:~#

… tudo está bem, mas se você não obtiver nenhuma saída…

root@server2:~# netstat -tap | grep glusterfsd  
root@server2:~#

… reinicie o daemon GlusterFS no servidor correspondente (server2.example.com neste caso):

server2.example.com:

/etc/init.d/glusterfs-server restart

Em seguida, verifique a saída de…

netstat -tap | grep glusterfsd

… novamente naquele servidor - agora deve parecer assim:

root@server2:~# netstat -tap | grep glusterfsd  
tcp        0      0 *:24010                 *:*                     LISTEN      1458/glusterfsd  
tcp        0      0 localhost.localdom:1021 localhost.localdo:24007 ESTABLISHED 1458/glusterfsd  
root@server2:~#

Agora, de volta a server1.example.com:

server1.example.com:

Você pode verificar o status do volume com o comando

gluster volume info
root@server1:~# gluster volume info
Volume Name: testvol  
Type: Replicate  
Status: Started  
Number of Bricks: 2  
Transport-type: tcp  
Bricks:  
Brick1: server1.example.com:/data  
Brick2: server2.example.com:/data  
root@server1:~#

Por padrão, todos os clientes podem se conectar ao volume. Se você quiser conceder acesso apenas a client1.example.com (= 192.168.0.102), execute:

gluster volume set testvol auth.allow 192.168.0.102

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).

As informações do volume agora devem mostrar o status atualizado:

gluster volume info
root@server1:~# gluster volume info
Volume Name: testvol  
Type: Replicate  
Status: Started  
Number of Bricks: 2  
Transport-type: tcp  
Bricks:  
Brick1: server1.example.com:/data  
Brick2: server2.example.com:/data  
Options Reconfigured:  
auth.allow: 192.168.0.102  
root@server1:~#

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

É isso! Agora podemos montar o sistema de arquivos GlusterFS em /mnt/glusterfs com o seguinte comando:

mount.glusterfs server1.example.com:/testvol /mnt/glusterfs

(Em vez de server1.example.com, você também pode usar server2.example.com no comando acima!)

Você deve agora ver o novo compartilhamento nas saídas de…

mount
root@client1:~# mount  
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)  
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)  
odev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=126813,mode=755)  
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)  
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=102704k,mode=755)  
/dev/mapper/server1-root on / type ext4 (rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered)  
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)  
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=205400k)  
/dev/sda1 on /boot type ext2 (rw,relatime,errors=continue)  
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)  
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)  
root@client1:~#

… e…

df -h
root@client1:~# df -h  
Filesystem                Size  Used Avail Use% Mounted on  
rootfs                     29G  1.2G   26G   5% /  
udev                       10M     0   10M   0% /dev  
tmpfs                     101M  240K  101M   1% /run  
/dev/mapper/server1-root    29G  1.2G   26G   5% /  
tmpfs                     5.0M     0  5.0M   0% /run/lock  
tmpfs                     201M     0  201M   0% /run/shm  
/dev/sda1                 228M   18M  199M   9% /boot  
server1.example.com:/testvol   29G  1.2G   26G   5% /mnt/glusterfs  
root@client1:~#

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 acrescente a seguinte linha:

vi /etc/fstab

| [...] server1.example.com:/testvol /mnt/glusterfs glusterfs defaults,_netdev 0 0 |

(Novamente, em vez de server1.example.com, você também pode usar server2.example.com!)

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

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 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
root@server1:~# ls -l /data  
total 0  
-rw-r--r-- 1 root root 0 Sep 30 17:53 test1  
-rw-r--r-- 1 root root 0 Sep 30 17:53 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 em server2.example.com:

server2.example.com:

ls -l /data
root@server2:~# ls -l /data  
total 8  
-rw-r--r-- 1 root root 0 Sep 30 17:53 test1  
-rw-r--r-- 1 root root 0 Sep 30 17:54 test3  
-rw-r--r-- 1 root root 0 Sep 30 17:54 test4  
root@server2:~#

Vamos reiniciar server1.example.com e dar uma olhada no diretório /data:

server1.example.com:

ls -l /data
root@server1:~# ls -l /data  
total 0  
-rw-r--r-- 1 root root 0 Sep 30 17:53 test1  
-rw-r--r-- 1 root root 0 Sep 30 17:53 test2  
root@server1:~#

Como você vê, server1.example.com não percebeu as alterações que aconteceram 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 Sep 30 17:53 test1  
-rw-r--r-- 1 root root 0 Sep 30 17:54 test3  
-rw-r--r-- 1 root root 0 Sep 30 17:54 test4  
root@client1:~#

Agora dê uma olhada no diretório /data em server1.example.com novamente, e você deve ver que as alterações foram replicadas para aquele nó:

server1.example.com:

ls -l /data
root@server1:~# ls -l /data  
total 0  
-rw-r--r-- 1 root root 0 Sep 30 17:53 test1  
-rw-r--r-- 1 root root 0 Sep 30 17:54 test3  
-rw-r--r-- 1 root root 0 Sep 30 17:54 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.