Pesquisa de site

Configuração de servidor de armazenamento de alta disponibilidade usando GlusterFS


12 de março de 2013 por Lubos Rendek

Esteja você administrando uma pequena rede doméstica ou uma rede corporativa de uma grande empresa, o armazenamento de dados é sempre uma preocupação. Pode ser em termos de falta de espaço em disco ou solução de backup ineficiente. Em ambos os casos, o GlusterFS pode ser a ferramenta certa para resolver seu problema, pois permite dimensionar seus recursos tanto horizontal quanto verticalmente. Neste guia iremos configurar o armazenamento de dados distribuídos e replicados/espelho. Como o nome sugere, o modo de armazenamento distribuído do GlusterFS permitirá que você redistribua uniformemente seus dados em vários nós da rede, enquanto um modo replicado garantirá que todos os seus dados sejam espelhados em todos os nós da rede.

Depois de ler a introdução você já deve ter uma boa ideia do que é GlusterFS. Você pode pensar nisso como um serviço de agregação para todo o espaço vazio em disco em toda a rede. Ele conecta todos os nós com instalação do GlusterFS sobre TCP ou RDMA criando um único recurso de armazenamento combinando todo o espaço em disco disponível em um único volume de armazenamento (modo distribuído) ou usa o máximo de espaço em disco disponível em todas as notas para espelhar seus dados (modo replicado). Portanto, cada volume consiste em vários nós, que na terminologia do GlusterFS são chamados de tijolos.

Embora o GlusterFS possa ser instalado e usado em qualquer distribuição Linux, este artigo usará principalmente o Ubuntu Linux. No entanto, você poderá usar este guia em qualquer distribuição Linux como RedHat, Fedora, SuSe, etc. A única parte que será diferente será o processo de instalação do GlusterFS.

Além disso, este guia usará três exemplos de nomes de host:

  • storage.server1 – servidor de armazenamento GlusterFS

  • storage.server2 – servidor de armazenamento GlusterFS

  • storage.client – cliente de armazenamento GlusterFS

Use o servidor DNS ou o arquivo /etc/hosts para definir seus nomes de host e ajustar seu cenário a este guia.

O servidor GlusterFS precisa ser instalado em todos os hosts que você deseja adicionar ao seu volume de armazenamento final. No nosso caso será storage.server1 e storage.server2. Você pode usar o GlusterFS como um servidor único e uma conexão de cliente para atuar como um servidor NFS. No entanto, o verdadeiro valor do GlusterFS é usar vários hosts de servidor para agir como um só. Use o seguinte comando Linux em ambos os servidores para instalar o servidor GlusterFS:

storage.server1 $ sudo apt-get install glusterfs-server

e

storage.server2 $ sudo apt-get install glusterfs-server

Os comandos acima irão instalar e iniciar o glusterfs-server em ambos os sistemas. Confirme se ambos os servidores estão funcionando com:

$ sudo service glusterfs-server status

Configuração de armazenamento distribuído

Primeiro criaremos um volume distribuído GlusterFS. No modo distribuído, o GlusterFS distribuirá uniformemente todos os dados por todos os blocos conectados. Por exemplo, se os clientes gravarem arquivos arquivo1, arquivo2, arquivo3 e arquivo4 em um diretório montado no GlusterFS, então server.storage1 conterá arquivo1 e arquivo2 e server.storage2 obterá arquivo3 e arquivo4. Este cenário é ilustrado usando o diagrama abaixo.

Sonda de pares

Primeiro, precisamos fazer com que ambos os servidores GlusterFS se comuniquem, o que significa que estamos efetivamente criando um pool de servidores confiáveis.

storage.server1 $ sudo gluster peer probe storage.server2
Probe successful

O comando acima adicionará storage.server2 a um pool de servidores confiáveis. Essas configurações são replicadas em qualquer servidor conectado, portanto você não precisa executar o comando acima em outros servidores. Até agora, ambos os servidores terão o arquivo de configuração de peer disponível semelhante ao abaixo:

