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.