Glusterfs – Armazenamento distribuído e de alta disponibilidade

12 Comentários

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!

glusterfs_18


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

Glusterfs_00

Passo 2 – Mudar o nome da cada máquina de acordo com a configuração anterior.

nano /etc/hostname

Glusterfs_01

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

Glusterfs_02

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

Glusterfs_03

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

Glusterfs_04

ifconfig enp0s3 192.168.1.162/24

Glusterfs_05

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  servidor2
gluster peer status

Após estes comandos deverão obter o seguinte resultado:

Glusterfs_06

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

Glusterfs_07

 Inicializar o volume criado no passo anterior:

gluster volume start pplware

Glusterfs_078

Para verificar que a volume foi bem iniciado e que a ligação está estabelecida podemos usar o seguinte comando:

netstat -tap | grep glusterfsd

Glusterfs_09

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:

Glusterfs_10

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

Glusterfs_11

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

Glusterfs_12

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

Glusterfs_13

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

Glusterfs_14

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

Glusterfs_15

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

glusterfs_16

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

glusterfs_17

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.

Partilhar:

Comentários

12

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de André
    André

    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,

    1. Avatar de Rudi
      Rudi

      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.

  2. Avatar de Bota gel
    Bota gel

    Grande artigo. À Pedro Pinto.

    1. Avatar de Pedro Pinto

      Este o mérito é do Pedro Lopes . Eu só dei a ideia 😀

  3. Avatar de Adao Santos
    Adao Santos

    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.

    1. Avatar de Pedro Lopes
      Pedro Lopes

      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

  4. Avatar de Notliz
    Notliz

    Favoritado. Nice artigo!

  5. Avatar de g0tH1c.X
    g0tH1c.X

    Bom artigo 🙂

  6. Avatar de 4knahs
    4knahs

    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)

  7. Avatar de Rudi
    Rudi

    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 🙂

  8. Avatar de Edexote
    Edexote

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

  9. Avatar de Tácio Andrade
    Tácio Andrade

    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.