O que é RAID por software? Como me pode ajudar em termos de redundância e performance no acesso aos meus dados?

Olá a todos,

Hoje voltamos aos nossos posts mais técnicos e já que muitos amigos meus recentemente tem me perguntado o que são Soft Raids e porque é que eles estão agora tão em moda hoje (?) em dia, decidi fazer uma sequencia de posts sobre o tema entre como os criar e como os manter.

Disclamer: Neste post abordo *apenas* softraid devices built in no kernel de origem. ZFS (ou openZFS) não faz parte da arvore de kernel atual. RAID não é um backup!

 

 

O que é um RAID?

Um RAID, ou Redundant Array of Independent Disks, é uma tecnologia que nos permite que vários discos rígidos sejam combinados em uma única unidade lógica de storage. Esta tecnologia oferece melhor desempenho, tolerância a falhas e redundância de dados. O RAID pode ser implementado tanto em hardware quanto em software, mas neste post vamos nos concentrar no RAID por software.

O RAID de software não é nada de novo e suporte nativo para ele pode ser encontrado em vários sistemas operativos, incluindo Linux, Windows e macOS. Em Linux :), o software RAID é implementado utilizando o md driver (vários dispositivos) built in no kernel do Linux. O md  driver fornece suporte para níveis de RAID 0, 1, 4, 5, 6 e 10. Cada nível de RAID tem suas próprias características e compensações, tornando importante escolher o nível de RAID correto para seu caso de uso específico.

Porque RAID por software e não por hardware?

Essa é uma pergunta simples de responder: Facilidade de migração, ferramentas comuns de administração e alarmística, portabilidade de volumes de raid entre sistemas, sem nos termos que perguntar se os nossos discos com dados e o volume de raid serão lidos no novo controlador por hardware, e sobretudo, preço. Um controlador RAID por hardware *bom* custa so por si tanto quanto um computador topo de gama.

Vamos conhecer os níveis de RAID disponíveis?

RAID Nível 0 – Distribuído.

RAID nível 0, também conhecido como striping, envolve a divisão de dados em blocos e a gravação paralela dos blocos em vários discos. O striping melhora o desempenho de leitura e escrita, permitindo que os dados sejam lidos e gravados em vários discos simultaneamente. Contudo, o striping não fornece tolerância a falhas ou redundância de dados, o que significa que, se um disco falhar, todos os dados no array serão irremediavelmente perdidos.

O striping é ideal para aplicativos que exigem storage de alto desempenho, mas que não exigem redundância de dados. Por exemplo, aplicações de edição de vídeo que exigem alto rendimento na leitura e gravação de arquivos de vídeo grandes beneficiam e muito de striping.

Para configurar um volume em RAID 0 no Linux,  utilizaremos o utilitário mdadm. O utilitário mdadm está incluído na maioria das distribuições Linux e fornece uma maneira fácil de criar e gerir arrayes RAID de software.

Para criar um array RAID 0 com dois discos, primeiro crie partições em ambos os discos usando fdisk:

# fdisk /dev/sdb

Criem uma nova partição teclando n e siga as instruções. Repitam este processo para o segundo disco.

Em seguida, criem um array RAID 0 utilizando o utilitário mdadm:

# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1

O comando acima cria um array RAID 0 chamada /dev/md0 com dois discos, /dev/sdb1 e /dev/sdc1.
Em seguida podem utilizar o /dev/md0 como se um disco habitual se trate.

RAID Nível 1 – Mirror.

O RAID nível 1, também conhecido como mirror, envolve a gravação de dados em dois ou mais discos simultaneamente. O mirror fornece tolerância a falhas garantindo que, se um disco falhar, todos os dados no array ainda estarão disponíveis no outro disco. No entanto, um raid em mirror não fornece nenhum benefício de desempenho e requer o dobro da quantidade de armazenamento em comparação com as configurações não RAID.