$ cat /etc/glusterd/peers/951b8732-42f0-42e1-a32f-0e1c4baec4f1 
uuid=951b8732-42f0-42e1-a32f-0e1c4baec4f1
state=3
hostname1=storage.server2

Criar volume de armazenamento

A seguir, podemos usar ambos os servidores para definir um novo volume de armazenamento composto por dois blocos, um para cada servidor.

storage.server1 $ sudo gluster volume create dist-vol storage.server1:/dist-data \
storage.server2:/dist-data
Creation of volume dist-vol has been successful. Please start the volume to access data.

O comando acima criou um novo volume chamado dist-vol composto por dois blocos. Se o diretório /dist-data não existir, ele também será criado em ambos os servidores pelo comando acima. Como já foi mencionado anteriormente, você pode adicionar apenas um tijolo ao volume e assim fazer com que o servidor ClusterFS atue como um servidor NFS. Você pode verificar se o seu novo volume foi criado por:

$ sudo gluster volume info dist-vol

Volume Name: dist-vol
Type: Distribute
Status: Created
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: storage.server1:/dist-data
Brick2: storage.server2:/dist-data

Iniciar volume de armazenamento

Agora estamos prontos para iniciar seu novo volume:

storage.server1 $ sudo gluster volume start dist-vol
Starting volume dist-vol has been successful
storage.server1 $ sudo gluster volume info dist-vol

Volume Name: dist-vol
Type: Distribute
Status: Started
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: storage.server1:/dist-data
Brick2: storage.server2:/dist-data

Isto conclui uma configuração do servidor de dados GlusterFS no modo distribuído. O resultado final deve ser um novo volume distribuído denominado dist-vol composto por dois blocos.

Configurando cliente

Agora que criamos um novo volume GlusterFS, podemos usar o cliente GlusterFS para montar esse volume em qualquer host. Faça login no host do cliente e instale o cliente GlusteFS:

storage.client $ sudo apt-get install glusterfs-client

Em seguida, crie um ponto de montagem no qual você montará seu novo volume dist-vol GlusterFS, por exemplo export-dist:

storage.client $ sudo mkdir /export-dist

Agora podemos montar o volume dist-vol GlusterFS com o comando mount:

storage.client $ sudo mount -t glusterfs storage.server1:dist-vol /export-dist

Todos gritem, estejam prontos. Use o comando mount para ver se você montou o volume GlusterFS corretamente:

$ mount | grep glusterf

Testando a configuração distribuída do GlusterFS

Está tudo pronto para que possamos iniciar alguns testes. No lado do cliente, crie 4 arquivos no diretório montado do GlusterFS:

storage.client $ touch /export-dist/file1 file2 file3 file4

O GlusterFS agora pegará todos os arquivos e os redistribuirá uniformemente entre todos os blocos no volume dist-vol. Portanto, storage.server1 conterá:

storage.server1 $ ls /dist-data/
file3 file4

e storage.server2 conterá:

storage.server2 $ ls /dist-data
file1 file2

É claro que seus resultados podem ser diferentes.

Configuração de armazenamento replicado

O procedimento de criação de um volume GlusterFS replicado é semelhante ao volume distribuído explicado anteriormente. Na verdade, a única diferença é a forma como o volume ClusterFS é criado. Mas vamos de novo desde o início:

Sonda de pares

Primeiro, precisamos fazer com que ambos os servidores GlusterFS se comuniquem, o que significa que estamos efetivamente criando um pool de servidores confiáveis.

storage.server1 $ sudo gluster peer probe storage.server2
Probe successful

Se isso já estiver feito, você pode pular esta etapa.

Criar volume de armazenamento

Nesta etapa, precisamos criar um volume de réplica.

