Glusterfs – Armazenamento distribuído e de alta disponibilidade
Nos dias que correm cada vez se torna mais relevante fazer cópias dos dados, não só por motivos de segurança, mas principalmente pela disponibilidade dos mesmos.
O GlusterFS é um sistema de armazenamento distribuído e descentralizado, que agrega múltiplas unidades de armazenamento remotas num único volume. As unidades, bricks, são distribuídas pela rede num único sistema de ficheiros paralelo, permitindo escalabilidade de milhares de bricks e vários petabytes!
Neste tutorial iremos explicar, passo a passo, como instalar o Glusterfs no Xubuntu e criar um sistema de armazenamento de alta disponibilidade. Para tal serão usados 2 máquinas servidor e um 1 cliente, sendo que os servidores replicam os ficheiros que o cliente guarda em determinado directório.
Vamos considerar que as máquinas têm os seguintes endereços:
- servidor1 - 192.168.1.161
- servidor2 - 192.168.1.162
- cliente - 192.168.1.163
Considerando que vamos implementar o Glusterfs numa LAN, sem serviço de DNS para a rede local, devem começar por mapear os endereços IPs nos nomes definidos. Para isso devem realizar o passo 1
Passo 1 - Configurar o ficheiro hosts da seguinte forma em todas as máquinas de modo a estas se "conheçam" por nome.
nano /etc/hosts |
Passo 2 - Mudar o nome da cada máquina de acordo com a configuração anterior.
nano /etc/hostname |
Instalação do GlusterFS
Download e instalação do GlusterFS (efectuar este passo para ambos os servidores)
Dado a última versão do GlusterFS estar disponível num pacote Debian adicionamos a chave pública deste:
wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/rsa.pub | apt-key add - |
De seguida basta adicionar o repositório do GlusterFS:
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.list |
Atualizamos a lista de repositórios:
apt-get update |
Por fim instalamos o servidor de GlusterFS:
apt-get -y install glusterfs-server |
Para confirmar que tudo foi instalado corretamente basta usar o seguinte comando:
glusterfs --version |
Vamos agora criar um directório onde os ficheiros serão guardados (efectuar este passo em ambos os servidores)
mkdir /data |
O próximo passo é atribuir os IP definidos acima definidos a cada um dos servidores:
ifconfig enp0s3 192.168.1.161/24 |
ifconfig enp0s3 192.168.1.162/24 |
Vamos agora adicionar o servidor2 ao servidor1 como armazenamento fidedigno, ou seja, ligar os bricks entre si para que estes possam sincronizar mutuamente.
gluster peer probe <span> servidor2 gluster peer status</span> |
Após estes comandos deverão obter o seguinte resultado:
Podemos verificar que o a ligação ao servidor2 foi bem sucedida e que este tem os serviços ativos.
Criar Volume
O próximo passo é criar um volume (que será partilhado pelos 2 servidores).
gluster volume create pplware replica 2 transport tcp servidor1:/data/pplware servidor2:/data/pplware force |
Inicializar o volume criado no passo anterior:
gluster volume start pplware |
Para verificar que a volume foi bem iniciado e que a ligação está estabelecida podemos usar o seguinte comando:
netstat -tap | grep glusterfsd |
Nota: Caso não consigam realizar este passo voltem a inicializar os serviços em ambos os servidores com o seguinte comando:
service glusterfs-server restart |
Dado isto verifiquem se a ligação está bem estabelecida com o comando:
netstat -tap | grep glusterfsd |
Para ver mais informações sobre o volume poderão recorrer ao seguinte comando:
gluster volume info |
O resultado deverá ser o seguinte:
Regra de acesso
Restringir o acesso ao volume para apenas o nosso cliente ser o único com acesso (por omissão todas as máquinas na rede poderão utilizar o serviço):
A partir do servidor1 basta inserir o seguinte comando:
gluster volume set pplware auth.allow 192.168.1.163 |
Após receberem uma mensagem de sucesso poderão verificar nas informações do volume que por baixo de ‘Options Reconfigured:’ está o IP da máquina que acabamos de introduzir
Instalação do GlusterFS nocliente
Download e instalação do GlusterFS no cliente.
Os 3 primeiros comandos são os mesmos que foram usado no servidor.
wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/rsa.pub | apt-key add - 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.list apt-get update |
Por fim instalamos o cliente de GlusterFS:
apt-get -y install glusterfs-client |
Criar directório onde os ficheiros serão guardados e automaticamente sincronizados comos servidores:
mkdir /mnt/glusterfs |
Atribuir o IP definido acima ao cliente:
ifconfig enp0s3 192.168.1.163/24 |
Associar o directório aos servidores:
mount.glusterfs servidor1:/pplware /mnt/glusterfs mount |
Para confirmar que a ligação foi estabelecida podemos usar o comando:
df –h |
Testes
Finalmente com tudo está operacional podemos realizar alguns testes.
Criar um ficheiro no directório do cliente e verificar se este foi copiado para os servidores:
Efectuar o seguinte comando no cliente:
touch /mnt/glusterfs/primeiroTeste |
Verificar em ambos os servidores se este foi replicado:
ls -l /data/pplware |
Vamos agora eliminar um ficheiro no diretório do cliente e verificar se este também foi eliminado nos servidores:
Efetuar o seguinte comando no cliente:
rm -f /mnt/glusterfs/primeiroTeste |
Verificar em ambos os servidores se este foi eliminado com o seguinte comando:
ls -l /data/pplware |
Desligue um dos servidores, crie um ficheiro no directório do cliente e verifique que este foi criado no servidor activo. De seguida volte a ligar o servidor e verifique que é feita a sincronização dos ficheiros entre os servidores.
Efectuar o seguinte comando no cliente:
touch /mnt/glusterfs/terceiroTeste |
Verificar no servidor se este foi replicado com o seguinte comando:
ls -l /data/pplware |
Voltar a ligar o outro servidor e voltar a inicializa o serviço com os seguintes comandos:
service glusterfs-server restart |
Verificar que a sincronização entre os servidores foi feita com o seguinte comando:
ls -l /data/pplware |
E está feito. Esperamos que tenham gostado deste tutorial e que vos sirva para criarem gratuitamente , se tiverem necessidade, um sistema de armazenamento distribuído.
Este artigo tem mais de um ano
Há algum sistema igual para Windows ?
Seria muito bom este sistema poder ser instalado em maquinas com Windows 7 /8 / 10, e reservar um determinado espaço (individualmente) de cada computador.
Atentamente,
Chama-se DFS e não tenho a certeza se é igual o GlusterFS pode-se fazer sync de uma pasta quer seja mount ou não mas sempre sobre um FileSystem, o DFS poderá ser mais parecido com DRBD ou Ceph que tem o seu proprio File System.
Grande artigo. À Pedro Pinto.
Este o mérito é do Pedro Lopes . Eu só dei a ideia 😀
Boa tarde,
ha uma falha na atribuição dos IP’s (que está correta no screenshot dos hosts). O cliente e o servidor 2 partilham o mesmo IP? 192.168.1.162
Parabéns pelo artigo.
Bom dia Adão Santos,
embora não encontre o screenshot onde está esse erro o IP’s não poderão se facto ser iguais.
Os IP’s a usar em cada uma das máquinas são os seguintes:
servidor1 – 192.168.1.161
servidor2 – 192.168.1.162
cliente – 192.168.1.163
Favoritado. Nice artigo!
Bom artigo 🙂
Excelente artigo! Ainda há pouco tempo estive a olhar para o GlusterFS para os servidores de uma startup, fiquei surpreso de ver aqui um exemplo tao detalhado 🙂
Relativamente ao windows isto pode ser interessante: https://jonarcher.info/2014/06/windows-cifs-fileshares-using-glusterfs-ctdb-highly-available-data/
(pequeno typo: “sincronizados comos servidores”, falta o espaço)
Bom artigo, mas há muito para explorar quanto a filesystem distribuidos.
Podem comparar com DRBD e Ceph que são completamente diferentes em termos de arquitectura
Façam um alerta para Split Brain e Fencing (STONITH).
Sugestões para futuros artigos de Gluster:
Forçar o Self Heal, comandos de diagnostico, sincronizar uma pasta com ficheiros já existentes, experimentar outros tipos de sync (paridade), mount com Libvirt (NFS), mount com permissões samba, loadbalacing (este não tenho a certeza se é possivel)
Continuem com o bom trabalho 🙂
Uma dúvida. Em caso de falha de um dos servidores já vimos que a informação existente permanece. Isso significa que isto funciona como uma espécie de RAID 1 em rede (adiciono servidores para replicar mas não me aumenta o espaço disponível) ou mais como RAID 5 (adiciono servidores para replicar e também me vai aumentando o espaço disponível)?
Pessoal alguém ai já enfrentou problema trabalhando com Glusterfs em KVM? Estou configurando o mesmo em uma VM na Godaddy, o problema é que consigo fazer a ligação entre os 2 mastres, porem quando vou tentar criar o volume está dando o seguinte erro:
root@www2:~# gluster volume create www replica 2 transport tcp www2:/data/site www1:/data/site force
[2016-10-12 02:56:23.665334] I [MSGID: 106493] [glusterd-rpc-ops.c:696:__glusterd_friend_update_cbk] 0-management: Received ACC from uuid: e31a2037-2829-4ca0-86da-9be29179f12d
[2016-10-12 02:58:47.801929] I [MSGID: 106487] [glusterd-handler.c:1472:__glusterd_handle_cli_list_friends] 0-glusterd: Received cli list req
[2016-10-12 03:00:23.614838] E [MSGID: 106301] [glusterd-syncop.c:1281:gd_stage_op_phase] 0-management: Staging of operation ‘Volume Create’ failed on localhost : Glusterfs is not supported on brick: www2:/data/site.
Setting extended attributes failed, reason: Operation not permitted.
O DNS está batendo corretamente no www2, assim como no www1. Qualquer dica será muito bem vinda.