top of page

GlusterFS como sistema de arquivos distribuído


O GlusterFS é um sistema de arquivos de rede escalável. Utilizando hardware comum, é possível criar um sistema de armazenamento de dados grande, distribuído e que suporte grandes quantides de transferências de dados. O GlusterFS é software livre.

O GlusterFS é um software utilizado para gerenciar armazenamentos em cluster[1]. Pode ser utilizado por empresas que requerem confiabilidade, alta disponibilidade de dados e facilidade no gerenciamento de storages[2] distribuídos. Com gluster, montar uma estrutura de armazenamento utilizando servidores distintos se torna fácil. Utilizando comandos simples é possível distribuir, replicar, ou até mesmo rebalancear a carga no armazenamento.

O GlusterFS trabalha com volumes, onde os mais comuns são os replicados e distribuídos. Existem variações destes tipos, o que adiciona mais flexibilidade na hora de implementar um sistema de acordo com a necessidade.

Em volumes distribuídos, o GlusterFS distribui os arquivos em diversos servidores. Num sistema que opera com esse tipo de configuração, caso um servidor falhe, haverá perda parcial das informações, e o sistema continuará operando. Em volumes replicados, o gluster faz uma réplica do volume de cada "brick" em um servidor denominado "replica". Caso ocorra alguma falha nos bricks, as informações são mantidas, porém a falha do servidor réplica deixa o sistema vulnerável à perda de informações.

O GlusterFS trabalha da seguinte forma:

  • GlusterFS seleciona um volume, e envia um pedido utilizando uma chave hash do nome do arquivo.

  • Se for um volume replicado, o pedido é encaminhado para cada subvolume da réplica do cluster, todos os servidores devem responder. Essa resposta informa se o arquivo foi encontrado, ou se possuem pendências no servidor, tais como incompatibilidade, ou caso uma operação de "Self Heal [3]" seja necessária para restauração dos arquivos.

  • Caso o arquivo apontado pelo hash não exista (caso tenha sido renomeado) os mesmos passos devem ser feitos para todos subvolumes [4].

  • Se o arquivo for encontrado, é criado um arquivo de ligação entre o subvolume e o arquivo, apontando para o lugar onde realmente ele se encontra, isso fará com que encontrá-lo seja mais rápido da próxima vez.

Para o equipamento que faz acesso ao volume GlusterFS, ao ler muitos arquivos pequenos o cliente NFS terá um desempenho melhor. Porém, se a carga de trabalho é a escrita, o cliente nativo terá um desempenho melhor. Na próxima seção há uma série de resultados dos testes realizados, deixando isto mais claro.

Para a conclusão dos resultados que serão mostrados foram feitos diversos testes individuais. Ao final de cada bateria de testes individuais foram calculados a média e a variação dos resultados.

Antes descreverei brevemente o procedimento adotado para a conclusão desses resultados. Foram simulados diferentes ambientes de testes, utilizando servidores físicos (3 no total) com um volume distribuído pelo gluster. Foi feita uma recarga do sistema operacional após a conclusão de cada teste, a fim de evitar a leitura de dados armazenado em memória cache [5].

Para os testes foram utilizadas as ferramentas iperf e hdparm (ambas disponíveis para instalação nas distribuições Debian e Red Hat através do apt-get ou yum). O objetivo da instalação dessas ferramentas é verificar se haveria algum tipo de limitação em nível de hardware que impediss resultados consistentes. A rede disponível para a realização dos testes foi de 100 Mbps.

Testes de bandwidth[6] com o iperf

O procedimento de testes de conexão foi feito em cada servidor, e todos se mantiveram a uma taxa média de 98 a 99Mbps, compatível com a rede de 100Mbps.

O software transmite uma determinada quantidade de dados entre o cliente e o servidor, e calcula a taxa de transferência para determinar a largura de banda.

Comandos utilizados:

iperf -s (executado no servidor, que por sua vez fica aguardando uma conexão).

Iperf -c <server> (executado no cliente passando como parâmetro um servidor)

Testes de leitura de disco com hdparm

O hdparm é um software para realização de benchmark [7] de leitura e escrita de discos rígidos. O procedimento, assim como o anterior, também foi realizado individualmente. Ele oferece a opção para teste de leitura de cache, porém esse não é o foco nesse momento. O procedimento para verificar a velocidade de leitura é simples, o resultado pode ser obtido com apenas um comando, como segue abaixo. hdparm -t /dev/sda

Testes de transferência de arquivos

O primeiro passo foi determinar a velocidade de transferência dentro da própria máquina. O teste foi feito individualmente.

Neste ponto foram realizados testes de transferência de arquivos entre servidor e cliente. Para realizar tal procedimento foi utilizada uma ferramenta para monitoramento chamada pv disponível para download via rpm.

Foram utilizados milhares de arquivos pequenos, divididos em arquivos de 100k de tamanho, somando um total de 3Gb de arquivos.

Para evitar gargalos causados pela escrita durante a transferência, foi utilizada uma técnica que redireciona a saída para um arquivo chamado como null no Linux (/dev/null), onde a escrita em disco não é feita.

Comandos utilizados:

