Diego Adalberto Martins Santana
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 quantidades de transferências de dados. O GlusterFS é software livre.
O objetivo deste artigo é descrever a montagem de uma estrutura utilizando esse sistema de arquivos, e verificar como é o desempenho no uso de cliente nativo, de NFS ou quando há aumento na quantidade de servidores ou estações em uso simultâneo.
O
GlusterFS é um software utilizado para gerenciar armazenamentos em
cluster, sistemas que relaciona dois ou mais computadores para que estes trabalhem de maneira conjunta. Pode ser utilizado por empresas que requerem confiabilidade,
alta disponibilidade de dados e facilidade no gerenciamento de sistemas de armazenamento distribuídos. Com o GlusterFS, 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 [1]" 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 [2].
- 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
[3].
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[4] 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 [5] 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 GlusterFS 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 [6], 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, o GlusterFS 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
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] Self Heal é uma técnica utilizada para recuperar dados de um servidor que voltou à operar
[2] 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.
[3] Memória cache é uma pequena quantidade de memória de alto desempenho localizada próxima ao processador
[4] Bandwidth é a capacidade de transmissão de dados de uma conexão
[5]
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
[6] Delay é o termo técnico usado para designar o retardo de sinais em circuitos eléctronicos
Nenhum comentário:
Postar um comentário