Criando o array RAID 10 de exemplo

Criando o array RAID 10 de exemplo

Atualmente tenho 8 discos de tamanho 32G cada, formando um RAID 10. Agora, quero aumentar o tamanho desse RAID adicionando discos extras. Este é um dispositivo de produção, portanto já existem dados críticos no RAID. O sistema de arquivos é XFS. Existe alguma maneira de aumentar o tamanho deste RAID sem afetar a leitura/gravação em execução nesse RAID. Se não, como fazer isso com tempo offline mínimo?

Responder1

As respostas existentes estão bastante desatualizadas. Aqui em 2020, agora é possível desenvolver um mdadmRAID 10 de software, simplesmente adicionando 2 ou mais discos do mesmo tamanho.

Criando o array RAID 10 de exemplo

Para fins de teste, em vez de unidades físicas, criei 6 volumes LVM de 10 GB, /dev/vg0/rtest1para rtest6os quais o mdadm não teve queixas.

# Using the thinpool lvthin on VG vg0 - I created 6x 10G volumes
lvcreate -T vg0/lvthin -V 10G -n rtest1 
lvcreate -T vg0/lvthin -V 10G -n rtest2
...

Em seguida, criei um array RAID 10 mdadm usando os primeiros 4 rtestXvolumes

mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/vg0/rtest[1-4]

Usando mdadm -D(igual a --detail), podemos ver que o array possui 4x "drives", com capacidade de 20GB dos 40GB de volumes, como é esperado com o RAID 10.

root@host ~ # mdadm -D /dev/md0

/dev/md0:
           Version : 1.2
     Creation Time : Fri Nov 20 09:02:39 2020
        Raid Level : raid10
        Array Size : 20953088 (19.98 GiB 21.46 GB)
     Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Fri Nov 20 09:04:24 2020
             State : clean
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : someguy123:0  (local to host someguy123)
              UUID : e49ab53b:c66321f0:9a4e272e:09dc25b1
            Events : 23

    Number   Major   Minor   RaidDevice State
       0     253        9        0      active sync set-A   /dev/dm-9
       1     253       10        1      active sync set-B   /dev/dm-10
       2     253       11        2      active sync set-A   /dev/dm-11
       3     253       12        3      active sync set-B   /dev/dm-12

Expandindo o RAID10 com 2 novos volumes/discos de tamanhos iguais

Para aumentar a matriz, primeiro você precisa do --add(s) par(es) de discos para a matriz e, em seguida, usar --grow --raid-devices=X(onde X é o novo número total de discos no RAID) para solicitar que o mdadm remodele o RAID10 para usar os 2 discos sobressalentes como parte da matriz.

mdadm --add /dev/md0 /dev/vg0/rtest5 /dev/vg0/rtest6
mdadm --grow /dev/md0 --raid-devices=6

Monitore o processo de ressincronização

Aqui está a parte chata - esperar de minutos a horas, dias ou até semanas, dependendo do tamanho do seu RAID, até que o mdadm termine de remodelar as novas unidades.

Se verificarmos mdadm -D, podemos ver que o RAID está sendo remodelado.

mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Nov 20 09:02:39 2020
        Raid Level : raid10
        Array Size : 20953088 (19.98 GiB 21.46 GB)
     Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
      Raid Devices : 6
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Fri Nov 20 09:15:05 2020
             State : clean, reshaping
    Active Devices : 6
   Working Devices : 6
    Failed Devices : 0
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

    Reshape Status : 0% complete
     Delta Devices : 2, (4->6)

              Name : someguy123:0  (local to host someguy123)
              UUID : e49ab53b:c66321f0:9a4e272e:09dc25b1
            Events : 31

    Number   Major   Minor   RaidDevice State
       0     253        9        0      active sync set-A   /dev/dm-9
       1     253       10        1      active sync set-B   /dev/dm-10
       2     253       11        2      active sync set-A   /dev/dm-11
       3     253       12        3      active sync set-B   /dev/dm-12
       5     253       14        4      active sync set-A   /dev/dm-14
       4     253       13        5      active sync set-B   /dev/dm-13

Aproveite seu array RAID10 maior!

Eventualmente, depois de mdadmterminar a remodelagem, podemos ver que o tamanho do array é de aproximadamente 30G em vez de ~20G, o que significa que a remodelação foi bem-sucedida e relativamente fácil de fazer :)

mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Nov 20 09:02:39 2020
        Raid Level : raid10
        Array Size : 31429632 (29.97 GiB 32.18 GB)
     Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
      Raid Devices : 6
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Fri Nov 20 09:25:01 2020
             State : clean
    Active Devices : 6
   Working Devices : 6
    Failed Devices : 0
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : someguy123:0  (local to host someguy123)
              UUID : e49ab53b:c66321f0:9a4e272e:09dc25b1
            Events : 93

    Number   Major   Minor   RaidDevice State
       0     253        9        0      active sync set-A   /dev/dm-9
       1     253       10        1      active sync set-B   /dev/dm-10
       2     253       11        2      active sync set-A   /dev/dm-11
       3     253       12        3      active sync set-B   /dev/dm-12
       5     253       14        4      active sync set-A   /dev/dm-14
       4     253       13        5      active sync set-B   /dev/dm-13

Responder2

Existem 2 casos:

  1. você adiciona novas unidades A maneira mais fácil e segura é criar um novo array nas novas unidades, criar um volume físico no novo array e aqui está você. Nenhuma perda de desempenho aqui. Como bônus, você pode criar um novo grupo de volumes para colocar seus dados em um array ou outro.
  2. Você substitui as unidades existentes por outras maiores. Substitua-as uma por uma, cada vez criando 2 partições no disco. Você adiciona o primeiro (por exemplo, sdX1 ao array existente (ele deve se recuperar automaticamente) e pode então criar um novo array em todas as segundas partições (o sdX2). Dependendo do seu uso, pode haver um impacto no desempenho de algumas operações ( basicamente se você copiar dados entre os dois arrays).

Em ambos os casos você não perderá dados e se o seu hardware permitir hotplug você não terá tempo de inatividade.

A propósito, mesmo que o mdadm permitisse um redimensionamento dinâmico do array, eu não arriscaria com os dados de produção.

Responder3

Supondo que isso esteja no Linux mdadm- você não pode.

mdadmnão suporta o crescimento do RAID10

informação relacionada