O raid em mirror é ideal para aplicações que exigem redundância de dados, mas não exigem armazenamento de alto desempenho. Por exemplo, um servidor de arquivos que armazena dados críticos pode se beneficiar de uma solução de mirror.

Para configurar o RAID 1 no Linux, devem como habitualmente utilizar o utilitário mdadm. Para criar um array RAID 1 com dois discos, primeiro criem partições em ambos os discos usando fdisk:

# fdisk /dev/sdb

Criem uma nova partição digitando n e siga as instruções. Repitam este processo para o segundo disco.

Em seguida, crie um array RAID 1 usando o utilitário mdadm:

# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

O comando acima cria um array RAID 1 chamado /dev/md0 com dois discos, /dev/sdb1 e /dev/sdc1.
Em seguida podem utilizar o /dev/md0 como se um disco habitual se trate.

RAID Level 5 – Striping with Parity.

RAID nível 5, também conhecido por striping com paridade, consiste em dividir dados em blocos e gravá-los em vários discos. Além disso, um bloco de paridade também é escrito para fornecer tolerância a falhas. O bloco de paridade contém informações que podem ser usadas para reconstruir dados se um dos discos falhar.

O RAID 5 oferece desempenho aprimorado de leitura e gravação em comparação com o RAID 1, ao mesmo tempo em que oferece tolerância a falhas. No entanto, o RAID 5 tem uma penalidade de desempenho ao gravar dados devido à sobrecarga de cálculo e gravação de blocos de paridade.

O RAID 5 é ideal para aplicativos que exigem desempenho e redundância de dados. Por exemplo, um servidor de banco de dados que requer armazenamento de alto desempenho com tolerância a falhas pode se beneficiar do RAID 5.

Para configurar o RAID 5 em Linux, utilizaremos o utilitário mdadm. Para criar um array RAID 5 com três discos, primeiro temos de criar partições em todos os três discos usando o fdisk:

# fdisk /dev/sdb

Criem uma nova partição selecionando n e sigam as instruções. Repita este processo para o segundo e terceiro discos.

Em seguida, crie um array RAID 5 usando o utilitário mdadm:

# mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1

O comando acima cria um array RAID 5 chamada /dev/md0 com três discos, /dev/sdb1, /dev/sdc1 e /dev/sdd1.
Em seguida podem utilizar o /dev/md0 como se um disco habitual se trate. Notem a diferença no espaço alocado entre este modo e os anteriores.

Outros níveis de RAID

Além do RAID 0, 1 e 5, o Linux também oferece suporte aos níveis de RAID 4, 6 e 10. O RAID 4 é semelhante ao RAID 5, mas usa um disco de paridade dedicado, que pode melhorar o desempenho em alguns cenários. O RAID 6 é semelhante ao RAID 5, mas usa dois blocos de paridade, o que fornece tolerância a falhas adicional, mas tem uma penalidade de desempenho maior. O RAID 10, também conhecido como RAID 1+0, envolve a combinação de mirror e distribuição para fornecer desempenho e tolerância a falhas.

Podemos ainda utilizar aceleradores de performance aos vossos softraids, como por exemplo extensões de bcache – ja abordei este tema aqui – onde demonstro o que pode ser feito e ganho em aumento de performance de forma exponencial quando combinamos softraids com qualificações hierárquicas de storage, tudo built in e opensource no nosso kernel linux.

Em conclusão, o RAID de software oferece melhor desempenho, tolerância a falhas e redundância de dados em comparação com configurações não RAID. Usando o utilitário mdadm, configurar e gerenciar arrays RAID de software em Linux é fácil e direto. Ao escolher um nível de RAID, é importante considerar os requisitos específicos de seu aplicativo e escolher um nível de RAID que forneça o melhor equilíbrio entre desempenho e tolerância a falhas.
Recordem-se que RAID não é um backup e deverão ter *sempre* copias de segurança para os vossos dados. Não consigo parar de sublinhar isto.

Até ao próximo post, e caso tenham duvidas, já sabem onde me encontrar.

Um abraço,
Nuno