Além do RAID

Eu sempre fui desconfiado do RAID no desktop. Mas no servidor, o RAID é uma necessidade absoluta:

“RAID” agora é usado como um termo genérico para esquemas de armazenamento de dados de computador que podem dividir e replicar dados entre várias unidades de disco rígido. Os diferentes esquemas/arquiteturas são nomeados pela palavra RAID seguida de um número, como em RAID 0, RAID 1, etc. Todos os vários projetos de RAID envolvem dois objetivos principais: maior confiabilidade dos dados ou maior desempenho de entrada/saída. Quando vários discos físicos são configurados para usar a tecnologia RAID, diz-se que eles estão em uma matriz RAID. Essa matriz distribui os dados entre vários discos, mas é vista pelo usuário do computador e pelo sistema operacional como um único disco.

Eu não havia trabalhado muito com RAID, pois achava que os benefícios não superavam os riscos nas máquinas desktop que eu normalmente construía. Mas as regras são diferentes no data center; o servidores que montei para o Stack Overflow todos usam várias formas de RAID, do RAID 1 ao RAID 6 e ao RAID 10. Ao trabalhar com esses servidores, fiquei surpreso ao descobrir que agora existem zilhões de variantes numeradas de RAID, mas todas elas parecem se basear em algumas formas básicas e padrão:

RAID 0: Striping

Os dados são distribuídos em tiras por (n) unidades, o que melhora o desempenho quase linearmente com o número de unidades, mas a um custo muito alto em termos de tolerância a falhas; uma falha de qualquer unidade em tiras torna todo o array ilegível.

raid-0-diagram.png

RAID 1: Espelhamento

Os dados são gravados em (n) unidades, o que oferece redundância quase perfeita com uma pequena redução de desempenho na gravação e ao custo de metade do armazenamento geral. Enquanto uma unidade do array de espelhos sobreviver, nenhum dado será perdido.

raid-1-diagram.png

Raid 5: Paridade

Os dados são gravados em (n) unidades com uma bloco de paridade. O array pode tolerar uma falha de unidade, ao custo de uma unidade no armazenamento. Pode haver uma séria penalidade de desempenho durante a gravação (já que a paridade e os blocos são calculados) e quando a matriz estiver sendo reconstruída.

raid-5-diagram.png

Raid 6: Paridade dupla

Os dados são gravados em (n) unidades com duas blocos de paridade. A matriz pode tolerar duas falhas de unidade, ao custo de duas unidades no armazenamento. Pode haver uma séria penalidade de desempenho ao gravar (já que a paridade e os blocos são calculados) e quando o array estiver sendo reconstruído.

raid-6-diagram.png

(sim, existem outras formas de RAID, mas, pelo que sei, elas raramente são implementadas ou usadas).

Também é possível gerar os chamados RAID 10 ou RAID 50 matrizes por aninhando esses níveis de RAID juntos. Se o senhor pegar quatro discos rígidos, fizer o stripe de dois pares e espelhar os dois arrays striped, acabará de criar uma mistura mágica de RAID 10! O que é particularmente mágico sobre o RAID 10 é que ele herda os pontos fortes de ambos os seus pais: o espelhamento oferece excelente redundância e o striping oferece excelente velocidade. Alguns diriam que o O RAID 10 é tão bom que elimina completamente qualquer necessidade de RAID 5, e eu concordo com eles.

Tudo isso era um território novo e fascinante para mim; eu conhecia o RAID em teoria, mas nunca havia trabalhado com ele. O texto acima é suficiente como introdução, mas eu recomendo a leitura do verbete da wikipedia sobre RAID para obter mais detalhes.

Vale a pena mencionar aqui que O RAID não substitui, de forma alguma, um regime de backup adequadomas sim uma maneira de oferecer melhor tempo de atividade e capacidade de sobrevivência para seus sistemas existentes. Os discos rígidos são baratos e estão ficando mais baratos a cada dia. Por que não usar uma série de coisas para obter melhor desempenho? e melhor confiabilidade para seus servidores? Esse sempre foi o objetivo do Redundant Array of Inexpensive Disks, na minha opinião. Acho que a Sun concorda; dê uma olhada no este monstro:

sun-x4500-top.jpg

É isso mesmo, 48 unidades SATA comuns em um array enorme, cortesia do Sun Sunfire X4500. Ele também usa um novo sistema RAID apelidado de RAID-Z:

O RAID-Z é um esquema de dados/paridade como o RAID-5, mas usa largura de faixa dinâmica. Cada bloco é sua própria faixa RAID-Z, independentemente do tamanho do bloco. Isso significa que toda gravação em RAID-Z é uma gravação de faixa completa. Isso, quando combinado com a semântica transacional copy-on-write do ZFS, elimina completamente o buraco de gravação do RAID. O RAID-Z também é mais rápido do que o RAID tradicional porque nunca precisa fazer leitura-modificação-gravação.

Porém, muito mais importante, o fato de passar pelos metadados significa que o ZFS pode validar cada bloco em relação à sua soma de verificação de 256 bits à medida que avança. Os produtos RAID tradicionais não podem fazer isso; eles simplesmente fazem XOR dos dados cegamente.

O que nos leva ao aspecto mais interessante do RAID-Z: dados com autocorreção. Além de lidar com falhas no disco inteiro, o RAID-Z também pode detectar e corrigir a corrupção silenciosa de dados. Sempre que o senhor lê um bloco RAID-Z, o ZFS o compara com sua soma de verificação. Se os discos de dados não retornarem a resposta correta, o ZFS lê a paridade e, em seguida, faz uma reconstrução combinatória para descobrir qual disco retornou dados incorretos. Em seguida, ele repara o disco danificado e retorna os dados corretos para o aplicativo. O ZFS também informa o incidente por meio do Solaris FMA para que o administrador do sistema saiba que um dos discos está falhando silenciosamente.

Por fim, observe que o RAID-Z não requer nenhum hardware especial. Ele não precisa de NVRAM para garantir a correção e não precisa de buffer de gravação para obter um bom desempenho. Com o RAID-Z, o ZFS cumpre a promessa original do RAID: ele fornece armazenamento rápido e confiável usando discos baratos e comuns.

Perdoe o trocadilho, mas não tenho certeza se isso torna o RAID de hardware tradicional redundantenecessariamente. Mesmo assim, há certamente ideias fantásticas e verdadeiramente de próxima geração no ZFS. Há um ótimo entrevista da ACM com os criadores do ZFS que dá muito mais detalhes. Os discos rígidos podem ser (em sua maioria) pedaços burros de ferrugem giratória, mas é absolutamente incrível o que o senhor pode fazer quando coloca um monte deles trabalhando juntos.