Como criar um pool de armazenamento redundante usando GlusterFS em servidores Ubuntu
Status: Obsoleto
Este artigo aborda uma versão do Ubuntu que não é mais suportada. Se você atualmente opera um servidor executando o Ubuntu 12.04, é altamente recomendável atualizar ou migrar para uma versão suportada do Ubuntu:
- Atualize para o Ubuntu 14.04.
- Atualização do Ubuntu 14.04 para o Ubuntu 16.04
- Migre os dados do servidor para uma versão compatível
Razão:
Veja em vez disso:
Introdução
Redundância e alta disponibilidade são necessárias para uma ampla variedade de atividades do servidor. Ter um único ponto de falha em termos de armazenamento de dados é uma configuração muito perigosa para qualquer dado crítico.
Embora muitos bancos de dados e outros softwares permitam distribuir dados no contexto de um único aplicativo, outros sistemas podem operar no nível do sistema de arquivos para garantir que os dados sejam copiados para outro local sempre que forem gravados no disco. Uma solução de armazenamento em cluster como o GlusterFS oferece exatamente essa funcionalidade.
Neste guia, configuraremos um cluster GlusterFS redundante entre duas instâncias Ubuntu 12.04 VPS de 64 bits. Isso funcionará de maneira semelhante a um servidor NAS com RAID espelhado. Em seguida, acessaremos o cluster a partir de um terceiro Ubuntu 12.04 VPS de 64 bits.
Conceitos Gerais
Um ambiente em cluster permite agrupar recursos (geralmente computação ou armazenamento) para permitir que você trate vários computadores como uma unidade única e mais poderosa. Com GlusterFS, podemos agrupar o armazenamento de várias instâncias VPS e acessá-las como se fosse um único servidor.
O GlusterFS permite criar diferentes tipos de configurações de armazenamento, muitas das quais são funcionalmente semelhantes aos níveis de RAID. Por exemplo, você pode distribuir dados em diferentes nós no cluster ou pode implementar redundância para melhor disponibilidade de dados.
Neste guia, criaremos uma matriz de armazenamento em cluster redundante, também conhecida como sistema de arquivos distribuído. Basicamente, isso nos permitirá ter uma funcionalidade semelhante a uma configuração RAID espelhada na rede. Cada servidor independente conterá sua própria cópia dos dados, permitindo que nossos aplicativos acessem qualquer uma das cópias, o que ajudará a distribuir nossa carga de leitura.
Etapas a seguir em cada VPS
Existem algumas etapas que seguiremos em cada instância VPS que estamos usando para este guia. Precisamos configurar a resolução de DNS entre cada host e configurar as fontes de software que usaremos para instalar os pacotes GlusterFS.
Configurar resolução de DNS
Para que nossos diferentes componentes possam se comunicar facilmente, é melhor configurar algum tipo de resolução de nome de host entre cada computador.
Se você tiver um nome de domínio que gostaria de configurar para apontar para cada sistema, siga este guia para configurar nomes de domínio com a DigitalOcean.
Se você não tiver um nome de domínio sobressalente ou se apenas quiser configurar algo de maneira rápida e fácil, poderá editar o arquivo hosts em cada computador.
Abra este arquivo com privilégios de root em seu primeiro computador:
sudo nano /etc/hosts
Você deve ver algo parecido com isto:
127.0.0.1 localhost gluster2
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Abaixo da definição do host local, você deve adicionar o endereço IP de cada VPS seguido pelos nomes longos e curtos que deseja usar para fazer referência a ele.
Deve ficar mais ou menos assim quando terminar:
::1 ip6-localhost ip6-loopback
As partes gluster0.droplet.com
e gluster0
das linhas podem ser alteradas para qualquer nome que você queira usar para acessar cada droplet. Usaremos essas configurações para este guia.
Quando terminar, copie as linhas que você adicionou e adicione-as aos arquivos /etc/hosts
em suas outras instâncias VPS. Cada arquivo /etc/hosts
deve conter as linhas que ligam seus IPs aos nomes que você selecionou.
Salve e feche cada arquivo quando terminar.
Configurar fontes de software
Embora o Ubuntu 12.04 contenha pacotes GlusterFS, eles estão bastante desatualizados, portanto, usaremos a versão estável mais recente no momento em que este livro foi escrito (versão 3.4) do projeto GlusterFS.
Estaremos configurando as fontes de software em todos os computadores que funcionarão como nós em nosso cluster, bem como no computador cliente.
Na verdade, estaremos adicionando um PPA (arquivo de pacote pessoal) que o projeto recomenda para usuários do Ubuntu. Isso nos permitirá gerenciar nossos pacotes com as mesmas ferramentas que outros softwares de sistema.
Primeiro, precisamos instalar o pacote python-software-properties
, que nos permitirá gerenciar PPAs facilmente com o apt:
sudo apt-get update
sudo apt-get install python-software-properties
Depois que as ferramentas PPA estiverem instaladas, podemos adicionar o PPA para os pacotes GlusterFS digitando:
sudo add-apt-repository ppa:semiosis/ubuntu-glusterfs-3.4
Com o PPA adicionado, precisamos atualizar nosso banco de dados de pacotes local para que nosso sistema saiba sobre os novos pacotes disponíveis no PPA:
sudo apt-get update
Repita essas etapas em todas as instâncias VPS que você está usando para este guia.
Instalar componentes do servidor
Neste guia, designaremos nossas duas máquinas como membros do cluster e a terceira como cliente.
Estaremos configurando os computadores que rotulamos como gluster0
e gluster1
como os componentes do cluster. Usaremos gluster2
como cliente.
Em nossas máquinas membros do cluster (gluster0 e gluster1), podemos instalar o pacote do servidor GlusterFS digitando:
sudo apt-get install glusterfs-server
Uma vez instalado em ambos os nós, podemos começar a configurar nosso volume de armazenamento.
Em um dos hosts, precisamos emparelhar com o segundo host. Não importa qual servidor você usa, mas executaremos esses comandos de nosso servidor gluster0 para simplificar:
sudo gluster peer probe gluster1.droplet.com
peer probe: success
Isso significa que o emparelhamento foi bem-sucedido. Podemos verificar se os nós estão se comunicando a qualquer momento digitando:
sudo gluster peer status
Number of Peers: 1
Hostname: gluster1.droplet.com
Port: 24007
Uuid: 7bcba506-3a7a-4c5e-94fa-1aaf83f5729b
State: Peer in Cluster (Connected)
Neste ponto, nossos dois servidores estão se comunicando e podem configurar volumes de armazenamento juntos.
Criar um volume de armazenamento
Agora que temos nosso pool de servidores disponíveis, podemos fazer nosso primeiro volume.
Como estamos interessados em redundância, configuraremos um volume com funcionalidade de réplica. Isso nos permitirá manter várias cópias de nossos dados, evitando um único ponto de falha.
Como queremos uma cópia dos dados em cada um de nossos servidores, definiremos a opção de réplica como \2, que é o número de servidores que temos. A sintaxe geral que usaremos para criar o volume é esta:
O comando exato que executaremos é este:
sudo gluster volume create volume1 replica 2 transport tcp gluster0.droplet.com:/gluster-storage gluster1.droplet.com:/gluster-storage force
volume create: volume1: success: please start the volume to access data
Isso criará um volume chamado volume1
. Ele armazenará os dados deste volume em diretórios em cada host em /gluster-storage
. Se este diretório não existir, ele será criado.
Neste ponto, nosso volume é criado, mas inativo. Podemos iniciar o volume e disponibilizá-lo para uso digitando:
sudo gluster volume start volume1
volume start: volume1: success
Nosso volume deve estar online atualmente.
Instalar e configurar os componentes do cliente
Agora que temos nosso volume configurado, ele está disponível para uso por nossa máquina cliente.
Antes de começarmos, porém, precisamos instalar os pacotes relevantes do PPA que configuramos anteriormente.
Em sua máquina cliente (gluster2 neste exemplo), digite:
sudo apt-get install glusterfs-client
Isso instalará o aplicativo cliente e também instalará as ferramentas do sistema de arquivos fuse necessárias para fornecer a funcionalidade do sistema de arquivos fora do kernel.
Vamos montar nosso volume de armazenamento remoto em nosso computador cliente. Para fazer isso, precisamos criar um ponto de montagem. Tradicionalmente, isso está no diretório /mnt
, mas qualquer lugar conveniente pode ser usado.
Vamos criar um diretório em /storage-pool
:
sudo mkdir /storage-pool
Com esse passo fora do caminho, podemos montar o volume remoto. Para fazer isso, só precisamos usar a seguinte sintaxe:
Observe que estamos usando o nome do volume no comando mount. GlusterFS abstrai os diretórios de armazenamento reais em cada host. Não queremos montar o diretório /gluster-storage
, mas o volume volume1
.
Observe também que só precisamos especificar um membro do cluster de armazenamento.
O comando real que vamos executar é este:
sudo mount -t glusterfs gluster0.droplet.com:/volume1 /storage-pool
Isso deve montar nosso volume. Se usarmos o comando df
, você verá que temos nosso GlusterFS montado no local correto.
Testando os recursos de redundância
Agora que configuramos nosso cliente para usar nosso pool de armazenamento, vamos testar a funcionalidade.
Em nossa máquina cliente (gluster2), podemos digitar isso para adicionar alguns arquivos em nosso diretório de pool de armazenamento:
cd /storage-pool
sudo touch file{1..20}
Isso criará 20 arquivos em nosso pool de armazenamento.
Se observarmos nossos diretórios /gluster-storage
em cada host de armazenamento, veremos que todos esses arquivos estão presentes em cada sistema:
# on gluster0.droplet.com and gluster1.droplet.com
cd /gluster-storage
ls
file1 file10 file11 file12 file13 file14 file15 file16 file17 file18 file19 file2 file20 file3 file4 file5 file6 file7 file8 file9
Como você pode ver, isso gravou os dados de nosso cliente em ambos os nós.
Se houver um ponto em que um dos nós em seu cluster de armazenamento está inativo e as alterações são feitas no sistema de arquivos. Fazer uma operação de leitura no ponto de montagem do cliente depois que o nó voltar a ficar on-line deve alertá-lo para obter os arquivos ausentes:
ls /storage-pool
Restringir o acesso ao volume
Agora que verificamos que nosso pool de armazenamento pode ser montado e replicar dados para ambas as máquinas do cluster, devemos bloquear nosso pool.
Atualmente, qualquer computador pode se conectar ao nosso volume de armazenamento sem nenhuma restrição. Podemos mudar isso definindo uma opção em nosso volume.
Em um de seus nós de armazenamento, digite:
Você terá que substituir o endereço IP do seu cliente de cluster (gluster2) neste comando. Atualmente, pelo menos com a configuração /etc/hosts
, as restrições de nome de domínio não funcionam corretamente. Se você definir uma restrição dessa forma, ela bloqueará todo o tráfego. Em vez disso, você deve usar endereços IP.
Se precisar remover a restrição a qualquer momento, você pode digitar:
sudo gluster volume set volume1 auth.allow *
Isso permitirá conexões de qualquer máquina novamente. Isso não é seguro, mas pode ser útil para depurar problemas.
Se você tiver vários clientes, poderá especificar seus endereços IP ao mesmo tempo, separados por vírgulas:
Obtendo informações com comandos GlusterFS
Quando você começa a alterar algumas das configurações do armazenamento GlusterFS, pode ficar confuso sobre quais opções estão disponíveis, quais volumes estão ativos e quais nós estão associados a cada volume.
Há vários comandos diferentes disponíveis em seus nós para recuperar esses dados e interagir com seu pool de armazenamento.
Se você deseja informações sobre cada um dos seus volumes, digite:
sudo gluster volume info
Volume Name: volume1
Type: Replicate
Volume ID: 3634df4a-90cd-4ef8-9179-3bfa43cca867
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: gluster0.droplet.com:/gluster-storage
Brick2: gluster1.droplet.com:/gluster-storage
Options Reconfigured:
auth.allow: 111.111.1.11
Da mesma forma, para obter informações sobre os pares aos quais este nó está conectado, você pode digitar:
sudo gluster peer status
Number of Peers: 1
Hostname: gluster0.droplet.com
Port: 24007
Uuid: 6f30f38e-b47d-4df1-b106-f33dfd18b265
State: Peer in Cluster (Connected)
Se você deseja informações detalhadas sobre o desempenho de cada nó, pode criar o perfil de um volume digitando:
Quando este comando for concluído, você poderá obter as informações coletadas digitando:
sudo gluster perfil de volume volume_name info Bloco: gluster1.droplet.com:/gluster-storage
Estatísticas cumulativas:
0.00 0.00 us 0.00 us 0.00 us 20 RELEASE
0.00 0.00 us 0.00 us 0.00 us 6 RELEASEDIR
10.80 113.00 us 113.00 us 113.00 us 1 GETXATTR
28.68 150.00 us 139.00 us 161.00 us 2 STATFS
60.52 158.25 us 117.00 us 226.00 us 4 LOOKUP
Duration: 8629 seconds
Dados lidos: 0 bytes
Você receberá muitas informações sobre cada nó com este comando.
Para obter uma lista de todos os componentes associados ao GlusterFS em execução em cada um de seus nós, você pode digitar:
sudo gluster volume status
Status of volume: volume1
Gluster process Port Online Pid
------------------------------------------------------------------------------
Brick gluster0.droplet.com:/gluster-storage 49152 Y 2808
Brick gluster1.droplet.com:/gluster-storage 49152 Y 2741
NFS Server on localhost 2049 Y 3271
Self-heal Daemon on localhost N/A Y 2758
NFS Server on gluster0.droplet.com 2049 Y 3211
Self-heal Daemon on gluster0.droplet.com N/A Y 2825
There are no active volume tasks
Se você estiver administrando seus volumes de armazenamento GlusterFS, pode ser uma boa ideia entrar no console GlusterFS. Isso permitirá que você interaja com seu ambiente GlusterFS sem precisar digitar sudo gluster
antes de tudo:
sudo gluster
Isso lhe dará um prompt onde você pode digitar seus comandos. Esta é uma boa para se orientar:
help
Quando terminar, saia assim:
exit
Conclusão
Neste ponto, você deve ter um sistema de armazenamento redundante que nos permitirá gravar em dois servidores separados simultaneamente. Isso pode ser útil para um grande número de aplicativos e pode garantir que nossos dados estejam disponíveis mesmo quando um servidor cair.