|
1 - Um pouco de Teoria.
O protocolo ATA over Ethernet foi desenvolvido pela Brantley Coile que atualmente a empresa chama-se Coraid. Este protocolo foi desenvolvido para acesso à unidades de storages através da rede padrão Ethernet. Podendo assim criar as famosas SANs ( Storage Area Networks).
Logicamente deve-se observar se há necessidade de montar uma storage em sua empresa pois devemos criar uma estrutura de rede onde o acesso aos discos torne-se rápido e confiável.
Após toda configuração concluída o resultado é muito interessante, por exemplo poderemos particionar o disco que fisicamente nem está em sua máquina e formatá-lo , enfim será uma unidade real através da rede.
AOE VS ISCSI
Inevitávelmente vem aquela perguntinha ao qual não quer se calar, qual o melhor protocolo para esse tipo de aplicação?
Essa resposta vem com o gráfico abaixo mostrando a real diferença entre estes protocolos.
Como podemos observar claramente a diferença entre os dois protocolos através das camadas do modelo OSI.
Bem o Protocolo AOE não possui suporte à TCP , trabalha independente da Pilha TCP/IP , logo se torna um protocolo muito mais rápido que seu concorrente ISCSI, já que o processo é independende. Mas sua desvantagem por não ter suporte ao TCP/IP ele não é Roteável para outras redes atráves de roteadores ou Firewall necessáriamente precisa estar no mesmo dominio de Broadcast ou seja na mesma rede.
Seu concorrente trabalha sobre a pilha TCP/IP podendo ser implementado em outras redes , mas tornando mais lento que o AOE.
Diferenças à parte o kernel 2.6 possui suporte à este protocolo , as Distribuições mais modernas já possui suporte nativo ao AOE.
Habilitando o modulo AOE.
Bem agora devemos verificar se o nosso Linux possui ativado no seu Kernel o módulo AOE.
Rápidamente podemos fazer o comando que lhe dirá se já está compilado em seu Kernel.
digite: modprobe aoe
Caso o resultado seja positivo , ao digitar o comando lsmod aparecerá um novo modulo carregado , caso contrário terá que compilar o seu Kernel com o devido suporte ao AOE.
Não irei entrar em detalhes de como carregar o módulo automaticamente em sua distribuição , pois a idéia é mostrar o caminho e não levar no colo. Para isso estou usando o Slackware 12.
Um fato muito importante é que esse sistema possui uma comunicação Cliente/Servidor ou seja é necessário a configuração do servidor e do cliente e ambos devem estar com o módulo previamente carregado. Um outro detalhe é que apenas um cliente pode se conectar em uma unidade do servidor. Poderá ter quantas unidades desejar mas apenas um cliente poderá conectar em uma unidade da storage.
Caso seu kernel não tenha o suporte ao AOE e você saiba compilar corretamente um kernel segue o caminho para ativar o modulo:
Device Drivers ---> Block devices ---> ATA over Ethernet support

Baixando e compilando as ferramentas do AOE.
Algumas distribuições já possuem estas ferramentas para criar e gerenciar as interfaces AOE.
Caso não tenha estas ferramentas vamos baixar e compilar direto da fonte.
Basicamente trabalhamos com dois pacotes de programas são eles:
AOEtools. Este pacote é usado para localizar configurar e adicionar uma unidade de disco , usamos no cliente.
Vblade. Este pacote é usado para criar um servidor SANs é usado apenas na estação definida como Servidor.
Segue o site principal para downloads dos pacotes: http://aoetools.sourceforge.net/
Download do AOEtools: http://downloads.sourceforge.net/aoetools/aoetools-26.tar.gz?modtime=1210775491&big_mirror=0
Download do Vblade: http://downloads.sourceforge.net/aoetools/vblade-18.tgz?modtime=1216036301&big_mirror=0
Com os arquivos em mãos descompacte e vamos lá:
Compilando o AOETOOLS:
tar -xzf aoetools-26.tar.gz cd aoetools-26 make make install
Compilando o Vblade: tar -xzf vblade-18.tgz cd vblade-18 make make install
Moleza não ?
Claro não pense em compilar sem um gcc é o mínimo para que funcione , caso apresente algum erro ele será mostrado em tela e resolva as dependências. No caso do slackware é moleza não tem erro.
Configurando o Servidor AOE
Módulo carregado , ferramentas compiladas ..... vamos lá.
Você poderá escolher em adicionar um disco ou uma unidade lógica para a comunicação , caso o disco que deseja coloca na rede não esteja particionando terá que fazer isso e poderá ser pela rede ser desejar. No meu exemplo peguei uma partição já configurada e com dados que irei disponibilizar para uso em outra máquina.
Você pode visualizar suas partições com o seguinte comando: fdisk -l
Caso queira ver suas partições já montadas simplesmente digite: mount
Escolha uma partição para ser usada e vamos lá , no meu caso usei sda3 como no exemplo abaixo:
root@ranzes:/softredes# fdisk -l
Disk /dev/sda: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System /dev/sda1 1 61 489951 82 Linux swap /dev/sda2 * 62 3708 29294527+ 83 Linux /dev/sda3 3709 9729 48363682+ 83 Linux <----- Partição usada
Observe que esta partição já está em uso montado em /dados, mesmo assim irei disponibilizar em rede sem problemas.
root@ranzes:/softredes# mount /dev/sda2 on / type reiserfs (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) usbfs on /proc/bus/usb type usbfs (rw) /dev/sda3 on /dados type reiserfs (rw) <-------------- Partição usada. fusectl on /sys/fs/fuse/connections type fusectl (rw)
O comando vblade é o comando que disponibilizará a unidade em rede o comando funciona da seguinte forma:
vblade shelf slot netif filename
hummm entendi tudo....
veja:
shelf e slot são números de referência da unidade disponibilizada na rede , lembra que o AOE não funciona sobre o protocolo TCP então ele precisa de alguma referência para localizar a unidade na rede semelhante ao próprio IP só que bem mais simples.
shelf: é o "Major AOE address" ele é usado para formar um grupo de unidades de rede geralmente o próprio servidor. slot: é o Número da unidade de disco que será disponibilizada na rede.
Vamos fazer uma analogia em relação ao IP para entender melhor.
No formato IP temos 4 Octetos divididos da seguinte forma:
Classe A rede.host.host.host Classe B rede.rede.host.host Classe C rede.rede.rede.host
No formato AOE funciona da seguinte forma:
servidor.unidade de disco.
Mais simples não , logo o processo de localizar a Storage na rede se torna simples.
Voltando ao comando , netif se refere à interface de rede que disponibilizará as unidades. exemplo: eth0 , eth1 , etc..
E para finalizar , o filename , que se refere ao dispositivo de disco ou unidade à ser compartilhada. Exemplo: /dev/sdb3, /dev/hda2, etc...
Então juntando tudo ficaria:
Vblade 1 1 eth0 /dev/sdb3
Pronto ativo e aguardando ser conectado. Caso queira compartilhar mais de uma unidade , mantenha o mesmo major address se for disponibilizar vários discos alterando apenas o minor address vou fazer outro exemplo:
Servidor storage 1 (servidor para banco de dados)
vblade 1 1 eth0 /dev/hda3 <--- servidor 1 unidade 1 vblade 1 2 eth0 /dev/hda4 <--- servidor 1 unidade 2
Servidor storage 2 (servidor para Samba)
vblade 2 1 eth0 /dev/sda2 <--- servidor 2 unidade 1 vblade 2 2 eth0 /dev/sda3 <--- servidor 2 unidade 2
Acredito que agora não haja dúvidas sobre o shelf address e o slot address.
Outro detalhe é que o comando vblade roda em foreground caso queira rodar em modo Daemon use o comando vbladed , a sintaxe é a mesma.
Executado corretamente os comando vamos ver como fica a conexão no cliente.
Configurando o Cliente AOE
Servidor rodando na mesma rede, chegou o momento de conectar-se à storage. Não esquecendo que nos clientes é necessário também o módulo AOE carregado e o software compilado para conexão e gerenciamento das unidades.
Vamos conhecer os comandos:
aoe-interfaces Restringe ao módulo o uso de uma interface de rede especificada. Por exemplo: Tenho um servidor de mysql rodando na interface eth0 saindo para minha rede externa , mas minha outra interface eth1 nesta mesma máquina está conectada na minha storage usando uma unidade para a gravação do banco. Bem se eu não especificar exatamente ao módulo AOE a interface ao qual está trafegando os dados logo terei uma perda significativa de performance em função do módulo ouvir em todas as interfaces ativas. Para corrigir isso basta indicar à qual interface minha storage está conectada usando este comando. Exemplo: aoe-interfaces /dev/eth1 Pronto negociando apenas em uma interface, posso fazer isso ao carregar o módulo inutilizando este comando ao carregar o módulo usando a opção "aoe_iflist" Exemplo: modprobe aoe aoe_iflist="eth1"
aoe-discover Atualiza a tabela de storages conectadas à interface. Exemplo: aoe-discover
aoe-stat Comando muito importante, mostra todas as interfaces compartilhadas das storages conectadas à interface ouvinte. Exemplo: aoe-stat Resultado: e1.1 0.104GB eth1 up e1.2 4398.046GB eth1 up e2.1 1000.215GB eth1 up e2.2 2000.431GB eth1 up
Bem estas são as interfaces ativas para você montar.
Obs: todos os dispositivos detectados estão disponíveis para montagem , particionamento ou formatação em: /dev/etherd/ com o respectivo nome dado na criação do servidor como se fosse um endereço de rede já que não usa o protocolo TCP/IP , lembra? Então temos os seguintes endereços disponíveis: e1.1 e1.2 e.2.1 e2.2
Pronto , agora basta montar a unidade exatamente como qualquer dispositivo em linux: Exemplo:
Criei no meu cliente exatamente em /mnt, os seguintes diretórios dados1 , dados2, dados3 e dados4. Irei montar as unidades: mount -t reiserfs /dev/etherd/e1.1 /mnt/dados1 mount -t reiserfs /dev/etherd/e1.2 /mnt/dados2 mount -t vfat /dev/etherd/e2.1 /mnt/dados3 mount /dev/etherd/e2.2 /mnt/dados4
Hummm , porque na última montagem eu não especifiquei o tipo de partição? Porque nos sistemas mais atuais o comando mount em conjunto com automatic loader module do kernel se encarregam de detectar o tipo de partição carregar o módulo e montar automáticamente, na verdade eu não precisava especificar isso em nenhuma das montagens acima mas por questões de diferença de distribuições optei em adicionar. No caso do slackware eu nem utilizo esta opção.
Bem e seu quiser particionar uma unidade da storage é possivel? Sim lógico , como em uma storage de 6 mil dolares é possível nosso sistema Free também basta usar assim: Exemplo: cfdisk /dev/etherd/e1.1 ou cfdisk /dev/etherd/e2/2 Entendeu né.
E formatar posso? A resposta é sim e será obrigatório. um exemplo: mkfs.reiserfs /dev/etherd/e1.1 Pronto.
Bem Cuidado apenas para não fazer besteira e perder seus dados lembrando que uma storage é uma solução para problemas de espaço e custos mas é necessário atenção muita atenção.
Observações
Cuidado ao escolher a topologia de rede fisíca usada para este tipo de aplicação.
Geralmente as storages ficam atrás dos servidores e não no mesmo domínio de broadcast.
Se criar uma storage "Parruda" utilize placas de rede , switches de uma velocidade considerável para transmissão de dados. 1Gbit ou 10Gbit por exemplo.
Nas interfaces de rede onde só utilizará para comunicação para storages não há necessidade de configurar uma Rede TCP/IP já que o protocolo não trabalha sobre o TCP. Configure se precisar para conectar na storage via ssh ou utilização de outros serviços.
Referências
Site principal do AOE: http://aoetools.sourceforge.net/
Outros: http://en.wikipedia.org/wiki/ATA_over_Ethernet
http://support.coraid.com/support/linux/
http://www.techworld.com/storage/features/index.cfm?featureid=1838
Obrigado à todos.
|
Comentários
Eu ia usar freenas, pois ser em BSD.
O protocolo AoT, eu nao conhecia.
Vale agora dar uma pesquisada se BSD suporta, porem o protocolo de camada 3 sem duvida eh favoravel em uma rede LAN.
Parabens Slack!!!
http://windowsdisklessaoe.wordpress.com
(em inglês)
Feed RSS para comentários deste texto