Armazenamento · 9 min read · Jan 10, 2026
Armazenamento de Alta Disponibilidade com GlusterFS no Debian 8 - Espelho entre dois servidores de armazenamento
Este tutorial mostra como configurar um armazenamento de alta disponibilidade com dois servidores de armazenamento (Debian Jessie) 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 nós de armazenamento. O sistema cliente (Debian 8 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 interconexão 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.
1 Nota Preliminar
Neste tutorial, usarei três sistemas, dois servidores e um cliente:
- server1.example.com: endereço IP 192.168.1.100 (servidor)
- server2.example.com: endereço IP 192.168.1.101 (servidor)
- client1.example.com: endereço IP 192.168.1.102 (cliente)
Todos os três sistemas devem ser capazes de resolver os nomes de host 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:
nano /etc/hosts127.0.0.1 localhost
192.168.1.100 server1.example.com server1
192.168.1.101 server2.example.com server2
192.168.1.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
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters(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 de host podem ser resolvidos ou não.)
2 Configurando os Servidores GlusterFS
server1.example.com/server2.example.com:
A versão mais recente do GlusterFS está disponível como pacote Debian em gluster.org. Podemos instalá-la da seguinte forma:
Adicionamos a chave pública do repositório Debian do gluster.org em ambos os servidores.
wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/rsa.pub | apt-key add -Em seguida, adicione o repositório GlusterFS (o comando é uma linha!)
echo deb http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/Debian/jessie/apt jessie main > /etc/apt/sources.list.d/gluster.liste atualize a lista de repositórios.
apt-get updateAgora podemos instalar o software do servidor GlusterFS com apt.
apt-get -y install glusterfs-serverO comando
glusterfsd --versiondeve agora mostrar a versão do GlusterFS que você acabou de instalar (3.7.9 neste caso):
root@server1:/# glusterfsd --version
glusterfs 3.7.9 built on Mar 23 2016 05:24:49
Repository revision: git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2013 Red Hat, Inc.
GlusterFS vem com ABSOLUTAMENTE NENHUMA GARANTIA.
É licenciado para você sob sua escolha da GNU Lesser
General Public License, versão 3 ou qualquer versão posterior (LGPLv3
ou posterior), ou da GNU General Public License, versão 2 (GPLv2),
em todos os casos conforme publicado pela Free Software Foundation.
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.
O Glusterfs deve armazenar seus dados no diretório /data nos servidores. Este local pode ser um diretório normal se você tiver uma instalação menor ou você pode usar uma partição de disco rígido separada e montá-la como /data.
Execute em ambos os servidores:
mkdir /datapara criar o diretório de dados.
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.comroot@server1:/# gluster peer probe server2.example.com
peer probe: success.
root@server1:/#O status do pool de armazenamento confiável deve agora ser semelhante a isto:
gluster peer statusroot@server1:/# gluster peer status
Number of Peers: 1Hostname: server2.example.com
Uuid: 0f7ee46c-6a71-4a31-91d9-6076707eff95
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/testvol (este será criado se não existir):
gluster volume create testvol replica 2 transport tcp server1.example.com:/data/testvol server2.example.com:/data/testvol forceroot@server1:/# gluster volume create testvol replica 2 transport tcp server1.example.com:/data/testvol server2.example.com:/data/testvol force
volume create: testvol: success: please start the volume to access data
root@server1:/#Inicie o volume:
gluster volume start testvolroot@server1:/# gluster volume start testvol
volume start: testvol: success
root@server1:/#Nosso volume de teste foi iniciado com sucesso.
É possível que o comando acima lhe diga 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 glusterfsdem ambos os servidores.
Se você obtiver uma saída como esta…
root@server1:/# netstat -tap | grep glusterfsd
tcp 0 0 *:49152 *:* LISTEN 8007/glusterfsd
tcp 0 0 server1.example.c:65533 server1.example.c:24007 ESTABLISHED 8007/glusterfsd
tcp 0 0 server1.example.c:49152 server2.example.c:65531 ESTABLISHED 8007/glusterfsd
tcp 0 0 server1.example.c:49152 server1.example.c:65532 ESTABLISHED 8007/glusterfsd
tcp 0 0 server1.example.c:49152 server1.example.c:65531 ESTABLISHED 8007/glusterfsd
tcp 0 0 server1.example.c:49152 server2.example.c:65526 ESTABLISHED 8007/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 (server1.example.com neste caso):
server2.example.com:
service glusterfs-server restartEm seguida, verifique a saída de…
netstat -tap | grep glusterfsd… novamente nesse servidor - agora deve parecer assim:
root@server2:/# netstat -tap | grep glusterfsd
tcp 0 0 *:49152 *:* LISTEN 7852/glusterfsd
tcp 0 0 server2.example.c:49152 server2.example.c:65532 ESTABLISHED 7852/glusterfsd
tcp 0 0 server2.example.c:49152 server1.example.c:65526 ESTABLISHED 7852/glusterfsd
tcp 0 0 server2.example.c:49152 server2.example.c:65525 ESTABLISHED 7852/glusterfsd
tcp 0 0 server2.example.c:65533 server2.example.c:24007 ESTABLISHED 7852/glusterfsd
tcp 0 0 server2.example.c:49152 server1.example.c:65524 ESTABLISHED 7852/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 inforoot@server1:/# gluster volume infoVolume Name: testvol
Type: Replicate
Volume ID: 3fc9af57-ca56-4a72-ad54-3d2ea03e5883
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: server1.example.com:/data/testvol
Brick2: server2.example.com:/data/testvol
Options Reconfigured:
performance.readdir-ahead: on
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.1.102), execute:
gluster volume set testvol auth.allow 192.168.1.102root@server1:/# gluster volume set testvol auth.allow 192.168.1.102
volume set: success
root@server1:/#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.1.102,192.168.1.103).
As informações do volume agora devem mostrar o status atualizado:
gluster volume inforoot@server1:/# gluster volume info
Volume Name: testvol
Type: Replicate
Volume ID: 3fc9af57-ca56-4a72-ad54-3d2ea03e5883
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: server1.example.com:/data/testvol
Brick2: server2.example.com:/data/testvol
Options Reconfigured:
auth.allow: 192.168.1.102
performance.readdir-ahead: on
root@server1:/#3 Configurando o Cliente GlusterFS
client1.example.com:
No sistema cliente, primeiro adicionamos a chave pública do repositório Debian do gluster.org.
wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/rsa.pub | apt-key add -Em seguida, adicione o repositório GlusterFS (o comando é uma linha!)
echo deb http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/Debian/jessie/apt jessie main > /etc/apt/sources.list.d/gluster.liste atualize a lista de repositórios.
apt-get updateAgora podemos instalar o cliente GlusterFS da seguinte forma.
apt-get -y install glusterfs-clientEm 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!)
Agora você deve ver o novo compartilhamento nas saídas de…
mountroot@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=125556,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,relatime,size=204220k,mode=755)
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/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/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=23,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (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)
root@client1:/#… e…
df -hroot@client1:/# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 57G 1.1G 53G 2% /
udev 10M 0 10M 0% /dev
tmpfs 200M 4.6M 195M 3% /run
tmpfs 499M 0 499M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 499M 0 499M 0% /sys/fs/cgroup
server1.example.com:/testvol 57G 21G 34G 39% /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:
nano /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:
rebootApós a reinicialização, você deve encontrar o compartilhamento nas saídas de…
df -h… e…
mount4 Testando a Replicação do GlusterFS
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 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/testvolroot@server1:/# ls -l /data/testvol/
total 0
-rw-r--r-- 2 root root 0 Mar 23 2016 test1
-rw-r--r-- 2 root root 0 Mar 23 2016 test2Agora 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/testvol em server2.example.com:
server2.example.com:
ls -l /data/testvolroot@server2:/# ls -l /data/testvol
total 8
-rw-r--r-- 2 root root 0 Mar 23 08:06 test1
-rw-r--r-- 2 root root 0 Mar 23 08:09 test3
-rw-r--r-- 2 root root 0 Mar 23 08:09 test4
root@server2:/#Vamos reiniciar server1.example.com e dar uma olhada no diretório /data:
server1.example.com:
ls -l /data/testvolroot@server1:/# ls -l /data/testvol
total 0
-rw-r--r-- 2 root root 0 Mar 23 08:06 test1
-rw-r--r-- 2 root root 0 Mar 23 08:09 test3
-rw-r--r-- 2 root root 0 Mar 23 08:09 test4
root@server1:/#Como você pode ver, server1.example.com sincronizou automaticamente as alterações. Caso a alteração ainda não tenha sido sincronizada, 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 0
-rw-r--r-- 1 root root 0 Mar 23 08:06 test1
-rw-r--r-- 1 root root 0 Mar 23 08:09 test3
-rw-r--r-- 1 root root 0 Mar 23 08:09 test4
root@client1:/#5 Links
- GlusterFS: http://www.gluster.org/
- Documentação do GlusterFS: http://gluster.readthedocs.org/en/latest/
- Debian: http://www.debian.org/
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.