GlusterFS é um sistema de arquivos para cluster, ou melhor, um sistema de arquivos clusterizável, capaz de escalonar muitos e muitos GigaBytes e distribuí-los via rede, entre vários storages e servidores. Esse sistema de arquivos trabalha na arquitetura de cliente/servidor, onde você precisará ter um ou vários servidores de arquivos e os clientes se conectarão via rede, por padrão na porta 6996.
No GlusterFS você poderá criar várias estratégias para o armazenamento dos dados, sendo possível criar compartilhamentos estilo NFS, criar armazenamento distribuído, armazenamento distribuído+replicado, dentre outros.
Ao meu ver, a configuração mais interessante é o armazenamento distribuído, onde se pode criar vários servidores de arquivos e distribuir os dados para os clientes em apenas um ponto de montagem, ou seja, quando a máquina cliente gravar os dados no diretório (montado via rede), o GlusterFS se encarregará de realizar um "striping" dos dados entres todos os servidores. O conceito seria basicamente de um RAID 0 via rede, onde cada servidor do GlusterFS receberá uma pequena quantidade dos arquivos enviados pelo cliente, maximizando assim a performance de Leitura/Gravação.
Alguém pode estar se questionando, "E se um servidor resolver parar?". Para ambientes críticos poderá utilizar a configuração de armazenamento distribuído + replicado. Para maiores informações, veja o
wiki do GlusterFS.
Instalação
A distribuição
Linux utilizada foi o Ubuntu 8.10, onde todos os pacotes necessários para o GlusterFS já estão disponíveis nos repositórios, e a instalação é muito simples.
Nos servidores:
# apt-get update
# apt-get install glusterfs-server
Nos clientes:
# apt-get update
# apt-get install glusterfs-client
Em ambos (Cliente/Servidor) foi criado um diretório em /etc/glusterfs/ contendo o arquivo de configuração. Eles são "glusterfs-server.vol" para o servidor e "glusterfs-client.vol" para o cliente.
Configuração do servidor
Vamos criar quatro servidores GlusterFS e o arquivo de configuração para todos eles é o mesmo.
# file: /etc/glusterfs/glusterfs-server.vol
##############################################
### GlusterFS Server Volume Specification ##
##############################################
# Exportando o volume "brick" com o conteúdo do diretório /export
volume brick
type storage/posix
option directory /export
end-volume
# Configuração de rede para o volume exportado
volume server
type protocol/server
option transport-type tcp/server
option listen-port 6996
subvolumes brick
option auth.ip.brick.allow *
end-volume
#EOF
Devemos nos atentar na opção "option auth.ip.brick.allow *", pois por default o GlusterFS negará o acesso para todos. Com o parâmetro "*" estamos dizendo para permitir o acesso de qualquer host da rede.
Configuração do cliente
# file: /etc/glusterfs/glusterfs-client.vol
##############################################
### GlusterFS Client Volume Specification ##
##############################################
volume remote1
type protocol/client
option transport-type tcp/client
option remote-host 192.168.1.1
option remote-subvolume brick
end-volume
volume remote2
type protocol/client
option transport-type tcp/client
option remote-host 192.168.1.2
option remote-subvolume brick
end-volume
volume remote3
type protocol/client
option transport-type tcp/client
option remote-host 192.168.1.3
option remote-subvolume brick
end-volume
volume remote4
type protocol/client
option transport-type tcp/client
option remote-host 192.168.1.4
option remote-subvolume brick
end-volume
volume stripe0
type cluster/stripe
option block-size 1MB
subvolumes remote1 remote2 remote3 remote4
end-volume
#EOF
Como podem observar, os arquivos de configurações são bem simples. No cliente fica bem claro que configuramos quatro volumes e em quatro servidores diferentes. Depois criamos um volume chamado stripe0, que é justamente o aglomerado desses quatro volumes.
Utilização
A utilização é bem simples, primeiro precisamos iniciar o daemon no servidor e depois apenas montamos o volume nos clientes.
Servidor:
# glusterfsd -f /etc/glusterfs/glusterfs-server.vol
# ps aux | grep gluster
root 4568 0.0 0.2 19028 1264 ? Ssl 16:23 0:00 [glusterfs]
root 4601 0.0 0.1 3252 812 pts/0 S+ 16:25 0:00 grep gluster
Cliente:
# glusterfs -f /etc/glusterfs/glusterfs-client.vol /mnt
# mount
glusterfs on /mnt type fuse (rw,nosuid,nodev,allow_other,default_permissions,max_read=1048576)
# df -h
glusterfs 7,5G 1,9G 5,7G 25% /mnt
Pronto, agora você pode ter um filesystem clusterizado na sua casa e no seu trabalho. ;-)
André Luiz Facina