Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Replicando e distribuindo armazenamento de arquivos através de quatro servidores usando Cluster (GlusterFs) no Debian Lenny

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Artigo Replicando e distribuindo armazenamento de arquivos através de quatro servidores usando Cluster (GlusterFs) no Debian Lenny

    Este artigo mostra como montar passo-a-passo um cluster com quatro servidores para distribuição de arquivos com alta disponibilidade usando GlusterFS no Debian Lenny.
    Por: Rodrigo Bonicenha Ferreira

    Introdução

    Este tutorial mostra como combinar quatro servidores de armazenamento (Debian Lenny) para distribuição e replicação usando GlusterFS. Os nós 1 e 2 (replicação), assim como 3 e 4 (replicação) realizarão o espelhamento entre si, já a replicação1 e a replicação2 combinarão entre si para formar um grande servidor de armazenamento (distribuição).

    Basicamente este é o RAID 1+0 ou 0+1 ou 10 (como achar melhor), sobre o padrão ethernet.

    Se você perder um servidor da replicação1 e um da replicação2, a distribuição dos volumes continua trabalhando normalmente.

    O sistema cliente (Debian Lenny) irá acessar o armazenamento como se ele tivesse acessando um volume local (file system) sem sentir a perda de qualquer um dos servidores. O GlusterFS é um cluster capaz de escalar diversos petabytes de armazenamento. Isso agregado a vários blocos de armazenamento sobre uma infinita interconexão TCP/IP dentro de um grande sistema de arquivos em rede rodando em paralelismo. Estes armazenamentos em blocos podem ser feitos com hardware usando arquitetura X86-64 e com SATA-II RAID.

    P.S. 1: O autor deste artigo não fornece nenhuma garantia que este artigo irá funcionar com você!

    P.S. 2: Eu, mero aprendiz neste maravilhoso mundo Linux, segui todos os passos e comigo funcionou perfeitamente.

    O que temos que saber antes de começar?
    Este tutorial usou cinco sistemas, quatro servidores e um cliente, todos usando Linux (Debian Lenny):

    * server1.exemplo.com.br: IP address 192.168.0.100 (server)
    * server2.exemplo.com.br: IP address 192.168.0.101 (server)
    * server3.exemplo.com.br: IP address 192.168.0.102 (server)
    * server4.exemplo.com.br: IP address 192.168.0.103 (server)
    * cliente1.exemplo.com.br: IP address 192.168.0.104 (cliente)


    Todos os cinco sistemas deverão estar resolvendo/comunicando entre si. Se você não conseguir fazer isso através do DNS, deverá editar o arquivo /etc/hosts para que os sistemas consigam se comunicar.

    Caso você não esteja conseguindo fazer o mesmo, aqui vai uma ajudinha para desenferrujar sua memória...

    Abra o arquivo /etc/hosts com o VI ou qualquer editor de sua preferência e siga os passos abaixo:

    # vi /etc/hosts
    Código:
    127.0.0.1        localhost.localdomain   localhost
    192.168.0.100    server1.exemplo.com     server1
    192.168.0.101    server2.exemplo.com     server2
    192.168.0.102    server3.exemplo.com     server3
    192.168.0.103    server4.exemplo.com     server4
    192.168.0.104    cliente1.exemplo.com    cliente1
    
    # As seguintes linhas são desejáveis para hosts Ipv6
    ::1 localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    ff02::3 ip6-allhosts
    Após digitar as linhas acima, salve e saia do arquivo /etc/hosts.

    P.S. 3: Senhores, notem que também é possível usar o endereçamento IP ao invés de hostnames, lembrem-se, somos livres!!! Se você preferir usar o endereçamento IP, não precisará ter cuidado para que os computadores possam ser resolvidos por nome, pois serão resolvidos somente por IP, para isso teremos que simplesmente apontar os endereços IPs quando for a hora de configurar o GlusterFS nos servidores.

    Metendo a mão na massa - Configurando os servidores

    Metendo a mão na massa - Configurando os servidores
    Agora configuraremos os servidores GlusterFS (realize os passos abaixo em todos os servidores).

    O GlusterFS não está disponível como um pacote Debian (já se encontra sim, porém achei melhor baixar e instalar seguindo fielmente o artigo original), consequentemente teremos que instalar o mesmo na mão.

    Primeiro instalaremos os pré-requisitos:

    # aptitude install sshfs build-essential flex bison byacc libdb4.6 libdb4.6-dev


    Após instalar os pré-requisitos faremos o download da última versão do GlusterFS (Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...) a partir do link que vos segue como veremos nos passos abaixo:

    # cd /tmp
    # wget Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
    # tar -xvfz glusterfs-2.0.2.tar.gz
    # cd glusterfs-2.0.2
    # ./configure --prefix=/usr > /dev/null


    No shell, após realizar os comandos acima, digite o comando abaixo e verá a saída que segue:

    # ./configure --prefix=/usr > /dev/null


    GlusterFs configure summary
    = = = = = = = = = = = = = = =
    Fuse client : no
    Infiniband verbs : no
    epoll IO multiplex : yes
    Berkeley-DB : yes
    libglusterfsclient : yes
    mod_glusterfs : no ()
    argp-standalone : no

    Agora, ainda dentro de /tmp/gluterfs-2.0.2:

    # make && make install
    # ldconfig


    Após isso rode o comando:

    # glusterfs --version


    A saída do comando acima irá lhe mostrar a versão que você instalou, deve ficar igual abaixo (neste caso 2.0.2):

    # glusterfs --version

    glusterfs 2.0.2 built on JULY 29 2009 17:23:10
    Repository revision: 5c1d9108c1529a1155963cb1911f8870a674ab5b
    Copyright (c) 2006-2009 Z RESEARCH Inc. <http://www.zresearch.com>
    GlusterFS comes with ABSOLUTELY NO WARRANTY.
    You may redistribute copies of GlusterFS under the terms of the GNU General Public License.

    Agora criaremos alguns diretórios:

    # mkdir /data/
    # mkdir /data/export
    # mkdir /data/export-ns
    # mkdir /etc/glusterfs


    Agora criaremos o arquivo de configuração do servidor GlusterFS em /etc/glusterfsd.vol, pois é este arquivo que define qual diretório será exportado (/data/export) e qual cliente poderá conectar.

    Em nosso exemplo usamos o 192.168.0.104 = cliente1.exemplo.com.br, lembra-se?

    # vi /etc/glusterfs/glusterfsd.vol

    Código:
    volume posix
       type storage/posix
       option directory /data/export
    end-volume
    
    volume locks
       type features/locks
       subvolumes posix
    end-volume
    
    volume brick
       type performance/io-threads
       option thread-count 8
       subvolumes locks
    end-volume
    
    volume server
       type protocol/server
       option transport-type tcp
       option auth.addr.brick.allow 192.168.0.104
       subvolumes brick
    end-volume
    Salve e saia do arquivo de configuração /etc/glusterfsd.vol.

    Por favor, note que é possível usar uma gama infinita de endereços IP fazendo o permissionamento usando toda uma faixa de endereços IP, por exemplo, 192.168.* fará com que toda a rede 192.168.X.X acesse o volume. Você também pode usar a vírgula para separar diversos endereços IP, por exemplo: 192.168.0.120, 192.168.0.121, 192.168.0.122.

    Lembrem-se que aqui neste artigo está sendo mostrado como implementar um servidor CLUSTER para garantir alta disponibilidade de arquivos e não para visar 100% de segurança, para isso devemos usar outros meios.

    Após as configurações acima devemos criar os links para inicialização do script nos servidores com o comando que segue abaixo:

    # update-rc.d glusterfsd defaults

    Após atualizar o update-rc, damos início ao script glusterfsd:

    # /etc/init.d/glusterfsd start

    Pronto, a primeira parte está feita!

    Instalando e configurando o GlusterFS na estação cliente


    Iremos agora configurar o cliente GlusterFS, em nosso caso no cliente1.exemplo.com.br.

    Na estação cliente precisamos instalar o fuse e o GlusterFS. Ao invés de instalar o pacote libfuse2 a partir do repositório do Debian, instalaremos a versão que tem um melhor suporte para GlusterFS.

    Primeiro instalamos os pré-requisitos novamente:

    # aptitude install sshfs build-essential flex bison byacc libdb4.6 libdb4.6-dev


    Então agora pegaremos a última versão do fuse em:

    * Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...


    Entremos através do shell no diretório tmp para fazermos o que segue acima:

    # cd /tmp
    # wget Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
    # tar -zxvf fuse-2.7.4glfs11.tar.gz
    # cd fuse-2.7.4glfs11
    # ./configure
    # make && make install


    Depois baixaremos e instalaremos o GlusterFS (igual fizemos no servidor):

    # cd /tmp/
    # wget Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
    # tar -xvfz glusterfs-2.0.2.tar.gz
    # cd glusterfs-2.0.2
    # ./configure --prefix=/usr > /dev/null
    # make && make install
    # ldconfig


    # glusterfs - -version


    Agora criaremos dois diretórios (lembre-se que estamos agora na máquina cliente):

    # mkdir /mnt/glustersfs
    # mkdir /etc/glusterfs

    Agora criaremos o arquivo /etc/glusterfs/glusterfs.vol:

    # vi /etc/glusterfs/glusterfs.vol

    Código:
    volume remote1
      type protocol/client
      option transport-type tcp
      option remote-host server1.exemplo.com
      option remote-subvolume brick
    end-volume
    
    volume remote2
      type protocol/client
      option transport-type tcp
      option remote-host server2.exemplo.com
      option remote-subvolume brick
    end-volume
    
    volume remote3
      type protocol/client
      option transport-type tcp
      option remote-host server3.exemplo.com
      option remote-subvolume brick
    end-volume
    
    volume remote4
      type protocol/client
      option transporte-type tcp
      option remote-host server4.exemplo.com
      option remote-subvolume brick
    end-volume
    
    volume replicate1
      type cluster/replicate
      subvolumes remote1 remote2
      end-volume
      volume replicate2
      type cluster/replicate
      subvolumes remote3 remote4
    end-volume
    
    volume distribute
      type cluster/distribute
      subvolumes replicate1 replicate2
    end-volume
    
    volume writebehind
      type performance/write-behind
      option window-size 1MB
      subvolumes distribute
    end-volume
    
    volume cache
      type performance/io-cache
      option cache-size 512MB
      subvolumes wirtebehind
    end-volume
    Tenha certeza que você usou o hostname ou endereço IP correto na opção option remote-host.

    Bem pessoal, é somente isso! Agora podemos montar o sistema de arquivos GlusterFS em /mnt/glusterfs com um dos seguintes comandos:

    # glusterfs -f /etc/glusterfs/glusterfs.vol /mnt/glusterfs
    ou
    # mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs


    Agora você já pode ver o novo compartilhamento montado com o comando abaixo:

    # df -h

    Com este comando devem aparecer as unidades montadas em seu sistema, entre as informações que aparecerão, se tudo correr bem deve ter uma linha como a abaixo:

    /etc/glusterfs/glusterfs.vol xxxGB xxxGB XXX% /mnt/glusterfs

    Onde xxx são os respectivos espaços em seu NOVO STORAGE!

    Atente para o seguinte... O tamanho de seu ARMAZENAMENTO DISTRIBUÍDO é calculado através da replication1 + replication2.

    Ao invés de montar o compartilhamento GlusterFS manualmente no cliente, podemos modificar nosso querido /etc/fstab para que tudo seja montado automaticamente na hora do boot.

    Adicione a linha abaixo usando o vi ou qualquer editor de texto de sua preferência.

    # vi /etc/fstab

    Código:
    /etc/glusterfs/glusterfs.vol /mnt/glusterfs glusterfs defaults 0 0
    Reinicie o computador cliente e verifique se o ponto de montagem funcionou corretamente. Após o boot execute o comando "df -h" e verifique se o ponto de montagem aparece.

    Verificando configurações


    TESTANDO...

    Agora criaremos alguns arquivos de teste em nosso compartilhamento e faremos uma bateria de testes para verificar se tudo funcionou como deveria.

    Na máquina cliente execute os comandos abaixo:

    # touch /mnt/glusterfs/teste1
    # touch /mnt/glusterfs/teste2
    # touch /mnt/glusterfs/teste3
    # touch /mnt/glusterfs/teste4
    # touch /mnt/glusterfs/teste5
    # touch /mnt/glusterfs/teste6


    Agora vamos checar o diretório /data/export dos servidores. Você verá que a replicação1, assim como a replicação2, pegaram parte dos arquivos e diretórios que compõem o compartilhamento GlusterFS na máquina cliente.

    Perceba também que compõem a replicação1 (server1 e server2) e a replicação2 (server3 e server4) e que ambos contém os mesmos arquivos (espelhamento).

    No servidor server1.example.com execute o comando abaixo:

    # ls -l /data/export


    Veremos que a saída deve ser igual a mostrada abaixo:

    # ls -l /data/export

    total 0
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste1
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste2
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste4
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste5

    Veremos a saída agora estando no servidor server2.example.com, executemos o comando abaixo:

    # ls -l /data/export

    total 0
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste1
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste2
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste4
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste5

    Veremos a saída agora estando no servidor server3.example.com, execute no shell o comando abaixo e observe atentamente a saída:

    # ls -l /data/export
    total 0
    -rw-r--r-- 1 root root 0 2009-07-01 15:02 teste3
    -rw-r--r-- 1 root root 0 2009-07-01 15:02 teste6

    Por fim, porém não menos importante, veremos a saída estando conectado no servidor server4.example.com, execute no shell o comando abaixo:

    # ls -l /data/export

    total 0
    -rw-r--r-- 1 root root 0 2009-07-01 15:02 teste3
    -rw-r--r-- 1 root root 0 2009-07-01 15:02 teste6

    Verificando e testando alta disponibilidade


    Agora derrubaremos o servidor server1.example.com e server4.example.com e adicionaremos e deletaremos alguns arquivos em nosso compartilhamento GlusterFS na máquina cliente.

    Primeiro derrube os servidores server1.example.com e server4.example.com com o comando abaixo:

    # shutdown -h now


    Agora na máquina cliente deletaremos os arquivos teste5 e teste6:

    # rm -fv /mnt/glusterfs/teste5
    # rm -fv /mnt/glusterfs/teste6


    As mudanças deverão estar visíveis no diretório /data/export no server2 e no server3.

    Estando conectado no server2, execute o comando:

    # ls -l /data/export


    Teremos a saída abaixo:

    # ls -l /data/export
    total 0
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste1
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste2
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste4

    Estando agora conectado ao server3, execute o comando:

    # ls -l /data/export

    Teremos a saída abaixo:

    # ls -l /data/export
    total 0
    -rw-r--r-- 1 root root 0 2009-07-01 15:02 teste3

    Vamos agora iniciar o server1 e o server4 e novamente vamos dar uma olhada nos diretórios /data/export de ambos os servidores com o comando abaixo.

    No server1 digite o comando:

    # ls -l /data/export
    total 0
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste1
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste2
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste4
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste5

    No server4 digite o comando:

    # ls -l /data/export
    total 0
    -rw-r--r-- 1 root root 0 2009-07-01 15:02 teste3
    -rw-r--r-- 1 root root 0 2009-07-01 15:02 teste6

    Como podemos ver o server1 e server4 não tem a notícia que aconteceram mudanças enquanto eles estavam desligados. Isso é fácil de se resolver, tudo que precisamos fazer é executar o comando de leitura no compartilhamento da máquina cliente (cliente1.exemplo.com.br).

    Execute o comando abaixo e verifique a saída do mesmo (Na máquina cliente):

    # ls -l /mnt/glusterfs/
    total 0
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste1
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste2
    -rw-r--r-- 1 root root 0 2009-07-01 15:02 teste3
    -rw-r--r-- 1 root root 0 2009-07-01 15:01 teste4

    Agora, para confirmar que está tudo funcionando direitinho, caso você execute o comando "ls -l" nos servidores server1 e server2, verá que as modificações foram replicadas para os mesmos com sucesso.

    Enfim, este maravilhoso artigo acabou, fiz algumas modificações nos exemplos e também na tradução para que a mesma seja de fácil compreensão as amigos que estão iniciando no mundo Linux.

    Espero que todos tenham gostado e até a próxima.

    Fonte:
    VivaoLinux
    Postado Por: RedDeviL
X
Working...
X