pv -pta folder_files/* > /dev/null

Abaixo segue resultado dos testes por ambiente.

Conclusão

O gluster demonstrou ser um sistema sólido, cumpriu o que já era esperado, oferecendo um sistema que garante a disponibilidade dos seus recursos,. Mesmo com a ocorrência de falhas causadas propositalmente, todo o esquema de storages continuou operando. O único problema perceptível foi o pequeno delay [8], que ocorre quando o servidor principal perde a conexão com o cliente. Isso pode ser corrigido, diminuindo o tempo de time out no processo de montagem do volume.

De um modo geral, gluster se saiu bem, embora ainda esteja em desenvolvimento. A facilidade de expansão do sistema é extremamente simples, isso é uma qualidade notável, principalmente para empresas que expandem seu armazenamento em um curto espaço de tempo.

Durante os testes foi possível perceber uma tendência de diminuição da taxa de throughput com o aumento dos servidores em cluster e com o aumento da quantide de clientes simultâneos. Entretanto, a real extensão dessa diminuição de desempenho não pôde ser totalmente mensurada, e deve ser objeto de estudos futuros.

A diversidade de protocolos para conexão fornece flexibilidade ao administrador de sistemas. Mesmo não sendo um dos mais velozes sistemas de distribuição, o sistema GlusterFS mostrou ser um forte concorrente nesse crescente mercado de sistemas distribuídos.

Instalação e criação de volumes

Foram utilizados os seguintes passos para instalação do glusterfs-server utilizando o sistema operacional CentOS 7. 1. Atualizar o sistema

yum update 2. Desativar o firewall

systemctl stop firewalld systemctl disable firewalld 3. Instalar o glusterfs

yum install -y epel-release wget -P /etc/yum.repos.d http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/glusterfs-epel.repo yum -y install glusterfs-server 4. Iniciar o serviço do gluster

systemctl start glusterd systemctl enable glusterd 5. Criar o volume distribuido

gluster volume create vol_name server1:/path server2:/path force 5.2 Configurar as permissões do volume

gluster volume set vol_name auth.allow 192.168.1.* (Permitir conexão da rede 192.168.1.0) gluster volume start vol_name (Inicia o volume) 6. Instalar o NFS

yum -y install nfs-utils systemctl start rpcbind nfs-server 6.1 Configurar o serviço de RPC

cp /usr/lib/systemd/system/rpcbind.service /etc/systemd/system/ editar /etc/systemd/system/rpcbind.service e remover a opção "-w" systemctl daemon-reload systemctl restart rpcbind.service systemctl restart glusterd.service Instalação do cliente e montagem dos volumes

Para a instalação e configuração da versão cliente do gluster foi utilizado o procedimento abaixo. 1. Instalação do cliente no CentOS 7

yum -y install glusterfs glusterfs-fuse 2. Instalação do cliente no Ubuntu 14.04 LTS

Adicionar as seguintes linhas no arquivo do source list (/etc/apt/source.list)

deb http://ppa.launchpad.net/gluster/glusterfs-3.6/ubuntu trusty main deb-src http://ppa.launchpad.net/gluster/glusterfs-3.6/ubuntu trusty main 2.1 Adicionar chave de registro para o repositório do glusterfs

gpg --keyserver subkeys.pgp.net --recv 3FE869A9 gpg --export --armor 3FE869A9 | sudo apt-key add 2.2. Instalação do cliente

apt-get install glusterfs-client Montagem dos volumes no cliente

Para a montagem do sistema de arquivos forma seguidos os procedimentos a seguir.

1. Utilizando o protocolo glusterfs

mount -t glusterfs server1:/vol_name /mount_path 2. Para o protocolo NFS do kernel, adicionar a seguinte linha no arquivo export. Encontrado no caminho /etc/exports.

/path *(rw,sync,no_subtree_check,no_root_squash) 2.1 Utilizando o protocolo NFS mount -o mountproto=tcp,vers=3 -t nfs server1:/vol_name /mount_path

Obs: É recomendado utilizar a versão 3 do protocolo NFS. Isso pode ser feito passando o parâmetro direto no comando de montagem, ou através de arquivo de configuração. 2.2 Adicionar a versão 3 como padrão para montagem no arquivo /etc/nfsmount.conf

nfsvers=3

[1] Cluster é um sistema que relaciona dois ou mais computadores para que estes trabalhem de maneira conjunta

[2] Storages são dispositivos projetados especificamente para armazenamento de dados

[3] Self Heal é uma técnica utilizada para recuperar dados de um servidor que voltou à operar

[4] Subvolumes são volumes criados nas máquinas que serão gerenciadas por um volume único, chamado de Unified Global Namespace, que virtualiza e centraliza os volumes em um único volume compartilhado.

[5] Memória cache é uma pequena quantidade de memória de alto desempenho localizada próxima ao processador

[6] Bandwidth é a capacidade de transmissão de dados de uma conexão

[7] Benchmark é a ação de comparar performance e desempenho relativo de um objeto ou produto por meio da execução de um programa de computador

[8] Delay é o termo técnico usado para designar o retardo de sinais em circuitos eléctronicos

Posts Em Destaque
Posts Recentes
Arquivo
Procurar por tags
Siga
  • Facebook Basic Square
  • Twitter Basic Square
RSS
RSS Feed
bottom of page