$ sudo gluster volume create repl-vol replica 2 \ 
storage.server1:/repl-data storage.server2:/repl-data
Creation of volume repl-vol has been successful. Please start the volume to access data.

A tradução básica do comando acima poderia ser a criação de um volume replicado (replica) chamado repl-vol. O número 2 no comando indica a contagem de faixas, o que significa que ao expandir este volume precisamos sempre somar o número de tijolos igual ao múltiplo da contagem de faixas de volume (2, 4, 8 16 etc.).

Iniciar volume de armazenamento

É hora de iniciar nosso novo volume replicado:

$ sudo gluster volume start repl-vol
Starting volume repl-vol has been successful

Verifique o status:

storage.server1 $ sudo gluster volume info repl-vol

Volume Name: repl-vol
Type: Replicate
Status: Started
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: storage.server1:/repl-data
Brick2: storage.server2:/repl-data

Configurando cliente

A configuração do cliente é a mesma da configuração do cliente para a montagem do volume distribuído.

Instale o cliente:

storage.client $ sudo apt-get install glusterfs-client

Crie um ponto de montagem:

storage.client $ sudo mkdir /export-repl

Monte o volume repl-vol GlusterFS com o comando mount:

storage.client $ sudo mount -t glusterfs storage.server1:repl-vol /export-repl

Todos gritem: agora estejam prontos. Use o comando mount para ver se você montou o volume GlusterFS corretamente:

$ mount | grep glusterf

Testando a configuração replicada do GlusterFS

O objetivo do volume GlusterFS replicado é que os dados serão espelhados perfeitamente em todos os nós. Assim, ao criar arquivos em /export-repl/

$ touch /export-repl/file1 file2 file3 file4

todos os arquivos estarão disponíveis em ambos os servidores:

storage.server1 $ ls /repl-data/
file1 file2 file3 file4

e

storage.server2 $ ls /repl-data/
file1 file2 file3 file4

Caso você precise ampliar seu armazenamento de dados para incluir blocos adicionais, o processo é simples:

$ sudo gluster volume add-brick rep-vol storage.server3:/repl-vol storage.server4:repl-vol /export-repl

Isso adicionará mais dois blocos de armazenamento ao seu repl-vol. Depois de adicionar novos tijolos, pode ser necessário reequilibrar todo o volume com:

$ sudo gluster volume rebalance repl-vol  fix-layout start

e sincronizar/migrar todos os dados com:

$ sudo gluster volume rebalance repl-vol  migrate-data start

Além disso, você pode verificar o progresso do reequilíbrio com

$ sudo gluster volume rebalance vol0 status

Além da configuração acima, você pode tornar todo o volume mais seguro, permitindo que apenas determinados hosts ingressem no pool de confiança. Por exemplo, se quisermos que apenas o host com 10.1.1.10 possa participar do volume repl-vol, usamos o seguinte comando do Linux:

$ sudo gluster volume set repl-vol auth.allow 10.1.1.10

Caso precisemos de toda a sub-rede basta usar asterisco:

$ sudo gluster volume set repl-vol auth.allow 10.1.1.*

GlusterFS é um poderoso software licenciado GPL3. Também é possível usá-lo como um software RAID 1 rápido, definindo dois blocos de dispositivos físicos separados em um único host no volume GlusterFS replicado. É claro que seria melhor usar o ataque de software para esse trabalho, mas ainda assim a possibilidade existe. Achei o GlusterFS fácil de usar e configurar.

Aqui vou apenas listar alguns erros e respostas que encontrei ao jogar com GlusterFS:

Número incorreto de tijolos

Incorrect number of bricks supplied 1 for type REPLICATE with count 2

Se você criou um volume com contagem de listras 2, precisará adicionar pelo menos 2 tijolos adicionais naquele momento.

Host storage.server1 não é um amigo

Host storage.server1 not a friend

Primeiro adicione o servidor GlusterFS ao pool confiável antes de tentar incluí-lo no volume.

Artigos relacionados: