Criando RAID a partir do compartilhamento de rede

Hoje vamos explicar como usar compartilhamentos SMB remotos, a fim de construir um dispositivo RAID. A ideia é simples, usamos todos os recursos de armazenamento em nossa LAN, para construir um compartilhamento central NFS/SMB ( pode ser usado para nuvens privadas como CloudStack ). Testamos com o Debian 6 x86_64, mas você vai encontrar todos os comandos semelhantes em todas as distribuições Linux.

Lembrando que está configuração é experimental e ainda não deve ser usada.

1. Criamos um arquivo em cada dispositivo, executamos em todos os nodes, altere [X]  para o número do node:

$ dd if=/dev/zero of=/myshare/node[X].img bs=1M count=1024

2.  Agora vamos trabalhar com o servidor central:

  • Criamos o diretório para armazenar todas as montagens SMB:

$ mkdir -p /nodeshares/node{1,2,3}

  • Montamos cada dispositivo, observe que a senha é definida pelo comando smbpasswd:

$ mount -t cifs -o username=myname,password=1 //192.168.100.11/myshare /nodeshares/node1

$ mount -t cifs -o username=myname,password=1 //192.168.100.12/myshare /nodeshares/node2

$ mount -t cifs -o username=myname,password=1 //192.168.100.13/myshare /nodeshares/node3

3. Agora vamos para parte divertida, criaremos um loop a partir dos arquivos que criamos na etapa 2, note que os arquivos realmente estão em um host remoto:

$ losetup -v /dev/loop1 /nodeshares/node1/node1.img
$ losetup -v /dev/loop2 /nodeshares/node2/node2.img
$ losetup -v /dev/loop3 /nodeshares/node3/node3.img

4. Criamos o RAID de todos os dispositivos compartilhados:

Criamos o dispositivo RAID nível 5 utilizando os loops, lembrando é a ordem dos dispositivos que importa:

$ mdadm –create /dev/md0 –level=5 –raid-disks=3 /dev/loop1 /dev/loop2 /dev/loop3

Vamos ver o processo de criação a partir do mdstat:

$ cat /proc/mdstat

5. Criamos uma partição em md1, montamos e exportamos a partição em NFS ou SMB de volta para rede:

  • Inicialização:

A fim de manter o RAID uma vez que iniciamos o servidor mestre, teremos que dizer ao kernel para procurar qualquer dispositivo MD e em seguida atualizar para mdadm. Vamos editar o arquivo /etc/mdadm/mdadm.conf e adicionar os dispositivos de loop adicionando está linha:

DEVICE /dev/loop*

Em seguida, executamos este comando para adicionar o novo RAID:

$ mdadm –detail –scan >> /etc/mdadm/mdadm.conf

  • O que acontece quando o node é reiniciado ou desligado:

O mdadm vai ver o dispositivo de loop como defeituoso e vai marcar como uma falha, podemos ver neste exemplo:

$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 loop3[3](F) loop1[0] loop2[1]
1047552 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]

  • Dispositivos não utilizados:

Para reparar precisamos remover o dispositivo com defeito:

$ mdadm –manage /dev/md0 –remove /dev/loop3
mdadm: hot removed /dev/loop3 from /dev/md1

Depois de remontar o node, podemos adicionar o dispositivo de volta para a matriz:

$ mdadm –manage /dev/md0 –add /dev/loop3
mdadm: added /dev/loop3