F.3. Usando o mdadm para Configurar o Armazenamento Baseado no RAID e Multi-localidade

Similar a outras ferramentas contidas no pacote raidtools, o comando mdadm pode ser usado para executar todas as funções necessárias relacionadas à adminsitração de conjuntos multi-dispositivos. Nesta seção mostramos como o mdadm pode ser usado para:

F.3.1. Criando um Dispositivo RAID com mdadm

Para criar um dispositivo RAID, edite o arquivo /etc/mdadm.conf para definir valores DEVICE e ARRAY apropriados:

DEVICE /dev/sd[abcd]1
ARRAY /dev/md0 devices=/dev/sda1,/dev/sdb1,/dev/sdc1,/dev/sdd1

Neste exemplo, a linha DEVICE está usando o tradicional globbing do nome de arquivo (consulte a página man glob(7) para mais informações) para definir os dispositivos SCSI seguintes:

A linha ARRAY define um dispositivo RAID (/dev/md0) composto pelos dispositivos SCSI definidos na linha DEVICE.

Antes de criar ou usar qualquer dispositivo RAID, o arquivo /proc/mdstat não exibe nenhum dispositivo RAID ativo:

Personalities :
read_ahead not set
Event: 0
unused devices: <none>

Em seguida, use a configuração acima e o comando mdadm para criar um conjunto RAID 0:

mdadm -C /dev/md0 --level=raid0 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 \
/dev/sdd1
Continue creating array? yes
mdadm: array /dev/md0 started.

Uma vez criado, o dispositivo RAID pode ser questionado a qualquer momento para prover informações de status. O exemplo seguinte exibe o output do comando mdadm --detail /dev/md0:

/dev/md0:
Version : 00.90.00
Creation Time : Mon Mar  1 13:49:10 2004
Raid Level : raid0
Array Size : 15621632 (14.90 GiB 15.100 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Mon Mar  1 13:49:10 2004
State : dirty, no-errors
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
         0       8        1        0      active sync   /dev/sda1
         1       8       17        1      active sync   /dev/sdb1
         2       8       33        2      active sync   /dev/sdc1
         3       8       49        3      active sync   /dev/sdd1
           UUID : 25c0f2a1:e882dfc0:c0fe135e:6940d932
         Events : 0.1

F.3.2. Criando um Dispositivo Multi-localidade com mdadm

Além de criar conjuntos RAID, o mdadm também pode ser usado para tirar proveito do hardware suportando mais de uma localidade I/O para LUNs (drives de disco) SCSI individuais. O objetivo do armazenamento multi-localidade é a disponibilidade contínua de dados no caso de falha de hardware ou saturação de uma localidade. Como essa configuração contém diversas localidades (cada uma atuando como um controlador virtual independente) acessando um LUN (drive de disco) SCSI comum, o kernel do Linux detecta cada drive compartilhado uma vez "através" de cada localidade. Em outras palavras, o LUN (drive de disco) SCSI conhecido como /dev/sda também pode estar acessível como /dev/sdb, /dev/sdc e assim por diante, dependendo da configuração específica.

Para oferecer um único dispositivo que possa permanecer acessível se uma localidade I/O falhar ou tornar-se saturada, o mdadm inclui um parâmetro adicional para sua opção ––level. Este parâmetro — multipath — direciona a camada md no kernel do Linux a re-rotear pedidos I/O de uma localidade para outra, no caso de falha de uma localidade I/O.

Para criar um dispositivo multi-localidade, edite o arquivo /etc/mdadm.conf para definir os valores das linhas DEVICE e ARRAY que refletem a configuração de seu hardware.

NotaNota
 

Ao contrário do exemplo RAID anterior (no qual cada dispositivo especificado em /etc/mdadm.conf deve representar drives de disco físicos diferentes), cada dispositivo deste arquivo refere ao mesmo drive de disco compartilhado.

O comando usado para a criação de um dispositivo multi-localidade é similar àquele usado para criar um dispositivo RAID; a diferença é a substituição do parâmetro de um nível do RAID pelo parâmetro multipath.

mdadm -C /dev/md0 --level=multipath --raid-devices=4 /dev/sda1 /dev/sdb1  
 /dev/sdc1 /dev/sdd1
Continue creating array? yes
mdadm: array /dev/md0 started.

Devido à extensão da linha do comando mdadm, este foi dividido em duas linhas.

Neste exemplo, o hardware consiste de um LUN SCSI apresentado como quatro dispositivos SCSI separados, cada um acessando o mesmo armazenamento por uma localidade diferente. Uma vez criado o dispositivo multi-localidade /dev/md0, todas as operações I/O que referenciam /dev/md0 são direcionadas para /dev/sda1, /dev/sdb1, /dev/sdc1 ou /dev/sdd1 (dependendo de qual localidade estiver ativa e operacional no momento).

A configuração do /dev/md0 pode ser examinada em mais detalhes usando o comando mdadm --detail /dev/md0 para verificar se é , de fato, um dispositivo multi-localidade:

/dev/md0:
Version : 00.90.00
Creation Time : Tue Mar  2 10:56:37 2004
Raid Level : multipath
Array Size : 3905408 (3.72 GiB 3.100 GB)
Raid Devices : 1
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Tue Mar  2 10:56:37 2004
State : dirty, no-errors
Active Devices : 1
Working Devices : 4
Failed Devices : 0
Spare Devices : 3

    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       1       8       17        1      spare   /dev/sdb1
       2       8       33        2      spare   /dev/sdc1
       3       8        1        3      spare   /dev/sda1
           UUID : 4b564608:fa01c716:550bd8ff:735d92dc
         Events : 0.1

Uma outra característica do mdadm é a habilidade em forçar um dispositivo (seja um membro de um conjunto RAID ou uma localidade numa configuração multi-localidade) a ser removido de uma configuração operante. No exemplo seguinte, o /dev/sda1 é marcado como falho, então é removido e finalmente adicionado de volta à configuração. Numa configuração multi-localidade, estas ações não impactariam nenhuma atividade I/O ocorrendo no momento:

# mdadm /dev/md0 -f /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md0
# mdadm /dev/md0 -r /dev/sda1
mdadm: hot removed /dev/sda1
# mdadm /dev/md0 -a /dev/sda1
mdadm: hot added /dev/sda1
#